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

Unified Diff: tools/telemetry/telemetry/timeline/model.py

Issue 441873007: Move timeline and importers to use telemetry.value.TraceValue (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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
Index: tools/telemetry/telemetry/timeline/model.py
diff --git a/tools/telemetry/telemetry/timeline/model.py b/tools/telemetry/telemetry/timeline/model.py
index 84cd43650a6470a884fcdb3a478bde6467585850..6c6e340e9c300cdb6d2a877b401a6b93bc6199be 100644
--- a/tools/telemetry/telemetry/timeline/model.py
+++ b/tools/telemetry/telemetry/timeline/model.py
@@ -9,19 +9,18 @@ https://code.google.com/p/trace-viewer/
from operator import attrgetter
-import telemetry.timeline.process as process_module
-from telemetry.timeline import slice as slice_module
from telemetry.timeline import async_slice as async_slice_module
-
-# Register importers for data
from telemetry.timeline import bounds
-from telemetry.timeline import empty_timeline_data_importer
from telemetry.timeline import event_container
from telemetry.timeline import inspector_importer
+from telemetry.timeline import slice as slice_module
+from telemetry.timeline import process as process_module
+from telemetry.timeline import tab_id_importer
from telemetry.timeline import trace_event_importer
+from telemetry.value import trace as trace_value_module
+
_IMPORTERS = [
- empty_timeline_data_importer.EmptyTimelineDataImporter,
inspector_importer.InspectorTimelineImporter,
trace_event_importer.TraceEventTimelineImporter
]
@@ -38,6 +37,7 @@ class MarkerOverlapError(Exception):
super(MarkerOverlapError, self).__init__(
'Overlapping timeline markers found')
+
def IsSliceOrAsyncSlice(t):
if t == async_slice_module.AsyncSlice:
return True
@@ -45,12 +45,11 @@ def IsSliceOrAsyncSlice(t):
class TimelineModel(event_container.TimelineEventContainer):
- def __init__(self, timeline_data=None, shift_world_to_zero=True):
- """ Initializes a TimelineModel. timeline_data can be a single TimelineData
- object, a list of TimelineData objects, or None. If timeline_data is not
- None, all events from it will be imported into the model. The events will
- be shifted such that the first event starts at time 0, if
- shift_world_to_zero is True.
+ def __init__(self, trace_value=None, shift_world_to_zero=True):
+ """ Initializes a TimelineModel.
+
+ The trace_value and shift_world_to_zero are passed to ImportTraces,
+ if provided.
"""
super(TimelineModel, self).__init__(name='TimelineModel', parent=None)
self._bounds = bounds.Bounds()
@@ -62,8 +61,8 @@ class TimelineModel(event_container.TimelineEventContainer):
self.import_errors = []
self.metadata = []
self.flow_events = []
- if timeline_data is not None:
- self.ImportTraces(timeline_data, shift_world_to_zero=shift_world_to_zero)
+ if trace_value is not None:
+ self.ImportTraces(trace_value, shift_world_to_zero=shift_world_to_zero)
def IterChildContainers(self):
for process in self._processes.itervalues():
@@ -102,22 +101,25 @@ class TimelineModel(event_container.TimelineEventContainer):
'trace is imported')
self._tab_ids_to_renderer_threads_map[tab_id] = renderer_thread
- def ImportTraces(self, timeline_data, shift_world_to_zero=True):
+ def ImportTraces(self, trace_value, shift_world_to_zero=True):
+ """
+ Populates the model with the provided trace data.
+
+ trace_value must be a TraceValue.
+
+ Passing shift_world_to_zero-True causes the events to
+ be shifted such that the first event starts at time 0.
+ """
if self._frozen:
raise Exception("Cannot add events once trace is imported")
+ assert isinstance(trace_value, trace_value_module.TraceValue)
- importers = []
- if isinstance(timeline_data, list):
- for item in timeline_data:
- importers.append(self._CreateImporter(item))
- else:
- importers.append(self._CreateImporter(timeline_data))
-
- importers.sort(cmp=lambda x, y: x.import_priority - y.import_priority)
+ importers = self._CreateImporters(trace_value)
for importer in importers:
- # TODO: catch exceptions here and add it to error list
importer.ImportEvents()
+ for record in trace_value.metadata_records:
+ self.metadata.append(record)
self.FinalizeImport(shift_world_to_zero, importers)
def FinalizeImport(self, shift_world_to_zero=False, importers=None):
@@ -225,8 +227,21 @@ class TimelineModel(event_container.TimelineEventContainer):
def GetRendererThreadFromTabId(self, tab_id):
return self._tab_ids_to_renderer_threads_map.get(tab_id, None)
- def _CreateImporter(self, event_data):
- for importer_class in _IMPORTERS:
- if importer_class.CanImport(event_data):
- return importer_class(self, event_data)
- raise ValueError("Could not find an importer for the provided event data")
+ def _CreateImporters(self, trace_value):
+ def FindImporterClassForPart(part):
+ for importer_class in _IMPORTERS:
+ if importer_class.GetSupportedPart() == part:
+ return importer_class
+ return None
+
+
+ importers = []
+ for part in trace_value.active_parts:
+ importer_class = FindImporterClassForPart(part)
+ if not importer_class:
+ raise Exception('No importer found for %s' % repr(part))
+ importers.append(importer_class(self, trace_value))
+
+ importers.sort(lambda k: k.import_order)
slamm 2014/08/12 23:11:59 Are you meaning to use cmp or key here? importers
+
+ return importers

Powered by Google App Engine
This is Rietveld 408576698