Index: tools/perf/metrics/rendering_stats_unittest.py |
diff --git a/tools/perf/metrics/rendering_stats_unittest.py b/tools/perf/metrics/rendering_stats_unittest.py |
index bedeecaa8799d8ddf30232c8befeaed41ebd6086..425a9cef28e6e530b5d7010c1aae04ae38e6170f 100644 |
--- a/tools/perf/metrics/rendering_stats_unittest.py |
+++ b/tools/perf/metrics/rendering_stats_unittest.py |
@@ -11,6 +11,7 @@ from metrics.rendering_stats import ComputeMouseWheelScrollLatency |
from metrics.rendering_stats import ComputeTouchScrollLatency |
from metrics.rendering_stats import HasRenderingStats |
from metrics.rendering_stats import RenderingStats |
+from metrics.rendering_stats import NotEnoughFramesError |
import telemetry.core.timeline.bounds as timeline_bounds |
from telemetry.core.timeline import model |
import telemetry.core.timeline.async_slice as tracing_async_slice |
@@ -224,6 +225,46 @@ class RenderingStatsUnitTest(unittest.TestCase): |
process_with_frames.FinalizeImport() |
self.assertTrue(HasRenderingStats(thread_with_frames)) |
+ def testRangeWithoutFrames(self): |
+ timer = MockTimer() |
+ timeline = model.TimelineModel() |
+ |
+ # Create a renderer process, with a main thread and impl thread. |
+ renderer = timeline.GetOrCreateProcess(pid = 2) |
+ renderer_main = renderer.GetOrCreateThread(tid = 21) |
+ renderer_compositor = renderer.GetOrCreateThread(tid = 22) |
+ |
+ # Create 10 main and impl rendering stats events for Action A. |
+ timer.Advance(2, 4) |
+ renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') |
+ for i in xrange(0, 10): |
+ first = (i == 0) |
+ AddMainThreadRenderingStats(timer, renderer_main, first, None) |
+ AddImplThreadRenderingStats(timer, renderer_compositor, first, None) |
+ timer.Advance(2, 4) |
+ renderer_main.EndSlice(timer.Get()) |
+ |
+ # Create 5 main and impl rendering stats events not within any action. |
+ for i in xrange(0, 5): |
+ first = (i == 0) |
+ AddMainThreadRenderingStats(timer, renderer_main, first, None) |
+ AddImplThreadRenderingStats(timer, renderer_compositor, first, None) |
+ |
+ # Create Action B without any frames. This should trigger |
+ # NotEnoughFramesError when the RenderingStats object is created. |
+ timer.Advance(2, 4) |
+ renderer_main.BeginSlice('webkit.console', 'ActionB', timer.Get(), '') |
+ timer.Advance(2, 4) |
+ renderer_main.EndSlice(timer.Get()) |
+ |
+ renderer.FinalizeImport() |
+ |
+ timeline_markers = timeline.FindTimelineMarkers(['ActionA', 'ActionB']) |
+ timeline_ranges = [ timeline_bounds.Bounds.CreateFromEvent(marker) |
+ for marker in timeline_markers ] |
+ self.assertRaises(NotEnoughFramesError, RenderingStats, |
+ renderer, None, timeline_ranges) |
+ |
def testFromTimeline(self): |
timeline = model.TimelineModel() |