| Index: tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py
|
| diff --git a/tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py b/tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py
|
| index 8e530ddfe7c9e85119564119256ca9ee3c3184d1..7c0f2fcba228759a737bee09ed264235348bccc9 100644
|
| --- a/tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py
|
| +++ b/tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py
|
| @@ -69,6 +69,38 @@
|
| self.input_event = []
|
|
|
|
|
| +def AddSurfaceFlingerStats(mock_timer, thread, first_frame,
|
| + ref_stats=None):
|
| + """ Adds a random surface flinger stats event.
|
| +
|
| + thread: The timeline model thread to which the event will be added.
|
| + first_frame: Is this the first frame within the bounds of an action?
|
| + ref_stats: A ReferenceRenderingStats object to record expected values.
|
| + """
|
| + # Create randonm data and timestap for impl thread rendering stats.
|
| + data = {'frame_count': 1,
|
| + 'refresh_period': 16.6666}
|
| + timestamp = mock_timer.AdvanceAndGet()
|
| +
|
| + # Add a slice with the event data to the given thread.
|
| + thread.PushCompleteSlice(
|
| + 'SurfaceFlinger', 'vsync_before',
|
| + timestamp, duration=0.0, thread_timestamp=None, thread_duration=None,
|
| + args={'data': data})
|
| +
|
| + if not ref_stats:
|
| + return
|
| +
|
| + # Add timestamp only if a frame was output
|
| + if data['frame_count'] == 1:
|
| + if not first_frame:
|
| + # Add frame_time if this is not the first frame in within the bounds of an
|
| + # action.
|
| + prev_timestamp = ref_stats.frame_timestamps[-1][-1]
|
| + ref_stats.frame_times[-1].append(round(timestamp - prev_timestamp, 2))
|
| + ref_stats.frame_timestamps[-1].append(timestamp)
|
| +
|
| +
|
| def AddDisplayRenderingStats(mock_timer, thread, first_frame,
|
| ref_stats=None):
|
| """ Adds a random display rendering stats event.
|
| @@ -238,6 +270,47 @@
|
| process_with_frames.FinalizeImport()
|
| self.assertTrue(HasRenderingStats(thread_with_frames))
|
|
|
| + def testBothSurfaceFlingerAndDisplayStats(self):
|
| + timeline = model.TimelineModel()
|
| + timer = MockTimer()
|
| +
|
| + ref_stats = ReferenceRenderingStats()
|
| + ref_stats.AppendNewRange()
|
| + surface_flinger = timeline.GetOrCreateProcess(pid=4)
|
| + surface_flinger.name = 'SurfaceFlinger'
|
| + surface_flinger_thread = surface_flinger.GetOrCreateThread(tid=41)
|
| + renderer = timeline.GetOrCreateProcess(pid=2)
|
| + browser = timeline.GetOrCreateProcess(pid=3)
|
| + browser_main = browser.GetOrCreateThread(tid=31)
|
| + browser_main.BeginSlice('webkit.console', 'ActionA',
|
| + timer.AdvanceAndGet(2, 4), '')
|
| +
|
| + # Create SurfaceFlinger stats and display rendering stats.
|
| + for i in xrange(0, 10):
|
| + first = (i == 0)
|
| + AddSurfaceFlingerStats(timer, surface_flinger_thread, first, ref_stats)
|
| + timer.Advance(2, 4)
|
| +
|
| + for i in xrange(0, 10):
|
| + first = (i == 0)
|
| + AddDisplayRenderingStats(timer, browser_main, first, None)
|
| + timer.Advance(5, 10)
|
| +
|
| + browser_main.EndSlice(timer.AdvanceAndGet())
|
| + timer.Advance(2, 4)
|
| +
|
| + browser.FinalizeImport()
|
| + renderer.FinalizeImport()
|
| + timeline_markers = timeline.FindTimelineMarkers(['ActionA'])
|
| + timeline_ranges = [timeline_bounds.Bounds.CreateFromEvent(marker)
|
| + for marker in timeline_markers]
|
| + stats = RenderingStats(renderer, browser, surface_flinger, timeline_ranges)
|
| +
|
| + # Compare rendering stats to reference - Only SurfaceFlinger stats should
|
| + # count
|
| + self.assertEquals(stats.frame_timestamps, ref_stats.frame_timestamps)
|
| + self.assertEquals(stats.frame_times, ref_stats.frame_times)
|
| +
|
| def testBothDisplayAndImplStats(self):
|
| timeline = model.TimelineModel()
|
| timer = MockTimer()
|
| @@ -269,7 +342,7 @@
|
| timeline_markers = timeline.FindTimelineMarkers(['ActionA'])
|
| timeline_ranges = [timeline_bounds.Bounds.CreateFromEvent(marker)
|
| for marker in timeline_markers]
|
| - stats = RenderingStats(renderer, browser, timeline_ranges)
|
| + stats = RenderingStats(renderer, browser, None, timeline_ranges)
|
|
|
| # Compare rendering stats to reference - Only display stats should count
|
| self.assertEquals(stats.frame_timestamps, ref_stats.frame_timestamps)
|
| @@ -310,7 +383,7 @@
|
| timeline_ranges = [timeline_bounds.Bounds.CreateFromEvent(marker)
|
| for marker in timeline_markers]
|
|
|
| - stats = RenderingStats(renderer, None, timeline_ranges)
|
| + stats = RenderingStats(renderer, None, None, timeline_ranges)
|
| self.assertEquals(0, len(stats.frame_timestamps[1]))
|
|
|
| def testFromTimeline(self):
|
| @@ -381,7 +454,7 @@
|
| ['ActionA', 'ActionB', 'ActionA'])
|
| timeline_ranges = [timeline_bounds.Bounds.CreateFromEvent(marker)
|
| for marker in timeline_markers]
|
| - stats = RenderingStats(renderer, browser, timeline_ranges)
|
| + stats = RenderingStats(renderer, browser, None, timeline_ranges)
|
|
|
| # Compare rendering stats to reference.
|
| self.assertEquals(stats.frame_timestamps,
|
| @@ -447,7 +520,7 @@
|
| self.assertEquals(input_event_latency_result,
|
| ref_latency.input_event_latency)
|
|
|
| - stats = RenderingStats(renderer, browser, timeline_ranges)
|
| + stats = RenderingStats(renderer, browser, None, timeline_ranges)
|
| self.assertEquals(FlattenList(stats.input_event_latency), [
|
| latency for name, latency in ref_latency.input_event_latency
|
| if name != SCROLL_UPDATE_EVENT_NAME])
|
|
|