From 6fa12172d9f0696b6ae6a0155b63994ae23b8d21 Mon Sep 17 00:00:00 2001 From: Rob Findley Date: Tue, 30 Mar 2021 08:26:24 -0400 Subject: [PATCH] go/parser: add benchmarks for syntax-only parsing and object resolution Change-Id: I73d1b2d18ab4051443d66c60df493d1163d0ba3f Reviewed-on: https://go-review.googlesource.com/c/go/+/306150 Trust: Robert Findley Run-TryBot: Robert Findley TryBot-Result: Go Bot Reviewed-by: Robert Griesemer --- src/go/parser/performance_test.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/go/parser/performance_test.go b/src/go/parser/performance_test.go index f81bcee969..6f8a97770b 100644 --- a/src/go/parser/performance_test.go +++ b/src/go/parser/performance_test.go @@ -10,6 +10,8 @@ import ( "testing" ) +// TODO(rFindley): use a testdata file or file from another package here, to +// avoid a moving target. var src = readFile("parser.go") func readFile(filename string) []byte { @@ -28,3 +30,27 @@ func BenchmarkParse(b *testing.B) { } } } + +func BenchmarkParseOnly(b *testing.B) { + b.SetBytes(int64(len(src))) + for i := 0; i < b.N; i++ { + if _, err := ParseFile(token.NewFileSet(), "", src, ParseComments|SkipObjectResolution); err != nil { + b.Fatalf("benchmark failed due to parse error: %s", err) + } + } +} + +func BenchmarkResolve(b *testing.B) { + b.SetBytes(int64(len(src))) + for i := 0; i < b.N; i++ { + b.StopTimer() + fset := token.NewFileSet() + file, err := ParseFile(fset, "", src, SkipObjectResolution) + if err != nil { + b.Fatalf("benchmark failed due to parse error: %s", err) + } + b.StartTimer() + handle := fset.File(file.Package) + resolveFile(file, handle, nil) + } +} -- 2.50.0