From: Rob Findley Date: Tue, 30 Mar 2021 12:26:24 +0000 (-0400) Subject: go/parser: add benchmarks for syntax-only parsing and object resolution X-Git-Tag: go1.17beta1~427 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6fa12172d9f0696b6ae6a0155b63994ae23b8d21;p=gostls13.git 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 --- 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) + } +}