From f961d8e5b10c317b86efca18e19ef0f238032c0a Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Tue, 21 Sep 2021 14:31:09 -0700 Subject: [PATCH] runtime: add Func method benchmarks Change-Id: Ib76872c22b1be9e611199b84fd96b59beedf786c Reviewed-on: https://go-review.googlesource.com/c/go/+/351457 Trust: Josh Bleecher Snyder Run-TryBot: Josh Bleecher Snyder TryBot-Result: Go Bot Reviewed-by: Brad Fitzpatrick --- src/runtime/symtab_test.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/runtime/symtab_test.go b/src/runtime/symtab_test.go index ffa07c7f3a..99ff0d4420 100644 --- a/src/runtime/symtab_test.go +++ b/src/runtime/symtab_test.go @@ -250,3 +250,35 @@ func TestFunctionAlignmentTraceback(t *testing.T) { t.Errorf("frames.Next() got %+v want %+v", frame.Func, f) } } + +func BenchmarkFunc(b *testing.B) { + pc, _, _, ok := runtime.Caller(0) + if !ok { + b.Fatal("failed to look up PC") + } + f := runtime.FuncForPC(pc) + b.Run("Name", func(b *testing.B) { + for i := 0; i < b.N; i++ { + name := f.Name() + if name != "runtime_test.BenchmarkFunc" { + b.Fatalf("unexpected name %q", name) + } + } + }) + b.Run("Entry", func(b *testing.B) { + for i := 0; i < b.N; i++ { + pc := f.Entry() + if pc == 0 { + b.Fatal("zero PC") + } + } + }) + b.Run("FileLine", func(b *testing.B) { + for i := 0; i < b.N; i++ { + file, line := f.FileLine(pc) + if !strings.HasSuffix(file, "symtab_test.go") || line == 0 { + b.Fatalf("unexpected file/line %q:%d", file, line) + } + } + }) +}