forked from quic-go/quic-go
quicvarint: extend benchmark to use quicvarint.Reader (#5278)
* quicvarint: extend benchmark to use quicvarint.Reader * rename variable
This commit is contained in:
@@ -224,20 +224,41 @@ func randomValues(num int, maxValue uint64) []benchmarkValue {
|
|||||||
return bv
|
return bv
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkRead(b *testing.B) {
|
// using a reader that is also an io.ByteReader
|
||||||
b.Run("1-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt1)) })
|
func BenchmarkReadBytesReader(b *testing.B) {
|
||||||
b.Run("2-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt2)) })
|
b.Run("1-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt1), false) })
|
||||||
b.Run("4-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt4)) })
|
b.Run("2-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt2), false) })
|
||||||
b.Run("8-byte", func(b *testing.B) { benchmarkRead(b, randomValues(min(b.N, 1024), maxVarInt8)) })
|
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{})
|
r := bytes.NewReader([]byte{})
|
||||||
|
var vr Reader
|
||||||
|
if wrapBytesReader {
|
||||||
|
vr = NewReader(&simpleReader{r})
|
||||||
|
} else {
|
||||||
|
vr = NewReader(r)
|
||||||
|
}
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
index := i % len(inputs)
|
index := i % len(inputs)
|
||||||
r.Reset(inputs[index].b)
|
r.Reset(inputs[index].b)
|
||||||
val, err := Read(r)
|
val, err := Read(vr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatal(err)
|
b.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user