aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNigel Tao <nigeltao@golang.org>2011-05-18 14:39:37 -0700
committerNigel Tao <nigeltao@golang.org>2011-05-18 14:39:37 -0700
commit0a2650f3988554674f1d0a160b1f057322db5240 (patch)
tree0738b0c9307e9be1b1efc834e0da4d6d4b1e2054
parente7db6d78a21f7c88542d477ff42a6dbfa254f962 (diff)
downloadgo-0a2650f3988554674f1d0a160b1f057322db5240.tar.gz
go-0a2650f3988554674f1d0a160b1f057322db5240.zip
image/jpeg: small memory layout optimization for encoding.
Before: jpeg.BenchmarkEncodeRGBOpaque ... 23.29 MB/s jpeg.BenchmarkEncodeRGBOpaque ... 23.27 MB/s jpeg.BenchmarkEncodeRGBOpaque ... 23.17 MB/s After: jpeg.BenchmarkEncodeRGBOpaque ... 23.42 MB/s jpeg.BenchmarkEncodeRGBOpaque ... 23.34 MB/s jpeg.BenchmarkEncodeRGBOpaque ... 23.33 MB/s R=rsc CC=golang-dev https://golang.org/cl/4538077
-rw-r--r--src/pkg/image/jpeg/writer.go13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/pkg/image/jpeg/writer.go b/src/pkg/image/jpeg/writer.go
index c23372f0ec..eddaaefb6b 100644
--- a/src/pkg/image/jpeg/writer.go
+++ b/src/pkg/image/jpeg/writer.go
@@ -221,8 +221,7 @@ type encoder struct {
// buf is a scratch buffer.
buf [16]byte
// bits and nBits are accumulated bits to write to w.
- bits uint32
- nBits uint8
+ bits, nBits uint32
// quant is the scaled quantization tables.
quant [nQuantIndex][blockSize]byte
}
@@ -250,7 +249,7 @@ func (e *encoder) writeByte(b byte) {
// emit emits the least significant nBits bits of bits to the bitstream.
// The precondition is bits < 1<<nBits && nBits <= 16.
-func (e *encoder) emit(bits uint32, nBits uint8) {
+func (e *encoder) emit(bits, nBits uint32) {
nBits += e.nBits
bits <<= 32 - nBits
bits |= e.bits
@@ -269,7 +268,7 @@ func (e *encoder) emit(bits uint32, nBits uint8) {
// emitHuff emits the given value with the given Huffman encoder.
func (e *encoder) emitHuff(h huffIndex, value int) {
x := theHuffmanLUT[h][value]
- e.emit(x&(1<<24-1), uint8(x>>24))
+ e.emit(x&(1<<24-1), x>>24)
}
// emitHuffRLE emits a run of runLength copies of value encoded with the given
@@ -279,11 +278,11 @@ func (e *encoder) emitHuffRLE(h huffIndex, runLength, value int) {
if a < 0 {
a, b = -value, value-1
}
- var nBits uint8
+ var nBits uint32
if a < 0x100 {
- nBits = bitCount[a]
+ nBits = uint32(bitCount[a])
} else {
- nBits = 8 + bitCount[a>>8]
+ nBits = 8 + uint32(bitCount[a>>8])
}
e.emitHuff(h, runLength<<4|int(nBits))
if nBits > 0 {