internal/runtime/cgobench: add Go function call benchmark for comparison

Change-Id: I0ada7fa02eb5f18a78da17bdcfc63333abbd8450
Reviewed-on: https://go-review.googlesource.com/c/go/+/713284
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
Michael Anthony Knyszek 2025-10-16 00:58:20 +00:00 committed by Gopher Robot
parent b24aec598b
commit 710abf74da
2 changed files with 24 additions and 6 deletions

View file

@ -11,13 +11,13 @@ import (
"testing" "testing"
) )
func BenchmarkCgoCall(b *testing.B) { func BenchmarkCall(b *testing.B) {
for b.Loop() { for b.Loop() {
cgobench.Empty() cgobench.Empty()
} }
} }
func BenchmarkCgoCallParallel(b *testing.B) { func BenchmarkCallParallel(b *testing.B) {
b.RunParallel(func(pb *testing.PB) { b.RunParallel(func(pb *testing.PB) {
for pb.Next() { for pb.Next() {
cgobench.Empty() cgobench.Empty()
@ -25,16 +25,30 @@ func BenchmarkCgoCallParallel(b *testing.B) {
}) })
} }
func BenchmarkCgoCall(b *testing.B) {
for b.Loop() {
cgobench.EmptyC()
}
}
func BenchmarkCgoCallParallel(b *testing.B) {
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
cgobench.EmptyC()
}
})
}
func BenchmarkCgoCallWithCallback(b *testing.B) { func BenchmarkCgoCallWithCallback(b *testing.B) {
for b.Loop() { for b.Loop() {
cgobench.Callback() cgobench.CallbackC()
} }
} }
func BenchmarkCgoCallParallelWithCallback(b *testing.B) { func BenchmarkCgoCallParallelWithCallback(b *testing.B) {
b.RunParallel(func(pb *testing.PB) { b.RunParallel(func(pb *testing.PB) {
for pb.Next() { for pb.Next() {
cgobench.Callback() cgobench.CallbackC()
} }
}) })
} }

View file

@ -19,14 +19,18 @@ static void callback() {
*/ */
import "C" import "C"
func Empty() { func EmptyC() {
C.empty() C.empty()
} }
func Callback() { func CallbackC() {
C.callback() C.callback()
} }
//export go_empty_callback //export go_empty_callback
func go_empty_callback() { func go_empty_callback() {
} }
//go:noinline
func Empty() {
}