diff options
Diffstat (limited to 'crosperf/results_cache.py')
-rw-r--r-- | crosperf/results_cache.py | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/crosperf/results_cache.py b/crosperf/results_cache.py index 941e841c..3296fe1a 100644 --- a/crosperf/results_cache.py +++ b/crosperf/results_cache.py @@ -52,6 +52,7 @@ class Result(object): self.machine = machine self.perf_data_files = [] self.perf_report_files = [] + self.results_file = [] self.chrome_version = '' self.err = None self.chroot_results_dir = '' @@ -199,6 +200,9 @@ class Result(object): raise Exception('Could not run find command!') return out + def GetResultsFile(self): + return self.FindFilesInResultsDir('-name results-chart.json').splitlines() + def GetPerfDataFiles(self): return self.FindFilesInResultsDir('-name perf.data').splitlines() @@ -283,6 +287,7 @@ class Result(object): self.chroot_results_dir = self.GetResultsDir() self.results_dir = misc.GetOutsideChrootPath(self.chromeos_root, self.chroot_results_dir) + self.results_file = self.GetResultsFile() self.perf_data_files = self.GetPerfDataFiles() # Include all perf.report data in table. self.perf_report_files = self.GeneratePerfReportFiles() @@ -291,11 +296,40 @@ class Result(object): # Grab keyvals from the directory. self.ProcessResults() + def ProcessJsonResults(self): + # Open and parse the json results file generated by telemetry/test_that. + if not self.results_file: + raise IOError('No results file found.') + filename = self.results_file[0] + if not filename.endswith('.json'): + raise IOError('Attempt to call json on non-json file: %s' % filename) + + keyvals = dict() + if os.path.exists(filename): + raw_dict = dict() + with open(filename, 'r') as f: + raw_dict = json.load(f) + for k in raw_dict: + field_dict = raw_dict[k] + for item in field_dict: + keyname = k + "__" + item + value_dict = field_dict[item] + result = value_dict['value'] + units = value_dict['units'] + new_value = [ result, units ] + keyvals[keyname] = new_value + return keyvals + def ProcessResults(self): # Note that this function doesn't know anything about whether there is a # cache hit or miss. It should process results agnostic of the cache hit # state. - self.keyvals = self.GetKeyvals() + if self.results_file and self.results_file[0].find('results_chart.json'): + self.keyvals = self.ProcessJsonResults() + else: + print('\n ** WARNING **: Had to use deprecated output-method to ' + 'collect results.\n') + self.keyvals = self.GetKeyvals() self.keyvals['retval'] = self.retval # Generate report from all perf.data files. # Now parse all perf report files and include them in keyvals. |