From: Marten Seemann Date: Tue, 5 Aug 2025 05:49:55 +0000 (+0200) Subject: quicvarint: extend benchmark to use quicvarint.Reader (#5278) X-Git-Url: https://git.feebdaed.xyz/?a=commitdiff_plain;h=fa8ca045dd1a6db6540517d8f63cf783ad513c45;p=0xmirror%2Fquic-go.git quicvarint: extend benchmark to use quicvarint.Reader (#5278) * quicvarint: extend benchmark to use quicvarint.Reader * rename variable --- diff --git a/quicvarint/varint_test.go b/quicvarint/varint_test.go index 1bc76e78..fea7d02c 100644 --- a/quicvarint/varint_test.go +++ b/quicvarint/varint_test.go @@ -224,20 +224,41 @@ func randomValues(num int, maxValue uint64) []benchmarkValue { return bv } -func BenchmarkRead(b *testing.B) { - b.Run("1-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt1)) }) - b.Run("2-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt2)) }) - b.Run("4-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt4)) }) - b.Run("8-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt8)) }) +// using a reader that is also an io.ByteReader +func BenchmarkReadBytesReader(b *testing.B) { + b.Run("1-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt1), false) }) + b.Run("2-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt2), false) }) + b.Run("4-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt4), false) }) + b.Run("8-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt8), false) }) } -func benchmarkRead(b *testing.B, inputs []benchmarkValue) { +// using a reader that is not an io.ByteReader +func BenchmarkReadSimpleReader(b *testing.B) { + b.Run("1-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt1), true) }) + b.Run("2-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt2), true) }) + b.Run("4-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt4), true) }) + b.Run("8-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt8), true) }) +} + +// simpleReader satisfies io.Reader, but not io.ByteReader +// This means that NewReader will need to wrap the reader. +type simpleReader struct { + io.Reader +} + +func benchmarkRead(b *testing.B, inputs []benchmarkValue, wrapBytesReader bool) { r := bytes.NewReader([]byte{}) + var vr Reader + if wrapBytesReader { + vr = NewReader(&simpleReader{r}) + } else { + vr = NewReader(r) + } b.ResetTimer() for i := 0; i < b.N; i++ { index := i % len(inputs) r.Reset(inputs[index].b) - val, err := Read(r) + val, err := Read(vr) if err != nil { b.Fatal(err) }