Index: tools/telemetry/telemetry/timeline/model.py |
diff --git a/tools/telemetry/telemetry/timeline/model.py b/tools/telemetry/telemetry/timeline/model.py |
index 945a072dac457ec4a00d2040119bac6a42c5c7ca..540ca4262bdb07fa339452c34fd8d4b134e28c4b 100644 |
--- a/tools/telemetry/telemetry/timeline/model.py |
+++ b/tools/telemetry/telemetry/timeline/model.py |
@@ -17,6 +17,7 @@ from telemetry.timeline import empty_timeline_data_importer |
from telemetry.timeline import event_container |
from telemetry.timeline import inspector_importer |
from telemetry.timeline import trace_event_importer |
+from telemetry.core.platform.profiler import perfvis_profiler |
# Register importers for data |
@@ -62,6 +63,8 @@ class TimelineModel(event_container.TimelineEventContainer): |
self.import_errors = [] |
self.metadata = [] |
self.flow_events = [] |
+ self.time_shift = 0.0 |
+ |
if timeline_data is not None: |
self.ImportTraces(timeline_data, shift_world_to_zero=shift_world_to_zero) |
@@ -143,11 +146,39 @@ class TimelineModel(event_container.TimelineEventContainer): |
# to prevent the timeline from from being modified. |
self._frozen = True |
+ # Dirty hack... save frame trace information for perfvis_profiler use. |
+ comp_thread = [t for t in self.GetAllThreads() if t.name == 'Compositor'] |
+ if len(comp_thread) > 0: |
+ slices = [ |
+ s for s in comp_thread[0].all_slices if '::SwapBuffers' in s.name] |
+ |
+ if len(slices) > 2: |
+ # Skip first last frames that may have one time costs. |
+ num_frames = len(slices) - 2 |
+ min_time = slices[1].start - self.time_shift |
+ max_time = slices[-2].end - self.time_shift |
+ |
+ perfvis_profiler.timeline_metadata = {} |
+ perfvis_profiler.timeline_metadata['num_frames'] = num_frames |
+ perfvis_profiler.timeline_metadata['start_ts'] = min_time |
+ perfvis_profiler.timeline_metadata['end_ts'] = max_time |
+ |
+ perfvis_profiler.timeline_metadata['pid'] = {} |
+ for process in self._processes.values(): |
+ perfvis_profiler.timeline_metadata['pid'][process.pid] = process.name |
+ |
+ perfvis_profiler.timeline_metadata['tid'] = {} |
+ for thread in self.GetAllThreads(): |
+ perfvis_profiler.timeline_metadata['tid'][thread.tid] = thread.name |
+ print "### TimelineModel: num_frames: %d, start %0.3f end %0.3f ###" % ( |
+ num_frames, min_time, max_time) |
+ |
def ShiftWorldToZero(self): |
self.UpdateBounds() |
if self._bounds.is_empty: |
return |
shift_amount = self._bounds.min |
+ self.time_shift -= shift_amount |
for event in self.IterAllEvents(): |
event.start -= shift_amount |