Add benchmarks for OutMessage.Reset.

geesefs-0-30-9
Aaron Jacobs 2016-12-19 09:46:08 +11:00
parent 3b8b4e55df
commit 92e3407014
1 changed files with 36 additions and 0 deletions

View File

@ -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()
}
})
}