diff options
Diffstat (limited to 'crosperf/perf_table.py')
-rw-r--r-- | crosperf/perf_table.py | 58 |
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] |