| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 from telemetry.timeline import async_slice as async_slice_module | 12 from telemetry.timeline import async_slice as async_slice_module |
| 13 from telemetry.timeline import bounds | 13 from telemetry.timeline import bounds |
| 14 from telemetry.timeline import event_container | 14 from telemetry.timeline import event_container |
| 15 from telemetry.timeline import inspector_importer | 15 from telemetry.timeline import inspector_importer |
| 16 from telemetry.timeline import memory_dump_event |
| 16 from telemetry.timeline import process as process_module | 17 from telemetry.timeline import process as process_module |
| 17 from telemetry.timeline import slice as slice_module | 18 from telemetry.timeline import slice as slice_module |
| 18 from telemetry.timeline import surface_flinger_importer | 19 from telemetry.timeline import surface_flinger_importer |
| 19 from telemetry.timeline import tab_id_importer | 20 from telemetry.timeline import tab_id_importer |
| 20 from telemetry.timeline import trace_data as trace_data_module | 21 from telemetry.timeline import trace_data as trace_data_module |
| 21 from telemetry.timeline import trace_event_importer | 22 from telemetry.timeline import trace_event_importer |
| 22 | 23 |
| 23 # Register importers for data | 24 # Register importers for data |
| 24 | 25 |
| 25 _IMPORTERS = [ | 26 _IMPORTERS = [ |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 self._thread_time_bounds = {} | 63 self._thread_time_bounds = {} |
| 63 self._processes = {} | 64 self._processes = {} |
| 64 self._browser_process = None | 65 self._browser_process = None |
| 65 self._gpu_process = None | 66 self._gpu_process = None |
| 66 self._surface_flinger_process = None | 67 self._surface_flinger_process = None |
| 67 self._frozen = False | 68 self._frozen = False |
| 68 self._tab_ids_to_renderer_threads_map = {} | 69 self._tab_ids_to_renderer_threads_map = {} |
| 69 self.import_errors = [] | 70 self.import_errors = [] |
| 70 self.metadata = [] | 71 self.metadata = [] |
| 71 self.flow_events = [] | 72 self.flow_events = [] |
| 73 self._memory_dump_events = None |
| 72 if trace_data is not None: | 74 if trace_data is not None: |
| 73 self.ImportTraces(trace_data, shift_world_to_zero=shift_world_to_zero) | 75 self.ImportTraces(trace_data, shift_world_to_zero=shift_world_to_zero) |
| 74 | 76 |
| 77 def SetMemoryDumpEvents(self, memory_dump_events): |
| 78 """Populates the model with a sequence of MemoryDumpEvent objects.""" |
| 79 assert not self._frozen and self._memory_dump_events is None |
| 80 # keep events sorted in cronological order |
| 81 self._memory_dump_events = sorted(memory_dump_events, |
| 82 key=lambda event: event.start) |
| 83 |
| 84 def IterMemoryDumpEvents(self, reverse=False): |
| 85 """Iterate over the memory dump events of this model. |
| 86 |
| 87 Args: |
| 88 reverse: A boolean indicating whether to yield events in reversed time |
| 89 order. By default events are generated in chronological order. |
| 90 """ |
| 91 if self._memory_dump_events is None: |
| 92 return iter([]) # empty iterator |
| 93 elif reverse: |
| 94 return reversed(self._memory_dump_events) |
| 95 else: |
| 96 return iter(self._memory_dump_events) |
| 97 |
| 98 def IterEventsInThisContainer(self, event_type_predicate, event_predicate): |
| 99 if event_type_predicate(memory_dump_event.MemoryDumpEvent): |
| 100 for event in self.IterMemoryDumpEvents(): |
| 101 if event_predicate(event): |
| 102 yield event |
| 103 |
| 75 def IterChildContainers(self): | 104 def IterChildContainers(self): |
| 76 for process in self._processes.itervalues(): | 105 for process in self._processes.itervalues(): |
| 77 yield process | 106 yield process |
| 78 | 107 |
| 79 def GetAllProcesses(self): | 108 def GetAllProcesses(self): |
| 80 return self._processes.values() | 109 return self._processes.values() |
| 81 | 110 |
| 82 def GetAllThreads(self): | 111 def GetAllThreads(self): |
| 83 threads = [] | 112 threads = [] |
| 84 for process in self._processes.values(): | 113 for process in self._processes.values(): |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 importers = [] | 293 importers = [] |
| 265 for part in trace_data.active_parts: | 294 for part in trace_data.active_parts: |
| 266 importer_class = FindImporterClassForPart(part) | 295 importer_class = FindImporterClassForPart(part) |
| 267 if not importer_class: | 296 if not importer_class: |
| 268 raise Exception('No importer found for %s' % repr(part)) | 297 raise Exception('No importer found for %s' % repr(part)) |
| 269 importers.append(importer_class(self, trace_data)) | 298 importers.append(importer_class(self, trace_data)) |
| 270 | 299 |
| 271 importers.sort(key=lambda k: k.import_order) | 300 importers.sort(key=lambda k: k.import_order) |
| 272 | 301 |
| 273 return importers | 302 return importers |
| OLD | NEW |