| Index: tools/telemetry/telemetry/core/timeline/inspector_importer.py
|
| diff --git a/tools/telemetry/telemetry/core/timeline/inspector_importer.py b/tools/telemetry/telemetry/core/timeline/inspector_importer.py
|
| index ed9dad9864d1bec99c7285a51e9d56fa46f193fa..fa468cbc6416124542b07bd499426173ffc20a82 100644
|
| --- a/tools/telemetry/telemetry/core/timeline/inspector_importer.py
|
| +++ b/tools/telemetry/telemetry/core/timeline/inspector_importer.py
|
| @@ -4,7 +4,7 @@
|
| '''Imports event data obtained from the inspector's timeline.'''
|
|
|
| from telemetry.core.timeline import importer
|
| -import telemetry.core.timeline.event as timeline_event
|
| +import telemetry.core.timeline.thread as timeline_thread
|
|
|
| class InspectorTimelineImporter(importer.TimelineImporter):
|
| def __init__(self, model, event_data):
|
| @@ -22,34 +22,18 @@ class InspectorTimelineImporter(importer.TimelineImporter):
|
| return False
|
|
|
| def ImportEvents(self):
|
| + render_process = self._model.GetOrCreateProcess(0)
|
| + render_thread = render_process.GetOrCreateThread(0)
|
| for raw_event in self._event_data:
|
| - event = self.RawEventToTimelineEvent(raw_event)
|
| - if event:
|
| - self._model.AddEvent(event)
|
| + InspectorTimelineImporter.AddRawEventToThreadRecursive(
|
| + render_thread, raw_event)
|
|
|
| def FinalizeImport(self):
|
| pass
|
|
|
| @staticmethod
|
| - def RawEventToTimelineEvent(raw_inspector_event):
|
| - """Converts raw_inspector_event to TimelineEvent."""
|
| - return InspectorTimelineImporter._RawEventToTimelineEventRecursive(
|
| - None, raw_inspector_event)
|
| -
|
| - @staticmethod
|
| - def _RawEventToTimelineEventRecursive(
|
| - parent_for_created_events, raw_inspector_event):
|
| - """
|
| - Creates a new TimelineEvent for the raw_inspector_event, if possible, adding
|
| - it to the provided parent_for_created_events.
|
| -
|
| - It then recurses on any child events found inside, building a tree of
|
| - TimelineEvents.
|
| -
|
| - Returns the root of the created tree, or None.
|
| - """
|
| - # Create a TimelineEvent for this raw_inspector_event if possible. Only
|
| - # events with start-time and end-time get imported.
|
| + def AddRawEventToThreadRecursive(thread, raw_inspector_event):
|
| + did_begin_slice = False
|
| if ('startTime' in raw_inspector_event and
|
| 'endTime' in raw_inspector_event):
|
| args = {}
|
| @@ -59,24 +43,27 @@ class InspectorTimelineImporter(importer.TimelineImporter):
|
| args[x] = raw_inspector_event[x]
|
| if len(args) == 0:
|
| args = None
|
| - newly_created_event = timeline_event.TimelineEvent(
|
| - name=raw_inspector_event['type'],
|
| - start=raw_inspector_event['startTime'],
|
| - duration=(raw_inspector_event['endTime'] -
|
| - raw_inspector_event['startTime']),
|
| - args=args,
|
| - parent=parent_for_created_events)
|
| - if parent_for_created_events:
|
| - parent_for_created_events.children.append(newly_created_event)
|
| - else:
|
| - newly_created_event = None
|
| + thread.BeginSlice('inspector',
|
| + raw_inspector_event['type'],
|
| + raw_inspector_event['startTime'],
|
| + args)
|
| + did_begin_slice = True
|
|
|
| - # Process any children events, creating TimelineEvents for them as well.
|
| - if newly_created_event:
|
| - parent_for_children = newly_created_event
|
| - else:
|
| - parent_for_children = parent_for_created_events
|
| for child in raw_inspector_event.get('children', []):
|
| - InspectorTimelineImporter._RawEventToTimelineEventRecursive(
|
| - parent_for_children, child)
|
| - return newly_created_event
|
| + InspectorTimelineImporter.AddRawEventToThreadRecursive(
|
| + thread, child)
|
| +
|
| + if did_begin_slice:
|
| + thread.EndSlice(raw_inspector_event['endTime'])
|
| +
|
| + @staticmethod
|
| + def RawEventToTimelineEvent(raw_inspector_event):
|
| + """Converts raw_inspector_event to TimelineEvent."""
|
| + thread = timeline_thread.Thread(None, 0)
|
| + InspectorTimelineImporter.AddRawEventToThreadRecursive(
|
| + thread, raw_inspector_event)
|
| + thread.FinalizeImport()
|
| + assert len(thread.toplevel_slices) <= 1
|
| + if len(thread.toplevel_slices) == 0:
|
| + return None
|
| + return thread.toplevel_slices[0]
|
|
|