benchcomp: Add a mode for analyzing rule execution time in ninja log files.
llvm-svn: 265860
GitOrigin-RevId: b24f4fb6171eaf2caa8f3cf6adcf11821ec1d27c
diff --git a/utils/benchcomp/main.go b/utils/benchcomp/main.go
index 94acafc..a050f7b 100644
--- a/utils/benchcomp/main.go
+++ b/utils/benchcomp/main.go
@@ -110,6 +110,34 @@
return m
}
+func ninja_logs(path string) map[string]float64 {
+ m := make(map[string]float64)
+
+ fh, err := os.Open(path)
+ if err != nil {
+ panic(err.Error())
+ }
+
+ scanner := bufio.NewScanner(fh)
+ for scanner.Scan() {
+ elems := strings.Split(scanner.Text(), "\t")
+ if len(elems) < 4 {
+ continue
+ }
+ begin, err := strconv.ParseInt(elems[0], 10, 64)
+ if err != nil {
+ continue
+ }
+ end, err := strconv.ParseInt(elems[1], 10, 64)
+ if err != nil {
+ panic(err.Error())
+ }
+ m[elems[3]] = float64(end-begin)
+ }
+
+ return m
+}
+
func main() {
var cmp func(string) map[string]float64
switch os.Args[1] {
@@ -128,6 +156,9 @@
cmp = func(path string) map[string]float64 {
return benchnums(path, "allocs/op")
}
+
+ case "ninja_logs":
+ cmp = ninja_logs
}
syms1 := cmp(os.Args[2])