We originally had a `context.Context` for anything that might be traced, but it turned out to be only useful for lifecycle and host functions. For instruction-scoped aspects like memory updates, a context parameter is too fine-grained and also invisible in practice. For example, most users will use the compiler engine, and its memory, global or table access will never use go's context. Signed-off-by: Adrian Cole <adrian@tetrate.io>
47 lines
812 B
Go
47 lines
812 B
Go
package bench
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/tetratelabs/wazero/internal/wasm"
|
|
)
|
|
|
|
func BenchmarkMemory(b *testing.B) {
|
|
mem := &wasm.MemoryInstance{Buffer: make([]byte, wasm.MemoryPageSize), Min: 1}
|
|
if !mem.WriteByte(10, 16) {
|
|
b.Fail()
|
|
}
|
|
|
|
b.Run("ReadByte", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
if v, ok := mem.ReadByte(10); !ok || v != 16 {
|
|
b.Fail()
|
|
}
|
|
}
|
|
})
|
|
|
|
b.Run("ReadUint32Le", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
if v, ok := mem.ReadUint32Le(10); !ok || v != 16 {
|
|
b.Fail()
|
|
}
|
|
}
|
|
})
|
|
|
|
b.Run("WriteByte", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
if !mem.WriteByte(10, 16) {
|
|
b.Fail()
|
|
}
|
|
}
|
|
})
|
|
|
|
b.Run("WriteUint32Le", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
if !mem.WriteUint32Le(10, 16) {
|
|
b.Fail()
|
|
}
|
|
}
|
|
})
|
|
}
|