blob: b3387ea8bd02a981bc98d837a3635a9e464de6d8 [file] [log] [blame]
#!/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]