aboutsummaryrefslogtreecommitdiff
path: root/crosperf/perf_table.py
diff options
context:
space:
mode:
Diffstat (limited to 'crosperf/perf_table.py')
-rw-r--r--crosperf/perf_table.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/crosperf/perf_table.py b/crosperf/perf_table.py
new file mode 100644
index 00000000..b3387ea8
--- /dev/null
+++ b/crosperf/perf_table.py
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+"""Parse perf report data for tabulator."""
+
+import os
+
+from utils import perf_diff
+
+def ParsePerfReport(perf_file):
+ """It should return a dict."""
+
+ return {"cycles": {"foo": 10, "bar": 20},
+ "cache_miss": {"foo": 20, "bar": 10}}
+
+
+class PerfTable(object):
+ """The class to generate dicts for tabulator."""
+
+ def __init__(self, experiment, label_names):
+ self._experiment = experiment
+ self._label_names = label_names
+ self.perf_data = {}
+ self.GenerateData()
+ # {benchmark:{perf_event1:[[{func1:number, func2:number},
+ # {func1: number, func2: number}]], ...},
+ # benchmark2:...}
+
+ def GenerateData(self):
+ for label in self._label_names:
+ for benchmark in self._experiment.benchmarks:
+ for i in range(1, benchmark.iterations+1):
+ dir_name = label + benchmark.name + str(i)
+ dir_name = filter(str.isalnum, dir_name)
+ perf_file = os.path.join(self._experiment.results_directory,
+ dir_name,
+ "perf.data.report.0")
+ self.ReadPerfReport(perf_file, label, benchmark.name, i - 1)
+
+ def ReadPerfReport(self, perf_file, label, benchmark_name, iteration):
+ """Add the data from one run to the dict."""
+ if not os.path.isfile(perf_file):
+ return
+ perf_of_run = perf_diff.GetPerfDictFromReport(perf_file)
+ if benchmark_name not in self.perf_data:
+ self.perf_data[benchmark_name] = {}
+ for event in perf_of_run:
+ self.perf_data[benchmark_name][event] = []
+ ben_data = self.perf_data[benchmark_name]
+
+ label_index = self._label_names.index(label)
+ for event in ben_data:
+ while len(ben_data[event]) <= label_index:
+ ben_data[event].append([])
+ data_for_label = ben_data[event][label_index]
+ while len(data_for_label) <= iteration:
+ data_for_label.append({})
+ data_for_label[iteration] = perf_of_run[event]