| OLD | NEW |
| 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 '''A container for timeline-based events and traces and can handle importing | 4 '''A container for timeline-based events and traces and can handle importing |
| 5 raw event data from different sources. This model closely resembles that in the | 5 raw event data from different sources. This model closely resembles that in the |
| 6 trace_viewer project: | 6 trace_viewer project: |
| 7 https://code.google.com/p/trace-viewer/ | 7 https://code.google.com/p/trace-viewer/ |
| 8 ''' | 8 ''' |
| 9 | 9 |
| 10 from operator import attrgetter | 10 from operator import attrgetter |
| 11 | 11 |
| 12 import telemetry.core.timeline.process as tracing_process | 12 import telemetry.core.timeline.process as tracing_process |
| 13 from telemetry.core import web_contents |
| 14 from telemetry.core import browser |
| 13 | 15 |
| 14 # Register importers for data | 16 # Register importers for data |
| 15 from telemetry.core.timeline import inspector_importer | 17 from telemetry.core.timeline import inspector_importer |
| 16 from telemetry.core.timeline import bounds | 18 from telemetry.core.timeline import bounds |
| 17 from telemetry.core.timeline import trace_event_importer | 19 from telemetry.core.timeline import trace_event_importer |
| 18 | 20 |
| 19 _IMPORTERS = [ | 21 _IMPORTERS = [ |
| 20 inspector_importer.InspectorTimelineImporter, | 22 inspector_importer.InspectorTimelineImporter, |
| 21 trace_event_importer.TraceEventTimelineImporter | 23 trace_event_importer.TraceEventTimelineImporter |
| 22 ] | 24 ] |
| (...skipping 11 matching lines...) Expand all Loading... |
| 34 'Overlapping timeline markers found') | 36 'Overlapping timeline markers found') |
| 35 | 37 |
| 36 | 38 |
| 37 class TimelineModel(object): | 39 class TimelineModel(object): |
| 38 def __init__(self, event_data=None, shift_world_to_zero=True): | 40 def __init__(self, event_data=None, shift_world_to_zero=True): |
| 39 self._bounds = bounds.Bounds() | 41 self._bounds = bounds.Bounds() |
| 40 self._processes = {} | 42 self._processes = {} |
| 41 self._frozen = False | 43 self._frozen = False |
| 42 self.import_errors = [] | 44 self.import_errors = [] |
| 43 self.metadata = [] | 45 self.metadata = [] |
| 46 self._core_object_to_timeline_container_map = {} |
| 44 | 47 |
| 45 if event_data is not None: | 48 if event_data is not None: |
| 46 self.ImportTraces([event_data], shift_world_to_zero=shift_world_to_zero) | 49 self.ImportTraces([event_data], shift_world_to_zero=shift_world_to_zero) |
| 47 | 50 |
| 48 @property | 51 @property |
| 49 def bounds(self): | 52 def bounds(self): |
| 50 return self._bounds | 53 return self._bounds |
| 51 | 54 |
| 52 @property | 55 @property |
| 53 def processes(self): | 56 def processes(self): |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 for (i, event) in enumerate(events): | 164 for (i, event) in enumerate(events): |
| 162 if event.name != labels[i]: | 165 if event.name != labels[i]: |
| 163 raise MarkerMismatchError() | 166 raise MarkerMismatchError() |
| 164 for i in xrange(0, len(events)): | 167 for i in xrange(0, len(events)): |
| 165 for j in xrange(i+1, len(events)): | 168 for j in xrange(i+1, len(events)): |
| 166 if (events[j].start < events[i].start + events[i].duration): | 169 if (events[j].start < events[i].start + events[i].duration): |
| 167 raise MarkerOverlapError() | 170 raise MarkerOverlapError() |
| 168 | 171 |
| 169 return events | 172 return events |
| 170 | 173 |
| 174 def GetRendererProcessFromTab(self, tab): |
| 175 return self._core_object_to_timeline_container_map[tab] |
| 176 |
| 177 def AddCoreObjectToContainerMapping(self, core_object, container): |
| 178 """ Add a mapping from a core object to a timeline container. |
| 179 |
| 180 Used for example to map a Tab to its renderer process in the timeline model. |
| 181 """ |
| 182 assert(isinstance(core_object, web_contents.WebContents) or |
| 183 isinstance(core_object, browser.Browser)) |
| 184 self._core_object_to_timeline_container_map[core_object] = container |
| 185 |
| 171 def _CreateImporter(self, event_data): | 186 def _CreateImporter(self, event_data): |
| 172 for importer_class in _IMPORTERS: | 187 for importer_class in _IMPORTERS: |
| 173 if importer_class.CanImport(event_data): | 188 if importer_class.CanImport(event_data): |
| 174 return importer_class(self, event_data) | 189 return importer_class(self, event_data) |
| 175 raise ValueError("Could not find an importer for the provided event data") | 190 raise ValueError("Could not find an importer for the provided event data") |
| OLD | NEW |