| 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 6ccf4dd4df781eca4cca8df907e89bb0bd1f5939..3bb8243e9986f34462212459d3d113406d362689 100644
|
| --- a/tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py
|
| +++ b/tools/telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py
|
| @@ -36,33 +36,26 @@ class MockTimer(object):
|
| def __init__(self):
|
| self.milliseconds = 0
|
|
|
| - def Get(self):
|
| - return self.milliseconds
|
| -
|
| - def Advance(self, low=0, high=1):
|
| + def Advance(self, low=0.1, high=1):
|
| delta = random.uniform(low, high)
|
| self.milliseconds += delta
|
| return delta
|
|
|
| + def AdvanceAndGet(self, low=0.1, high=1):
|
| + self.Advance(low, high)
|
| + return self.milliseconds
|
| +
|
|
|
| class ReferenceRenderingStats(object):
|
| """ Stores expected data for comparison with actual RenderingStats """
|
| def __init__(self):
|
| self.frame_timestamps = []
|
| self.frame_times = []
|
| - self.paint_times = []
|
| - self.painted_pixel_counts = []
|
| - self.record_times = []
|
| - self.recorded_pixel_counts = []
|
| self.approximated_pixel_percentages = []
|
|
|
| def AppendNewRange(self):
|
| self.frame_timestamps.append([])
|
| self.frame_times.append([])
|
| - self.paint_times.append([])
|
| - self.painted_pixel_counts.append([])
|
| - self.record_times.append([])
|
| - self.recorded_pixel_counts.append([])
|
| self.approximated_pixel_percentages.append([])
|
|
|
| class ReferenceInputLatencyStats(object):
|
| @@ -71,34 +64,6 @@ class ReferenceInputLatencyStats(object):
|
| self.input_event_latency = []
|
| self.input_event = []
|
|
|
| -def AddMainThreadRenderingStats(mock_timer, thread, ref_stats = None):
|
| - """ Adds a random main thread rendering 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 main thread rendering stats.
|
| - data = { 'paint_time': 0.0,
|
| - 'painted_pixel_count': 0,
|
| - 'record_time': mock_timer.Advance(2, 4) / 1000.0,
|
| - 'recorded_pixel_count': 3000*3000 }
|
| - timestamp = mock_timer.Get()
|
| -
|
| - # Add a slice with the event data to the given thread.
|
| - thread.PushCompleteSlice(
|
| - 'benchmark', 'BenchmarkInstrumentation::MainThreadRenderingStats',
|
| - timestamp, duration=0.0, thread_timestamp=None, thread_duration=None,
|
| - args={'data': data})
|
| -
|
| - if not ref_stats:
|
| - return
|
| -
|
| - ref_stats.paint_times[-1].append(data['paint_time'] * 1000.0)
|
| - ref_stats.painted_pixel_counts[-1].append(data['painted_pixel_count'])
|
| - ref_stats.record_times[-1].append(data['record_time'] * 1000.0)
|
| - ref_stats.recorded_pixel_counts[-1].append(data['recorded_pixel_count'])
|
| -
|
|
|
| def AddDisplayRenderingStats(mock_timer, thread, first_frame,
|
| ref_stats = None):
|
| @@ -110,7 +75,7 @@ def AddDisplayRenderingStats(mock_timer, thread, first_frame,
|
| """
|
| # Create randonm data and timestap for main thread rendering stats.
|
| data = { 'frame_count': 1 }
|
| - timestamp = mock_timer.Get()
|
| + timestamp = mock_timer.AdvanceAndGet()
|
|
|
| # Add a slice with the event data to the given thread.
|
| thread.PushCompleteSlice(
|
| @@ -142,7 +107,7 @@ def AddImplThreadRenderingStats(mock_timer, thread, first_frame,
|
| data = { 'frame_count': 1,
|
| 'visible_content_area': random.uniform(0, 100),
|
| 'approximated_visible_content_area': random.uniform(0, 5)}
|
| - timestamp = mock_timer.Get()
|
| + timestamp = mock_timer.AdvanceAndGet()
|
|
|
| # Add a slice with the event data to the given thread.
|
| thread.PushCompleteSlice(
|
| @@ -163,8 +128,8 @@ def AddImplThreadRenderingStats(mock_timer, thread, first_frame,
|
| ref_stats.frame_timestamps[-1].append(timestamp)
|
|
|
| ref_stats.approximated_pixel_percentages[-1].append(
|
| - round(DivideIfPossibleOrZero(data['approximated_visible_content_area'],
|
| - data['visible_content_area']) * 100.0, 3))
|
| + round(DivideIfPossibleOrZero(data['approximated_visible_content_area'],
|
| + data['visible_content_area']) * 100.0, 3))
|
|
|
|
|
| def AddInputLatencyStats(mock_timer, start_thread, end_thread,
|
| @@ -176,23 +141,18 @@ def AddInputLatencyStats(mock_timer, start_thread, end_thread,
|
| ref_latency_stats: A ReferenceInputLatencyStats object for expected values.
|
| """
|
|
|
| - mock_timer.Advance(2, 4)
|
| - original_comp_time = mock_timer.Get() * 1000.0
|
| - mock_timer.Advance(2, 4)
|
| - ui_comp_time = mock_timer.Get() * 1000.0
|
| - mock_timer.Advance(2, 4)
|
| - begin_comp_time = mock_timer.Get() * 1000.0
|
| - mock_timer.Advance(2, 4)
|
| - forward_comp_time = mock_timer.Get() * 1000.0
|
| - mock_timer.Advance(10, 20)
|
| - end_comp_time = mock_timer.Get() * 1000.0
|
| + original_comp_time = mock_timer.AdvanceAndGet(2, 4) * 1000.0
|
| + ui_comp_time = mock_timer.AdvanceAndGet(2, 4) * 1000.0
|
| + begin_comp_time = mock_timer.AdvanceAndGet(2, 4) * 1000.0
|
| + forward_comp_time = mock_timer.AdvanceAndGet(2, 4) * 1000.0
|
| + end_comp_time = mock_timer.AdvanceAndGet(10, 20) * 1000.0
|
|
|
| data = { ORIGINAL_COMP_NAME: {'time': original_comp_time},
|
| UI_COMP_NAME: {'time': ui_comp_time},
|
| BEGIN_COMP_NAME: {'time': begin_comp_time},
|
| END_COMP_NAME: {'time': end_comp_time} }
|
|
|
| - timestamp = mock_timer.Get()
|
| + timestamp = mock_timer.AdvanceAndGet(2, 4)
|
|
|
| async_slice = tracing_async_slice.AsyncSlice(
|
| 'benchmark', 'InputLatency', timestamp)
|
| @@ -232,7 +192,6 @@ def AddInputLatencyStats(mock_timer, start_thread, end_thread,
|
|
|
| # Also add some dummy frame statistics so we can feed the resulting timeline
|
| # to RenderingStats.
|
| - AddMainThreadRenderingStats(mock_timer, start_thread)
|
| AddImplThreadRenderingStats(mock_timer, end_thread, False)
|
|
|
| if not ref_latency_stats:
|
| @@ -264,7 +223,6 @@ class RenderingStatsUnitTest(unittest.TestCase):
|
| # A process with rendering stats, but no frames in them
|
| process_without_frames = timeline.GetOrCreateProcess(pid = 2)
|
| thread_without_frames = process_without_frames.GetOrCreateThread(tid = 21)
|
| - AddMainThreadRenderingStats(timer, thread_without_frames, None)
|
| process_without_frames.FinalizeImport()
|
| self.assertFalse(HasRenderingStats(thread_without_frames))
|
|
|
| @@ -284,12 +242,12 @@ class RenderingStatsUnitTest(unittest.TestCase):
|
| renderer = timeline.GetOrCreateProcess(pid = 2)
|
| browser = timeline.GetOrCreateProcess(pid = 3)
|
| browser_main = browser.GetOrCreateThread(tid = 31)
|
| - browser_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '')
|
| + browser_main.BeginSlice('webkit.console', 'ActionA',
|
| + timer.AdvanceAndGet(2, 4), '')
|
|
|
| # Create main, impl, and display rendering stats.
|
| for i in xrange(0, 10):
|
| first = (i == 0)
|
| - AddMainThreadRenderingStats(timer, browser_main, ref_stats)
|
| AddImplThreadRenderingStats(timer, browser_main, first, None)
|
| timer.Advance(2, 4)
|
|
|
| @@ -298,7 +256,8 @@ class RenderingStatsUnitTest(unittest.TestCase):
|
| AddDisplayRenderingStats(timer, browser_main, first, ref_stats)
|
| timer.Advance(5, 10)
|
|
|
| - browser_main.EndSlice(timer.Get())
|
| + browser_main.EndSlice(timer.AdvanceAndGet())
|
| + timer.Advance(2, 4)
|
|
|
| browser.FinalizeImport()
|
| renderer.FinalizeImport()
|
| @@ -321,27 +280,24 @@ class RenderingStatsUnitTest(unittest.TestCase):
|
| 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(), '')
|
| + renderer_main.BeginSlice('webkit.console', 'ActionA',
|
| + timer.AdvanceAndGet(2, 4), '')
|
| for i in xrange(0, 10):
|
| first = (i == 0)
|
| - AddMainThreadRenderingStats(timer, renderer_main, None)
|
| AddImplThreadRenderingStats(timer, renderer_compositor, first, None)
|
| + renderer_main.EndSlice(timer.AdvanceAndGet(2, 4))
|
| 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, 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_main.BeginSlice('webkit.console', 'ActionB',
|
| + timer.AdvanceAndGet(2, 4), '')
|
| + renderer_main.EndSlice(timer.AdvanceAndGet(2, 4))
|
|
|
| renderer.FinalizeImport()
|
|
|
| @@ -359,7 +315,6 @@ class RenderingStatsUnitTest(unittest.TestCase):
|
| # Create a browser process and a renderer process, and a main thread and
|
| # impl thread for each.
|
| browser = timeline.GetOrCreateProcess(pid = 1)
|
| - browser_main = browser.GetOrCreateThread(tid = 11)
|
| browser_compositor = browser.GetOrCreateThread(tid = 12)
|
| renderer = timeline.GetOrCreateProcess(pid = 2)
|
| renderer_main = renderer.GetOrCreateThread(tid = 21)
|
| @@ -370,66 +325,50 @@ class RenderingStatsUnitTest(unittest.TestCase):
|
| browser_ref_stats = ReferenceRenderingStats()
|
|
|
| # Create 10 main and impl rendering stats events for Action A.
|
| - timer.Advance(2, 4)
|
| - renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '')
|
| + renderer_main.BeginSlice('webkit.console', 'ActionA',
|
| + timer.AdvanceAndGet(2, 4), '')
|
| renderer_ref_stats.AppendNewRange()
|
| browser_ref_stats.AppendNewRange()
|
| for i in xrange(0, 10):
|
| first = (i == 0)
|
| - AddMainThreadRenderingStats(
|
| - timer, renderer_main, renderer_ref_stats)
|
| AddImplThreadRenderingStats(
|
| timer, renderer_compositor, first, renderer_ref_stats)
|
| - AddMainThreadRenderingStats(
|
| - timer, browser_main, browser_ref_stats)
|
| AddImplThreadRenderingStats(
|
| timer, browser_compositor, first, browser_ref_stats)
|
| - timer.Advance(2, 4)
|
| - renderer_main.EndSlice(timer.Get())
|
| + renderer_main.EndSlice(timer.AdvanceAndGet(2, 4))
|
|
|
| # 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, None)
|
| AddImplThreadRenderingStats(timer, renderer_compositor, first, None)
|
| - AddMainThreadRenderingStats(timer, browser_main, None)
|
| AddImplThreadRenderingStats(timer, browser_compositor, first, None)
|
|
|
| # Create 10 main and impl rendering stats events for Action B.
|
| - timer.Advance(2, 4)
|
| - renderer_main.BeginSlice('webkit.console', 'ActionB', timer.Get(), '')
|
| + renderer_main.BeginSlice('webkit.console', 'ActionB',
|
| + timer.AdvanceAndGet(2, 4), '')
|
| renderer_ref_stats.AppendNewRange()
|
| browser_ref_stats.AppendNewRange()
|
| for i in xrange(0, 10):
|
| first = (i == 0)
|
| - AddMainThreadRenderingStats(
|
| - timer, renderer_main, renderer_ref_stats)
|
| AddImplThreadRenderingStats(
|
| timer, renderer_compositor, first, renderer_ref_stats)
|
| - AddMainThreadRenderingStats(
|
| - timer, browser_main, browser_ref_stats)
|
| AddImplThreadRenderingStats(
|
| timer, browser_compositor, first, browser_ref_stats)
|
| - timer.Advance(2, 4)
|
| - renderer_main.EndSlice(timer.Get())
|
| + renderer_main.EndSlice(timer.AdvanceAndGet(2, 4))
|
|
|
| # Create 10 main and impl rendering stats events for Action A.
|
| - timer.Advance(2, 4)
|
| - renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '')
|
| + renderer_main.BeginSlice('webkit.console', 'ActionA',
|
| + timer.AdvanceAndGet(2, 4), '')
|
| renderer_ref_stats.AppendNewRange()
|
| browser_ref_stats.AppendNewRange()
|
| for i in xrange(0, 10):
|
| first = (i == 0)
|
| - AddMainThreadRenderingStats(
|
| - timer, renderer_main, renderer_ref_stats)
|
| AddImplThreadRenderingStats(
|
| timer, renderer_compositor, first, renderer_ref_stats)
|
| - AddMainThreadRenderingStats(
|
| - timer, browser_main, browser_ref_stats)
|
| AddImplThreadRenderingStats(
|
| timer, browser_compositor, first, browser_ref_stats)
|
| + renderer_main.EndSlice(timer.AdvanceAndGet(2, 4))
|
| timer.Advance(2, 4)
|
| - renderer_main.EndSlice(timer.Get())
|
|
|
| browser.FinalizeImport()
|
| renderer.FinalizeImport()
|
| @@ -446,12 +385,6 @@ class RenderingStatsUnitTest(unittest.TestCase):
|
| self.assertEquals(stats.frame_times, browser_ref_stats.frame_times)
|
| self.assertEquals(stats.approximated_pixel_percentages,
|
| renderer_ref_stats.approximated_pixel_percentages)
|
| - self.assertEquals(stats.paint_times, renderer_ref_stats.paint_times)
|
| - self.assertEquals(stats.painted_pixel_counts,
|
| - renderer_ref_stats.painted_pixel_counts)
|
| - self.assertEquals(stats.record_times, renderer_ref_stats.record_times)
|
| - self.assertEquals(stats.recorded_pixel_counts,
|
| - renderer_ref_stats.recorded_pixel_counts)
|
|
|
| def testInputLatencyFromTimeline(self):
|
| timeline = model.TimelineModel()
|
| @@ -466,12 +399,11 @@ class RenderingStatsUnitTest(unittest.TestCase):
|
| ref_latency = ReferenceInputLatencyStats()
|
|
|
| # Create 10 input latency stats events for Action A.
|
| - timer.Advance(2, 4)
|
| - renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '')
|
| + renderer_main.BeginSlice('webkit.console', 'ActionA',
|
| + timer.AdvanceAndGet(2, 4), '')
|
| for _ in xrange(0, 10):
|
| AddInputLatencyStats(timer, browser_main, renderer_main, ref_latency)
|
| - timer.Advance(2, 4)
|
| - renderer_main.EndSlice(timer.Get())
|
| + renderer_main.EndSlice(timer.AdvanceAndGet(2, 4))
|
|
|
| # Create 5 input latency stats events not within any action.
|
| timer.Advance(2, 4)
|
| @@ -479,20 +411,18 @@ class RenderingStatsUnitTest(unittest.TestCase):
|
| AddInputLatencyStats(timer, browser_main, renderer_main, None)
|
|
|
| # Create 10 input latency stats events for Action B.
|
| - timer.Advance(2, 4)
|
| - renderer_main.BeginSlice('webkit.console', 'ActionB', timer.Get(), '')
|
| + renderer_main.BeginSlice('webkit.console', 'ActionB',
|
| + timer.AdvanceAndGet(2, 4), '')
|
| for _ in xrange(0, 10):
|
| AddInputLatencyStats(timer, browser_main, renderer_main, ref_latency)
|
| - timer.Advance(2, 4)
|
| - renderer_main.EndSlice(timer.Get())
|
| + renderer_main.EndSlice(timer.AdvanceAndGet(2, 4))
|
|
|
| # Create 10 input latency stats events for Action A.
|
| - timer.Advance(2, 4)
|
| - renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '')
|
| + renderer_main.BeginSlice('webkit.console', 'ActionA',
|
| + timer.AdvanceAndGet(2, 4), '')
|
| for _ in xrange(0, 10):
|
| AddInputLatencyStats(timer, browser_main, renderer_main, ref_latency)
|
| - timer.Advance(2, 4)
|
| - renderer_main.EndSlice(timer.Get())
|
| + renderer_main.EndSlice(timer.AdvanceAndGet(2, 4))
|
|
|
| browser.FinalizeImport()
|
| renderer.FinalizeImport()
|
|
|