Index: tools/telemetry/telemetry/value/trace.py |
diff --git a/tools/telemetry/telemetry/value/trace.py b/tools/telemetry/telemetry/value/trace.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..118098b838c0ae7793caf21c3bfc9a84819db891 |
--- /dev/null |
+++ b/tools/telemetry/telemetry/value/trace.py |
@@ -0,0 +1,82 @@ |
+# 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. |
+ |
+import os |
+import tempfile |
+ |
+from telemetry import value as value_module |
+from telemetry.util import file_handle |
+import telemetry.web_components # pylint: disable=W0611 |
+from trace_viewer.build import trace2html |
+ |
+class TraceValue(value_module.Value): |
+ def __init__(self, page, name, timeline_data, important=False, |
+ description=None): |
+ """A value that contains a TimelineData object and knows how to output it. |
+ |
+ Adding TraceValues and outputting as JSON will produce a directory full of |
+ HTML files called trace_files. Outputting as chart JSON will also produce |
+ an index, files.html, linking to each of these files. |
+ """ |
+ super(TraceValue, self).__init__(page, name, 'trace', important, |
+ description) |
+ |
+ tf = tempfile.NamedTemporaryFile() |
+ timeline_data.Serialize(tf) |
+ tf.flush() |
+ os.fsync(tf) |
+ |
+ tf2 = tempfile.NamedTemporaryFile() |
+ trace2html.WriteHTMLForTracesToFile([tf.name], tf2) |
+ tf2.flush() |
+ os.fsync(tf2) |
+ |
+ tf.close() |
+ |
+ self._file_handle = file_handle.FromTempFile(tf2) |
+ |
+ def GetAssociatedFileHandle(self): |
+ return self._file_handle |
+ |
+ def __repr__(self): |
+ if self.page: |
+ page_name = self.page.url |
+ else: |
+ page_name = None |
+ return 'TraceValue(%s, %s)' % (page_name, self.name) |
+ |
+ def GetBuildbotDataType(self, output_context): |
+ return None |
+ |
+ def GetBuildbotValue(self): |
+ return None |
+ |
+ def GetRepresentativeNumber(self): |
+ return None |
+ |
+ def GetRepresentativeString(self): |
+ return None |
+ |
+ @staticmethod |
+ def GetJSONTypeName(): |
+ return 'trace' |
+ |
+ @classmethod |
+ def MergeLikeValuesFromSamePage(cls, values): |
+ # TODO(eakuefner): Implement a MultiTraceValue: a Polymer-based, |
+ # componentized, MultiTraceViwer-backed representation of more than one |
+ # trace. |
+ assert len(values) > 0 |
+ return values[0] |
+ |
+ @classmethod |
+ def MergeLikeValuesFromDifferentPages(cls, values, |
+ group_by_name_suffix=False): |
+ return None |
+ |
+ def AsDict(self): |
+ d = super(TraceValue, self).AsDict() |
+ d['file_id'] = self._file_handle.id |
+ |
+ return d |