| Index: tools/telemetry/telemetry/web_perf/metrics/rendering_frame.py
|
| diff --git a/tools/telemetry/telemetry/web_perf/metrics/rendering_frame.py b/tools/telemetry/telemetry/web_perf/metrics/rendering_frame.py
|
| deleted file mode 100644
|
| index 48f8546f5a5253b9e2c6484da695c286e1d7625a..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/web_perf/metrics/rendering_frame.py
|
| +++ /dev/null
|
| @@ -1,86 +0,0 @@
|
| -# Copyright 2014 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -from collections import defaultdict
|
| -
|
| -from telemetry.timeline import bounds
|
| -from telemetry.timeline import slice as slice_module
|
| -
|
| -
|
| -class MissingData(Exception):
|
| - pass
|
| -
|
| -
|
| -class NoBeginFrameIdException(Exception):
|
| - pass
|
| -
|
| -
|
| -class RenderingFrame(object):
|
| - """Object with information about the triggering of a BeginMainFrame event."""
|
| - send_begin_frame_event = 'ThreadProxy::ScheduledActionSendBeginMainFrame'
|
| - begin_main_frame_event = 'ThreadProxy::BeginMainFrame'
|
| -
|
| - def __init__(self, events):
|
| - all_send_begin_frame_events = [e for e in events
|
| - if e.name == self.send_begin_frame_event]
|
| - if len(all_send_begin_frame_events) != 1:
|
| - raise MissingData('There must be at exactly one %s event.' %
|
| - self.send_begin_frame_event)
|
| -
|
| - all_begin_main_frame_events = [e for e in events
|
| - if e.name == self.begin_main_frame_event]
|
| - if not all_begin_main_frame_events:
|
| - raise MissingData('There must be at least one %s event.' %
|
| - self.begin_main_frame_event)
|
| - all_begin_main_frame_events.sort(key=lambda e: e.start)
|
| -
|
| - self._send_begin_frame = all_send_begin_frame_events[0]
|
| - self._begin_main_frame = all_begin_main_frame_events[-1]
|
| -
|
| - self._bounds = bounds.Bounds()
|
| - self._bounds.AddEvent(self._begin_main_frame)
|
| - self._bounds.AddEvent(self._send_begin_frame)
|
| -
|
| - @staticmethod
|
| - def IsEventUseful(event):
|
| - return event.name in [RenderingFrame.send_begin_frame_event,
|
| - RenderingFrame.begin_main_frame_event]
|
| -
|
| - @property
|
| - def bounds(self):
|
| - return self._bounds
|
| -
|
| - @property
|
| - def queueing_duration(self):
|
| - return self._begin_main_frame.start - self._send_begin_frame.start
|
| -
|
| -
|
| -def GetFrameEventsInsideRange(renderer_process, timeline_range):
|
| - """Returns RenderingFrames for all relevant events in the timeline_range."""
|
| - # First filter all events from the renderer_process and turn them into a
|
| - # dictonary of the form:
|
| - # {0: [send_begin_frame, begin_main_frame, begin_main_frame],
|
| - # 1: [begin_main_frame, send_begin_frame],
|
| - # 2: [send_begin_frame, begin_main_frame]}
|
| - begin_frame_events_by_id = defaultdict(list)
|
| - for event in renderer_process.IterAllEvents(
|
| - event_type_predicate=lambda t: t == slice_module.Slice,
|
| - event_predicate=RenderingFrame.IsEventUseful):
|
| - begin_frame_id = event.args.get('begin_frame_id', None)
|
| - if begin_frame_id is None:
|
| - raise NoBeginFrameIdException('Event is missing a begin_frame_id.')
|
| - begin_frame_events_by_id[begin_frame_id].append(event)
|
| -
|
| - # Now, create RenderingFrames for events wherever possible.
|
| - frames = []
|
| - for events in begin_frame_events_by_id.values():
|
| - try:
|
| - frame = RenderingFrame(events)
|
| - if frame.bounds.Intersects(timeline_range):
|
| - frames.append(frame)
|
| - except MissingData:
|
| - continue
|
| - frames.sort(key=lambda frame: frame.bounds.min)
|
| -
|
| - return frames
|
|
|