Add benchmarks for OutMessage.Reset.
parent
3b8b4e55df
commit
92e3407014
|
@ -0,0 +1,36 @@
|
||||||
|
package buffer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
func BenchmarkOutMessageReset(b *testing.B) {
|
||||||
|
// A single buffer, which should fit in some level of CPU cache.
|
||||||
|
b.Run("Single buffer", func(b *testing.B) {
|
||||||
|
b.SetBytes(int64(unsafe.Sizeof(OutMessage{})))
|
||||||
|
|
||||||
|
var om OutMessage
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
om.Reset()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Many megabytes worth of buffers, which should defeat the CPU cache.
|
||||||
|
b.Run("Many buffers", func(b *testing.B) {
|
||||||
|
b.SetBytes(int64(unsafe.Sizeof(OutMessage{})))
|
||||||
|
|
||||||
|
// The number of messages; intentionally a power of two.
|
||||||
|
const numMessages = 128
|
||||||
|
|
||||||
|
var oms [numMessages]OutMessage
|
||||||
|
if s := unsafe.Sizeof(oms); s < 128<<20 {
|
||||||
|
panic(fmt.Sprintf("Array is too small; total size: %d", s))
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
oms[i%numMessages].Reset()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue