aboutsummaryrefslogtreecommitdiff
path: root/src/compress
diff options
context:
space:
mode:
authorDan Scales <danscales@google.com>2020-09-30 16:34:47 -0700
committerDan Scales <danscales@google.com>2020-10-06 20:30:36 +0000
commit04c7e32517faf6257986e7c4cdd3f5f03eeae37b (patch)
treef31f611af939a6994375cd41bf9fec01c7ba7e39 /src/compress
parentbdab5df40f474c7768a945ef4fcf5aab634f7af5 (diff)
downloadgo-04c7e32517faf6257986e7c4cdd3f5f03eeae37b.tar.gz
go-04c7e32517faf6257986e7c4cdd3f5f03eeae37b.zip
compress/flate: remove unneeded zeroing of bytes array in (*huffmanBitWriter).reset
There is no correctness reason to zero out the w.bytes array in (w *huffmanBitWriter).reset, since w.nbytes is correctly set to zero. The elements of the bytes array are always written sequentially, with nbytes indicating how many elements have been written, and are only read up to the current value of nybytes. We have a pprof profile of a web server that compresses its request/responses, and the zeroing in reset() is taking up 2.6% of the CPU time of the server (and could be causing more slowdowns elsewhere due to its effects on the cache). This overhead may be showing up especially because there are many request/responses that are all fairly small. I'm not sure if the zeroing of the bytes array was intended as extra protection of data across reset uses in the same program, but no protection is needed as long as the huffman_bit_writer code remains correct. Change-Id: I67f2b2f56cff9dcc38d8fc0aea885bb010aeedbf Reviewed-on: https://go-review.googlesource.com/c/go/+/258577 Run-TryBot: Dan Scales <danscales@google.com> Run-TryBot: Joe Tsai <joetsai@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Klaus Post <klauspost@gmail.com> Reviewed-by: Joe Tsai <joetsai@google.com> Trust: Joe Tsai <joetsai@google.com> Trust: Dan Scales <danscales@google.com>
Diffstat (limited to 'src/compress')
-rw-r--r--src/compress/flate/huffman_bit_writer.go4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/compress/flate/huffman_bit_writer.go b/src/compress/flate/huffman_bit_writer.go
index f111f9f592..b3ae76d082 100644
--- a/src/compress/flate/huffman_bit_writer.go
+++ b/src/compress/flate/huffman_bit_writer.go
@@ -75,7 +75,8 @@ type huffmanBitWriter struct {
writer io.Writer
// Data waiting to be written is bytes[0:nbytes]
- // and then the low nbits of bits.
+ // and then the low nbits of bits. Data is always written
+ // sequentially into the bytes array.
bits uint64
nbits uint
bytes [bufferSize]byte
@@ -105,7 +106,6 @@ func newHuffmanBitWriter(w io.Writer) *huffmanBitWriter {
func (w *huffmanBitWriter) reset(writer io.Writer) {
w.writer = writer
w.bits, w.nbits, w.nbytes, w.err = 0, 0, 0, nil
- w.bytes = [bufferSize]byte{}
}
func (w *huffmanBitWriter) flush() {