Index: tools/telemetry/telemetry/timeline/model.py |
diff --git a/tools/telemetry/telemetry/timeline/model.py b/tools/telemetry/telemetry/timeline/model.py |
index a147d43df3625bb073993e13cecd87567cf2c5b5..85cf3c1d1513b67ce4ec09befba5a45996df2484 100644 |
--- a/tools/telemetry/telemetry/timeline/model.py |
+++ b/tools/telemetry/telemetry/timeline/model.py |
@@ -13,6 +13,7 @@ from telemetry.timeline import async_slice as async_slice_module |
from telemetry.timeline import bounds |
from telemetry.timeline import event_container |
from telemetry.timeline import inspector_importer |
+from telemetry.timeline import memory_dump_event |
from telemetry.timeline import process as process_module |
from telemetry.timeline import slice as slice_module |
from telemetry.timeline import surface_flinger_importer |
@@ -69,9 +70,37 @@ class TimelineModel(event_container.TimelineEventContainer): |
self.import_errors = [] |
self.metadata = [] |
self.flow_events = [] |
+ self._memory_dump_events = None |
if trace_data is not None: |
self.ImportTraces(trace_data, shift_world_to_zero=shift_world_to_zero) |
+ def SetMemoryDumpEvents(self, memory_dump_events): |
+ """Populates the model with a sequence of MemoryDumpEvent objects.""" |
+ assert not self._frozen and self._memory_dump_events is None |
+ # keep events sorted in cronological order |
+ self._memory_dump_events = sorted(memory_dump_events, |
+ key=lambda event: event.start) |
+ |
+ def IterMemoryDumpEvents(self, reverse=False): |
+ """Iterate over the memory dump events of this model. |
+ |
+ Args: |
+ reverse: A boolean indicating whether to yield events in reversed time |
+ order. By default events are generated in chronological order. |
+ """ |
+ if self._memory_dump_events is None: |
+ return iter([]) # empty iterator |
+ elif reverse: |
+ return reversed(self._memory_dump_events) |
+ else: |
+ return iter(self._memory_dump_events) |
+ |
+ def IterEventsInThisContainer(self, event_type_predicate, event_predicate): |
+ if event_type_predicate(memory_dump_event.MemoryDumpEvent): |
+ for event in self.IterMemoryDumpEvents(): |
+ if event_predicate(event): |
+ yield event |
+ |
def IterChildContainers(self): |
for process in self._processes.itervalues(): |
yield process |