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

Unified Diff: tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py

Issue 765773004: telemetry: Clean up SurfaceFlinger statistics (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: clean-up Created 6 years 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 side-by-side diff with in-line comments
Download patch
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 @@ class ReferenceInputLatencyStats(object):
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 @@ class RenderingStatsUnitTest(unittest.TestCase):
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 @@ class RenderingStatsUnitTest(unittest.TestCase):
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 @@ class RenderingStatsUnitTest(unittest.TestCase):
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 @@ class RenderingStatsUnitTest(unittest.TestCase):
['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 @@ class RenderingStatsUnitTest(unittest.TestCase):
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])

Powered by Google App Engine
This is Rietveld 408576698