]> Cypherpunks repositories - gostls13.git/commitdiff
go/scanner: improve variety in benchmarks for file scanning
authorRob Findley <rfindley@google.com>
Wed, 7 Apr 2021 21:43:09 +0000 (17:43 -0400)
committerRobert Findley <rfindley@google.com>
Tue, 27 Apr 2021 15:57:56 +0000 (15:57 +0000)
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 <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/go/scanner/scanner_test.go

index db095b3da630e4ff62465e222b0d341361a07408..ac8d2577169bc94b41114fe256fa85dafd4db39e 100644 (file)
@@ -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
+                                       }
+                               }
+                       }
+               })
        }
 }