Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1132)

Unified Diff: infra/scripts/legacy/scripts/slave/telemetry_utils.py

Issue 1213433006: Fork runtest.py and everything it needs src-side for easier hacking (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: runisolatedtest.py Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « infra/scripts/legacy/scripts/slave/slave_utils.py ('k') | infra/scripts/legacy/scripts/slave/xvfb.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: infra/scripts/legacy/scripts/slave/telemetry_utils.py
diff --git a/infra/scripts/legacy/scripts/slave/telemetry_utils.py b/infra/scripts/legacy/scripts/slave/telemetry_utils.py
new file mode 100755
index 0000000000000000000000000000000000000000..e3ea5923a588344c3db0d33025cb3158514ed0b4
--- /dev/null
+++ b/infra/scripts/legacy/scripts/slave/telemetry_utils.py
@@ -0,0 +1,114 @@
+#! /usr/bin/env python
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+# pylint: disable=R0201
+
+"""Log parsing for telemetry tests.
+
+The TelemetryResultsProcessor loads and contains results that were output in
+JSON format from Telemetry. It can be used as a replacement for the classes in
+the performance_log_processor module.
+"""
+
+import json
+import logging
+import os
+
+from slave.performance_log_processor import _FormatHumanReadable
+
+
+class TelemetryResultsProcessor(object):
+
+ def __init__(self, filename, is_ref, cleanup_parent_dir):
+ self._chart_filename = filename
+ self._is_reference_build = is_ref
+ self._cleanup_parent_dir = cleanup_parent_dir
+
+ def ChartJson(self):
+ try:
+ return json.load(open(self._chart_filename))
+ except (IOError, ValueError):
+ logging.error('Error reading telemetry results from %s',
+ self._chart_filename)
+ logging.error('This usually means that telemetry did not run, so it could'
+ ' not generate the file. Please check the device running the test.')
+ return None
+
+ def Cleanup(self):
+ try:
+ os.remove(self._chart_filename)
+ except OSError:
+ logging.error('Unable to remove telemetry output file %s',
+ self._chart_filename)
+ if self._cleanup_parent_dir:
+ try:
+ os.rmdir(os.path.dirname(self._chart_filename))
+ except OSError:
+ logging.error('Unable to remove telemetry output dir %s',
+ os.path.dirname(self._chart_filename))
+
+ def IsChartJson(self):
+ """This is the new telemetry --chartjson output format."""
+ return True
+
+ def IsReferenceBuild(self):
+ return self._is_reference_build
+
+ def ProcessLine(self, line):
+ pass
+
+ def FailedTests(self):
+ return []
+
+ def MemoryToolReportHashes(self): # pylint: disable=R0201
+ return []
+
+ def ParsingErrors(self): # pylint: disable=R0201
+ return []
+
+ def PerformanceSummary(self):
+ """Writes the waterfall display text.
+
+ The waterfall contains lines for each important trace, in the form
+ tracename: value< (refvalue)>
+ """
+ if self._is_reference_build:
+ return []
+
+ chartjson_data = self.ChartJson()
+ if not chartjson_data:
+ return []
+
+ charts = chartjson_data.get('charts')
+ if not charts:
+ return []
+
+ def _summary_to_string(chart_name, chart_values):
+ summary = chart_values.get('summary')
+ if not summary:
+ return None
+
+ important = summary.get('important')
+ if not important:
+ return None
+
+ value_type = summary.get('type')
+ if value_type == 'list_of_scalar_values':
+ values = summary.get('values')
+ if not values or None in values:
+ return '%s: %s' % (chart_name, 'NaN')
+ else:
+ mean = sum(values) / float(len(values))
+ return '%s: %s' % (chart_name, _FormatHumanReadable(mean))
+ elif value_type == 'scalar':
+ value = summary.get('value')
+ if value is None:
+ return '%s: %s' % (chart_name, 'NaN')
+ else:
+ return '%s: %s' % (chart_name, _FormatHumanReadable(value))
+ return None
+
+ gen = (_summary_to_string(chart_name, chart_values)
+ for chart_name, chart_values in sorted(charts.iteritems()))
+ return [i for i in gen if i]
« no previous file with comments | « infra/scripts/legacy/scripts/slave/slave_utils.py ('k') | infra/scripts/legacy/scripts/slave/xvfb.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698