aboutsummaryrefslogtreecommitdiff
path: root/src/encoding
diff options
context:
space:
mode:
authorzhouzhongyuan <zhouzhongyuan96@gmail.com>2020-08-05 15:08:54 +0800
committerIan Lance Taylor <iant@golang.org>2020-09-23 03:14:03 +0000
commit83bc1ed3165e31d1fbeb1e6594373dc11b6ae0a4 (patch)
tree9a6751b123a16143f49b31b924f11975104e4177 /src/encoding
parent0a9dd47dd817904ec2b4a80b551e6050218ee8a6 (diff)
downloadgo-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.go2
-rw-r--r--src/encoding/binary/binary_test.go24
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)
+ }
+}