From: Rob Findley Date: Wed, 7 Apr 2021 21:43:09 +0000 (-0400) Subject: go/scanner: improve variety in benchmarks for file scanning X-Git-Tag: go1.17beta1~426 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=bc6288794de10fddea0a3c3cfcb1cfd2bf2aa8a0;p=gostls13.git go/scanner: improve variety in benchmarks for file scanning BenchmarkScanFile was scanning scanner.go, which makes comparison difficult for a CL modifying that file. That file is also is not necessarily representative syntax. Add a few additional files as subtests to provide a larger variety of metrics. Change-Id: Ib78303c2546debd84a0b5478ae438ba891d9e6e9 Reviewed-on: https://go-review.googlesource.com/c/go/+/308610 Trust: Robert Findley Run-TryBot: Robert Findley TryBot-Result: Go Bot Reviewed-by: Robert Griesemer --- diff --git a/src/go/scanner/scanner_test.go b/src/go/scanner/scanner_test.go index db095b3da6..ac8d257716 100644 --- a/src/go/scanner/scanner_test.go +++ b/src/go/scanner/scanner_test.go @@ -889,26 +889,37 @@ func BenchmarkScan(b *testing.B) { } } -func BenchmarkScanFile(b *testing.B) { - b.StopTimer() - const filename = "scanner.go" - src, err := os.ReadFile(filename) - if err != nil { - panic(err) - } - fset := token.NewFileSet() - file := fset.AddFile(filename, fset.Base(), len(src)) - b.SetBytes(int64(len(src))) - var s Scanner - b.StartTimer() - for i := 0; i < b.N; i++ { - s.Init(file, src, nil, ScanComments) - for { - _, tok, _ := s.Scan() - if tok == token.EOF { - break +func BenchmarkScanFiles(b *testing.B) { + // Scan a few arbitrary large files, and one small one, to provide some + // variety in benchmarks. + for _, p := range []string{ + "go/types/expr.go", + "go/parser/parser.go", + "net/http/server.go", + "go/scanner/errors.go", + } { + b.Run(p, func(b *testing.B) { + b.StopTimer() + filename := filepath.Join("..", "..", filepath.FromSlash(p)) + src, err := os.ReadFile(filename) + if err != nil { + b.Fatal(err) } - } + fset := token.NewFileSet() + file := fset.AddFile(filename, fset.Base(), len(src)) + b.SetBytes(int64(len(src))) + var s Scanner + b.StartTimer() + for i := 0; i < b.N; i++ { + s.Init(file, src, nil, ScanComments) + for { + _, tok, _ := s.Scan() + if tok == token.EOF { + break + } + } + } + }) } }