diff options
author | zhouzhongyuan <zhouzhongyuan96@gmail.com> | 2020-08-05 15:08:54 +0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-09-23 03:14:03 +0000 |
commit | 83bc1ed3165e31d1fbeb1e6594373dc11b6ae0a4 (patch) | |
tree | 9a6751b123a16143f49b31b924f11975104e4177 /src/encoding | |
parent | 0a9dd47dd817904ec2b4a80b551e6050218ee8a6 (diff) | |
download | go-83bc1ed3165e31d1fbeb1e6594373dc11b6ae0a4.tar.gz go-83bc1ed3165e31d1fbeb1e6594373dc11b6ae0a4.zip |
encoding/binary: remove TODO in Write and add benchmarks
Benchmarks:
goos: linux
goarch: amd64
BenchmarkReadSlice1000Uint8s-8 4097088 296 ns/op 3381.06 MB/s
BenchmarkWriteSlice1000Uint8s-8 4372588 271 ns/op 3694.96 MB/s
Change-Id: I5b6ef0da5052e3381ee9c714bbff541c11ed0259
Reviewed-on: https://go-review.googlesource.com/c/go/+/246837
Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Alberto Donizetti <alb.donizetti@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Alberto Donizetti <alb.donizetti@gmail.com>
Diffstat (limited to 'src/encoding')
-rw-r--r-- | src/encoding/binary/binary.go | 2 | ||||
-rw-r--r-- | src/encoding/binary/binary_test.go | 24 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/encoding/binary/binary.go b/src/encoding/binary/binary.go index a99ca01994..a31149979d 100644 --- a/src/encoding/binary/binary.go +++ b/src/encoding/binary/binary.go @@ -306,7 +306,7 @@ func Write(w io.Writer, order ByteOrder, data interface{}) error { case uint8: bs[0] = v case []uint8: - bs = v // TODO(josharian): avoid allocating bs in this case? + bs = v case *int16: order.PutUint16(bs, uint16(*v)) case int16: diff --git a/src/encoding/binary/binary_test.go b/src/encoding/binary/binary_test.go index aeb4212ec2..5971e0966a 100644 --- a/src/encoding/binary/binary_test.go +++ b/src/encoding/binary/binary_test.go @@ -706,3 +706,27 @@ func BenchmarkWriteSlice1000Float32s(b *testing.B) { } b.StopTimer() } + +func BenchmarkReadSlice1000Uint8s(b *testing.B) { + bsr := &byteSliceReader{} + slice := make([]uint8, 1000) + buf := make([]byte, len(slice)) + b.SetBytes(int64(len(buf))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + bsr.remain = buf + Read(bsr, BigEndian, slice) + } +} + +func BenchmarkWriteSlice1000Uint8s(b *testing.B) { + slice := make([]uint8, 1000) + buf := new(bytes.Buffer) + var w io.Writer = buf + b.SetBytes(1000) + b.ResetTimer() + for i := 0; i < b.N; i++ { + buf.Reset() + Write(w, BigEndian, slice) + } +} |