| Index: tools/telemetry/telemetry/value/profiler.py
|
| diff --git a/tools/telemetry/telemetry/value/trace.py b/tools/telemetry/telemetry/value/profiler.py
|
| similarity index 53%
|
| copy from tools/telemetry/telemetry/value/trace.py
|
| copy to tools/telemetry/telemetry/value/profiler.py
|
| index 643f51578fd0bd02bd99b1eeaaba4144f112a63e..1e0c1d9561cdec29976b544a13f71365087b5c7b 100644
|
| --- a/tools/telemetry/telemetry/value/trace.py
|
| +++ b/tools/telemetry/telemetry/value/profiler.py
|
| @@ -6,38 +6,21 @@ import datetime
|
| import logging
|
| import random
|
| import sys
|
| -import tempfile
|
|
|
| from telemetry import value as value_module
|
| from telemetry.util import cloud_storage
|
| -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, tracing_timeline_data, important=False,
|
| +class ProfilerValue(value_module.Value):
|
| + def __init__(self, page, profiler_name, file_handle, important=False,
|
| description=None):
|
| - """A value that contains a TracingTimelineData 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)
|
| + """A value that contains a profiler information."""
|
|
|
| - tf = tempfile.NamedTemporaryFile(delete=False, suffix='.html')
|
| - if page:
|
| - title = page.display_name
|
| - else:
|
| - title = ''
|
| - trace2html.WriteHTMLForTraceDataToFile(
|
| - [tracing_timeline_data.EventData()], title, tf)
|
| - tf.close()
|
| + super(ProfilerValue, self).__init__(
|
| + page, name='profiler', units='', important=important,
|
| + description=description)
|
|
|
| - self._file_handle = file_handle.FromTempFile(tf)
|
| + self._profiler_name = profiler_name
|
| + self._file_handle = file_handle
|
| self._cloud_url = None
|
|
|
| def GetAssociatedFileHandle(self):
|
| @@ -48,7 +31,15 @@ class TraceValue(value_module.Value):
|
| page_name = self.page.url
|
| else:
|
| page_name = None
|
| - return 'TraceValue(%s, %s)' % (page_name, self.name)
|
| + return 'ProfilerValue(%s, %s)' % (page_name, self.name)
|
| +
|
| + @property
|
| + def profiler_name(self):
|
| + return self._profiler_name
|
| +
|
| + @property
|
| + def cloud_url(self):
|
| + return self._cloud_url
|
|
|
| def GetBuildbotDataType(self, output_context):
|
| return None
|
| @@ -64,13 +55,10 @@ class TraceValue(value_module.Value):
|
|
|
| @staticmethod
|
| def GetJSONTypeName():
|
| - return 'trace'
|
| + return 'profiler'
|
|
|
| @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]
|
|
|
| @@ -80,13 +68,15 @@ class TraceValue(value_module.Value):
|
| return None
|
|
|
| def AsDict(self):
|
| - d = super(TraceValue, self).AsDict()
|
| - d['file_id'] = self._file_handle.id
|
| + d = super(ProfilerValue, self).AsDict()
|
| + d['profiler_name'] = self._profiler_name
|
| + if self._cloud_url:
|
| + d['cloud_url'] = self._cloud_url
|
| return d
|
|
|
| def UploadToCloud(self, bucket):
|
| try:
|
| - remote_path = ('trace-file-id_%s-%s-%d%s' % (
|
| + remote_path = ('profiler-file-id_%s-%s-%d%s' % (
|
| self._file_handle.id,
|
| datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S'),
|
| random.randint(1, 100000),
|
| @@ -95,8 +85,9 @@ class TraceValue(value_module.Value):
|
| bucket, remote_path,
|
| self._file_handle.GetAbsPath())
|
| sys.stderr.write(
|
| - 'View generated trace files online at %s for page %s\n' %
|
| + 'View generated profiler files online at %s for page %s\n' %
|
| (self._cloud_url, self.page.url if self.page else 'unknown'))
|
| except cloud_storage.PermissionError as e:
|
| - logging.error('Cannot upload trace files to cloud storage due to '
|
| + logging.error('Cannot upload profiler files to cloud storage due to '
|
| ' permission error: %s' % e.message)
|
| + self._cloud_url = 'error'
|
|
|