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

Side by Side Diff: tools/telemetry/telemetry/timeline/model.py

Issue 1196253011: [Telemetry] Adding Memory Timeline Metric (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: memory_timeline metric should use IterMemoryDumpEvents Created 5 years, 5 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 unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698