diff options
Diffstat (limited to 'test/garbage/parser.go')
-rw-r--r-- | test/garbage/parser.go | 237 |
1 files changed, 0 insertions, 237 deletions
diff --git a/test/garbage/parser.go b/test/garbage/parser.go deleted file mode 100644 index 19a96bc63..000000000 --- a/test/garbage/parser.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Garbage collection benchmark: parse Go packages repeatedly. - -package main - -import ( - "flag" - "fmt" - "go/ast" - "go/parser" - "go/token" - "os" - "path" - "runtime" - "strings" - "time" - "http" - _ "http/pprof" - "log" -) - -var serve = flag.String("serve", "", "serve http on this address at end") - -func isGoFile(dir *os.FileInfo) bool { - return dir.IsRegular() && - !strings.HasPrefix(dir.Name, ".") && // ignore .files - path.Ext(dir.Name) == ".go" -} - -func isPkgFile(dir *os.FileInfo) bool { - return isGoFile(dir) && - !strings.HasSuffix(dir.Name, "_test.go") // ignore test files -} - -func pkgName(filename string) string { - file, err := parser.ParseFile(token.NewFileSet(), filename, nil, parser.PackageClauseOnly) - if err != nil || file == nil { - return "" - } - return file.Name.Name -} - -func parseDir(dirpath string) map[string]*ast.Package { - // the package name is the directory name within its parent - // (use dirname instead of path because dirname is clean; i.e. has no trailing '/') - _, pkgname := path.Split(dirpath) - - // filter function to select the desired .go files - filter := func(d *os.FileInfo) bool { - if isPkgFile(d) { - // Some directories contain main packages: Only accept - // files that belong to the expected package so that - // parser.ParsePackage doesn't return "multiple packages - // found" errors. - // Additionally, accept the special package name - // fakePkgName if we are looking at cmd documentation. - name := pkgName(dirpath + "/" + d.Name) - return name == pkgname - } - return false - } - - // get package AST - pkgs, err := parser.ParseDir(token.NewFileSet(), dirpath, filter, parser.ParseComments) - if err != nil { - println("parse", dirpath, err.String()) - panic("fail") - } - return pkgs -} - -func main() { - runtime.GOMAXPROCS(4) - go func() {}() - go func() {}() - go func() {}() - st := &runtime.MemStats - packages = append(packages, packages...) - packages = append(packages, packages...) - n := flag.Int("n", 4, "iterations") - p := flag.Int("p", len(packages), "# of packages to keep in memory") - flag.BoolVar(&st.DebugGC, "d", st.DebugGC, "print GC debugging info (pause times)") - flag.Parse() - - var lastParsed []map[string]*ast.Package - var t0 int64 - pkgroot := runtime.GOROOT() + "/src/pkg/" - for pass := 0; pass < 2; pass++ { - // Once the heap is grown to full size, reset counters. - // This hides the start-up pauses, which are much smaller - // than the normal pauses and would otherwise make - // the average look much better than it actually is. - st.NumGC = 0 - st.PauseTotalNs = 0 - t0 = time.Nanoseconds() - - for i := 0; i < *n; i++ { - parsed := make([]map[string]*ast.Package, *p) - for j := range parsed { - parsed[j] = parseDir(pkgroot + packages[j%len(packages)]) - } - if i+1 == *n && *serve != "" { - lastParsed = parsed - } - } - runtime.GC() - runtime.GC() - } - t1 := time.Nanoseconds() - - fmt.Printf("Alloc=%d/%d Heap=%d Mallocs=%d PauseTime=%.3f/%d = %.3f\n", - st.Alloc, st.TotalAlloc, - st.Sys, - st.Mallocs, float64(st.PauseTotalNs)/1e9, - st.NumGC, float64(st.PauseTotalNs)/1e9/float64(st.NumGC)) - - /* - fmt.Printf("%10s %10s %10s\n", "size", "#alloc", "#free") - for _, s := range st.BySize { - fmt.Printf("%10d %10d %10d\n", s.Size, s.Mallocs, s.Frees) - } - */ - // Standard gotest benchmark output, collected by build dashboard. - gcstats("BenchmarkParser", *n, t1-t0) - - if *serve != "" { - log.Fatal(http.ListenAndServe(*serve, nil)) - println(lastParsed) - } -} - - -var packages = []string{ - "archive/tar", - "asn1", - "big", - "bufio", - "bytes", - "cmath", - "compress/flate", - "compress/gzip", - "compress/zlib", - "container/heap", - "container/list", - "container/ring", - "container/vector", - "crypto/aes", - "crypto/block", - "crypto/blowfish", - "crypto/hmac", - "crypto/md4", - "crypto/md5", - "crypto/rand", - "crypto/rc4", - "crypto/rsa", - "crypto/sha1", - "crypto/sha256", - "crypto/sha512", - "crypto/subtle", - "crypto/tls", - "crypto/x509", - "crypto/xtea", - "debug/dwarf", - "debug/macho", - "debug/elf", - "debug/gosym", - "debug/proc", - "ebnf", - "encoding/ascii85", - "encoding/base64", - "encoding/binary", - "encoding/git85", - "encoding/hex", - "encoding/pem", - "exec", - "exp/datafmt", - "exp/draw", - "exp/eval", - "exp/iterable", - "expvar", - "flag", - "fmt", - "go/ast", - "go/doc", - "go/parser", - "go/printer", - "go/scanner", - "go/token", - "gob", - "hash", - "hash/adler32", - "hash/crc32", - "hash/crc64", - "http", - "image", - "image/jpeg", - "image/png", - "io", - "io/ioutil", - "json", - "log", - "math", - "mime", - "net", - "os", - "os/signal", - "patch", - "path", - "rand", - "reflect", - "regexp", - "rpc", - "runtime", - "scanner", - "sort", - "smtp", - "strconv", - "strings", - "sync", - "syscall", - "syslog", - "tabwriter", - "template", - "testing", - "testing/iotest", - "testing/quick", - "testing/script", - "time", - "unicode", - "utf8", - "utf16", - "websocket", - "xml", -} |