aboutsummaryrefslogtreecommitdiff
path: root/crosperf
diff options
context:
space:
mode:
authorCaroline Tice <cmtice@google.com>2016-07-22 16:00:02 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-07-25 14:33:09 -0700
commit180fb3868ae7a625cd82427ad29bc6224504c757 (patch)
tree7628ecb880b6d8a04b4fb588c47875419cdc52c8 /crosperf
parenta8af9a7a2462b00e72deff99327bdb452a715277 (diff)
downloadtoolchain-utils-180fb3868ae7a625cd82427ad29bc6224504c757.tar.gz
[crosperf] Get telemetry results from file instead of stdout.
This CL fixes crosperf to read the telemetry json results file for getting its results, rather than parsing stdout. BUG=chromium:620464 TEST=Successfully got results for octane, kraken & speedometer on daisy. Change-Id: I5bf8cf143688d83ca38c6453006360a45e945544 Reviewed-on: https://chrome-internal-review.googlesource.com/270698 Commit-Ready: Caroline Tice <cmtice@google.com> Tested-by: Caroline Tice <cmtice@google.com> Reviewed-by: Yunlian Jiang <yunlian@google.com>
Diffstat (limited to 'crosperf')
-rw-r--r--crosperf/results_cache.py36
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.