Index: tools/telemetry/telemetry/value/trace.py |
diff --git a/tools/telemetry/telemetry/value/trace.py b/tools/telemetry/telemetry/value/trace.py |
deleted file mode 100644 |
index 147eeea14a5457c1288bf0c3b6bb732b48ed1261..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/value/trace.py |
+++ /dev/null |
@@ -1,147 +0,0 @@ |
-# 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 datetime |
-import logging |
-import os |
-import random |
-import shutil |
-import StringIO |
-import sys |
-import tempfile |
- |
-from catapult_base import cloud_storage # pylint: disable=import-error |
- |
-from telemetry.internal.util import file_handle |
-from telemetry.timeline import trace_data as trace_data_module |
-from telemetry import value as value_module |
- |
-from tracing_build import trace2html |
- |
- |
-class TraceValue(value_module.Value): |
- def __init__(self, page, trace_data, important=False, description=None): |
- """A value that contains a TraceData 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', units='', important=important, |
- description=description, tir_label=None) |
- self._temp_file = self._GetTempFileHandle(trace_data) |
- self._cloud_url = None |
- self._serialized_file_handle = None |
- |
- def _GetTempFileHandle(self, trace_data): |
- if self.page: |
- title = self.page.display_name |
- else: |
- title = '' |
- content = StringIO.StringIO() |
- trace2html.WriteHTMLForTraceDataToFile( |
- [trace_data.GetEventsFor(trace_data_module.CHROME_TRACE_PART)], |
- title, |
- content) |
- tf = tempfile.NamedTemporaryFile(delete=False, suffix='.html') |
- tf.write(content.getvalue().encode('utf-8')) |
- tf.close() |
- return file_handle.FromTempFile(tf) |
- |
- def __repr__(self): |
- if self.page: |
- page_name = self.page.display_name |
- else: |
- page_name = 'None' |
- return 'TraceValue(%s, %s)' % (page_name, self.name) |
- |
- def CleanUp(self): |
- """Cleans up tempfile after it is no longer needed. |
- |
- A cleaned up TraceValue cannot be used for further operations. CleanUp() |
- may be called more than once without error. |
- """ |
- if self._temp_file is None: |
- return |
- os.remove(self._temp_file.GetAbsPath()) |
- self._temp_file = None |
- |
- def __enter__(self): |
- return self |
- |
- def __exit__(self, _, __, ___): |
- self.CleanUp() |
- |
- @property |
- def cleaned_up(self): |
- return self._temp_file is None |
- |
- 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): |
- assert len(values) > 0 |
- return values[0] |
- |
- @classmethod |
- def MergeLikeValuesFromDifferentPages(cls, values): |
- return None |
- |
- def AsDict(self): |
- if self._temp_file is None: |
- raise ValueError('Tried to serialize TraceValue without tempfile.') |
- d = super(TraceValue, self).AsDict() |
- if self._serialized_file_handle: |
- d['file_id'] = self._serialized_file_handle.id |
- if self._cloud_url: |
- d['cloud_url'] = self._cloud_url |
- return d |
- |
- def Serialize(self, dir_path): |
- if self._temp_file is None: |
- raise ValueError('Tried to serialize nonexistent trace.') |
- file_name = str(self._temp_file.id) + self._temp_file.extension |
- file_path = os.path.abspath(os.path.join(dir_path, file_name)) |
- shutil.copy(self._temp_file.GetAbsPath(), file_path) |
- self._serialized_file_handle = file_handle.FromFilePath(file_path) |
- return self._serialized_file_handle |
- |
- def UploadToCloud(self, bucket): |
- if self._temp_file is None: |
- raise ValueError('Tried to upload nonexistent trace to Cloud Storage.') |
- try: |
- if self._serialized_file_handle: |
- fh = self._serialized_file_handle |
- else: |
- fh = self._temp_file |
- remote_path = ('trace-file-id_%s-%s-%d%s' % ( |
- fh.id, |
- datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S'), |
- random.randint(1, 100000), |
- fh.extension)) |
- self._cloud_url = cloud_storage.Insert( |
- bucket, remote_path, fh.GetAbsPath()) |
- sys.stderr.write( |
- 'View generated trace files online at %s for page %s\n' % |
- (self._cloud_url, self.page.url if self.page else 'unknown')) |
- return self._cloud_url |
- except cloud_storage.PermissionError as e: |
- logging.error('Cannot upload trace files to cloud storage due to ' |
- ' permission error: %s' % e.message) |