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

Side by Side Diff: tools/perf/metrics/rendering_stats_unittest.py

Issue 268803002: re-land: telemetry: Add approximated pixels percentage to smoothness. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/perf/metrics/rendering_stats.py ('k') | tools/perf/metrics/smoothness.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import random 5 import random
6 import unittest 6 import unittest
7 7
8 from metrics.rendering_stats import UI_COMP_NAME, BEGIN_COMP_NAME, END_COMP_NAME 8 from metrics.rendering_stats import UI_COMP_NAME, BEGIN_COMP_NAME, END_COMP_NAME
9 from metrics.rendering_stats import GetScrollInputLatencyEvents 9 from metrics.rendering_stats import GetScrollInputLatencyEvents
10 from metrics.rendering_stats import ComputeMouseWheelScrollLatency 10 from metrics.rendering_stats import ComputeMouseWheelScrollLatency
11 from metrics.rendering_stats import ComputeTouchScrollLatency 11 from metrics.rendering_stats import ComputeTouchScrollLatency
12 from metrics.rendering_stats import HasRenderingStats 12 from metrics.rendering_stats import HasRenderingStats
13 from metrics.rendering_stats import RenderingStats 13 from metrics.rendering_stats import RenderingStats
14 from metrics.rendering_stats import NotEnoughFramesError 14 from metrics.rendering_stats import NotEnoughFramesError
15 from telemetry.util.statistics import DivideIfPossibleOrZero
15 import telemetry.core.timeline.bounds as timeline_bounds 16 import telemetry.core.timeline.bounds as timeline_bounds
16 from telemetry.core.timeline import model 17 from telemetry.core.timeline import model
17 import telemetry.core.timeline.async_slice as tracing_async_slice 18 import telemetry.core.timeline.async_slice as tracing_async_slice
18 19
19 20
20 class MockTimer(object): 21 class MockTimer(object):
21 """A mock timer class which can generate random durations. 22 """A mock timer class which can generate random durations.
22 23
23 An instance of this class is used as a global timer to generate random 24 An instance of this class is used as a global timer to generate random
24 durations for stats and consistent timestamps for all mock trace events. 25 durations for stats and consistent timestamps for all mock trace events.
(...skipping 15 matching lines...) Expand all
40 """ Stores expected data for comparison with actual RenderingStats """ 41 """ Stores expected data for comparison with actual RenderingStats """
41 def __init__(self): 42 def __init__(self):
42 self.frame_timestamps = [] 43 self.frame_timestamps = []
43 self.frame_times = [] 44 self.frame_times = []
44 self.paint_times = [] 45 self.paint_times = []
45 self.painted_pixel_counts = [] 46 self.painted_pixel_counts = []
46 self.record_times = [] 47 self.record_times = []
47 self.recorded_pixel_counts = [] 48 self.recorded_pixel_counts = []
48 self.rasterize_times = [] 49 self.rasterize_times = []
49 self.rasterized_pixel_counts = [] 50 self.rasterized_pixel_counts = []
51 self.approximated_pixel_percentages = []
50 52
51 def AppendNewRange(self): 53 def AppendNewRange(self):
52 self.frame_timestamps.append([]) 54 self.frame_timestamps.append([])
53 self.frame_times.append([]) 55 self.frame_times.append([])
54 self.paint_times.append([]) 56 self.paint_times.append([])
55 self.painted_pixel_counts.append([]) 57 self.painted_pixel_counts.append([])
56 self.record_times.append([]) 58 self.record_times.append([])
57 self.recorded_pixel_counts.append([]) 59 self.recorded_pixel_counts.append([])
58 self.rasterize_times.append([]) 60 self.rasterize_times.append([])
59 self.rasterized_pixel_counts.append([]) 61 self.rasterized_pixel_counts.append([])
62 self.approximated_pixel_percentages.append([])
60 63
61 class ReferenceInputLatencyStats(object): 64 class ReferenceInputLatencyStats(object):
62 """ Stores expected data for comparison with actual input latency stats """ 65 """ Stores expected data for comparison with actual input latency stats """
63 def __init__(self): 66 def __init__(self):
64 self.mouse_wheel_scroll_latency = [] 67 self.mouse_wheel_scroll_latency = []
65 self.touch_scroll_latency = [] 68 self.touch_scroll_latency = []
66 self.js_touch_scroll_latency = [] 69 self.js_touch_scroll_latency = []
67 self.mouse_wheel_scroll_events = [] 70 self.mouse_wheel_scroll_events = []
68 self.touch_scroll_events = [] 71 self.touch_scroll_events = []
69 self.js_touch_scroll_events = [] 72 self.js_touch_scroll_events = []
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 ref_stats = None): 115 ref_stats = None):
113 """ Adds a random impl thread rendering stats event. 116 """ Adds a random impl thread rendering stats event.
114 117
115 thread: The timeline model thread to which the event will be added. 118 thread: The timeline model thread to which the event will be added.
116 first_frame: Is this the first frame within the bounds of an action? 119 first_frame: Is this the first frame within the bounds of an action?
117 ref_stats: A ReferenceRenderingStats object to record expected values. 120 ref_stats: A ReferenceRenderingStats object to record expected values.
118 """ 121 """
119 # Create randonm data and timestap for impl thread rendering stats. 122 # Create randonm data and timestap for impl thread rendering stats.
120 data = { 'frame_count': 1, 123 data = { 'frame_count': 1,
121 'rasterize_time': mock_timer.Advance(5, 10) / 1000.0, 124 'rasterize_time': mock_timer.Advance(5, 10) / 1000.0,
122 'rasterized_pixel_count': 1280*720 } 125 'rasterized_pixel_count': 1280*720,
126 'visible_content_area': random.uniform(0, 100),
127 'approximated_visible_content_area': random.uniform(0, 5)}
123 timestamp = mock_timer.Get() 128 timestamp = mock_timer.Get()
124 129
125 # Add a slice with the event data to the given thread. 130 # Add a slice with the event data to the given thread.
126 thread.PushCompleteSlice( 131 thread.PushCompleteSlice(
127 'benchmark', 'BenchmarkInstrumentation::ImplThreadRenderingStats', 132 'benchmark', 'BenchmarkInstrumentation::ImplThreadRenderingStats',
128 timestamp, duration=0.0, thread_timestamp=None, thread_duration=None, 133 timestamp, duration=0.0, thread_timestamp=None, thread_duration=None,
129 args={'data': data}) 134 args={'data': data})
130 135
131 if not ref_stats: 136 if not ref_stats:
132 return 137 return
133 138
134 # Add timestamp only if a frame was output 139 # Add timestamp only if a frame was output
135 if data['frame_count'] == 1: 140 if data['frame_count'] == 1:
136 if not first_frame: 141 if not first_frame:
137 # Add frame_time if this is not the first frame in within the bounds of an 142 # Add frame_time if this is not the first frame in within the bounds of an
138 # action. 143 # action.
139 prev_timestamp = ref_stats.frame_timestamps[-1][-1] 144 prev_timestamp = ref_stats.frame_timestamps[-1][-1]
140 ref_stats.frame_times[-1].append(round(timestamp - prev_timestamp, 2)) 145 ref_stats.frame_times[-1].append(round(timestamp - prev_timestamp, 2))
141 ref_stats.frame_timestamps[-1].append(timestamp) 146 ref_stats.frame_timestamps[-1].append(timestamp)
142 147
143 ref_stats.rasterize_times[-1].append(data['rasterize_time'] * 1000.0) 148 ref_stats.rasterize_times[-1].append(data['rasterize_time'] * 1000.0)
144 ref_stats.rasterized_pixel_counts[-1].append(data['rasterized_pixel_count']) 149 ref_stats.rasterized_pixel_counts[-1].append(data['rasterized_pixel_count'])
150 ref_stats.approximated_pixel_percentages[-1].append(
151 round(DivideIfPossibleOrZero(data['approximated_visible_content_area'],
152 data['visible_content_area']) * 100.0, 3))
145 153
146 154
147 def AddInputLatencyStats(mock_timer, input_type, start_thread, end_thread, 155 def AddInputLatencyStats(mock_timer, input_type, start_thread, end_thread,
148 ref_latency_stats = None): 156 ref_latency_stats = None):
149 """ Adds a random input latency stats event. 157 """ Adds a random input latency stats event.
150 158
151 input_type: The input type for which the latency slice is generated. 159 input_type: The input type for which the latency slice is generated.
152 start_thread: The start thread on which the async slice is added. 160 start_thread: The start thread on which the async slice is added.
153 end_thread: The end thread on which the async slice is ended. 161 end_thread: The end thread on which the async slice is ended.
154 ref_latency_stats: A ReferenceInputLatencyStats object for expected values. 162 ref_latency_stats: A ReferenceInputLatencyStats object for expected values.
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 for marker in timeline_markers ] 360 for marker in timeline_markers ]
353 stats = RenderingStats(renderer, browser, timeline_ranges) 361 stats = RenderingStats(renderer, browser, timeline_ranges)
354 362
355 # Compare rendering stats to reference. 363 # Compare rendering stats to reference.
356 self.assertEquals(stats.frame_timestamps, 364 self.assertEquals(stats.frame_timestamps,
357 browser_ref_stats.frame_timestamps) 365 browser_ref_stats.frame_timestamps)
358 self.assertEquals(stats.frame_times, browser_ref_stats.frame_times) 366 self.assertEquals(stats.frame_times, browser_ref_stats.frame_times)
359 self.assertEquals(stats.rasterize_times, renderer_ref_stats.rasterize_times) 367 self.assertEquals(stats.rasterize_times, renderer_ref_stats.rasterize_times)
360 self.assertEquals(stats.rasterized_pixel_counts, 368 self.assertEquals(stats.rasterized_pixel_counts,
361 renderer_ref_stats.rasterized_pixel_counts) 369 renderer_ref_stats.rasterized_pixel_counts)
370 self.assertEquals(stats.approximated_pixel_percentages,
371 renderer_ref_stats.approximated_pixel_percentages)
362 self.assertEquals(stats.paint_times, renderer_ref_stats.paint_times) 372 self.assertEquals(stats.paint_times, renderer_ref_stats.paint_times)
363 self.assertEquals(stats.painted_pixel_counts, 373 self.assertEquals(stats.painted_pixel_counts,
364 renderer_ref_stats.painted_pixel_counts) 374 renderer_ref_stats.painted_pixel_counts)
365 self.assertEquals(stats.record_times, renderer_ref_stats.record_times) 375 self.assertEquals(stats.record_times, renderer_ref_stats.record_times)
366 self.assertEquals(stats.recorded_pixel_counts, 376 self.assertEquals(stats.recorded_pixel_counts,
367 renderer_ref_stats.recorded_pixel_counts) 377 renderer_ref_stats.recorded_pixel_counts)
368 378
369 def testScrollLatencyFromTimeline(self): 379 def testScrollLatencyFromTimeline(self):
370 timeline = model.TimelineModel() 380 timeline = model.TimelineModel()
371 381
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 self.assertEquals(touch_scroll_events, 465 self.assertEquals(touch_scroll_events,
456 ref_latency_stats.touch_scroll_events) 466 ref_latency_stats.touch_scroll_events)
457 self.assertEquals(js_touch_scroll_events, 467 self.assertEquals(js_touch_scroll_events,
458 ref_latency_stats.js_touch_scroll_events) 468 ref_latency_stats.js_touch_scroll_events)
459 self.assertEquals(ComputeMouseWheelScrollLatency(mouse_wheel_scroll_events), 469 self.assertEquals(ComputeMouseWheelScrollLatency(mouse_wheel_scroll_events),
460 ref_latency_stats.mouse_wheel_scroll_latency) 470 ref_latency_stats.mouse_wheel_scroll_latency)
461 self.assertEquals(ComputeTouchScrollLatency(touch_scroll_events), 471 self.assertEquals(ComputeTouchScrollLatency(touch_scroll_events),
462 ref_latency_stats.touch_scroll_latency) 472 ref_latency_stats.touch_scroll_latency)
463 self.assertEquals(ComputeTouchScrollLatency(js_touch_scroll_events), 473 self.assertEquals(ComputeTouchScrollLatency(js_touch_scroll_events),
464 ref_latency_stats.js_touch_scroll_latency) 474 ref_latency_stats.js_touch_scroll_latency)
OLDNEW
« no previous file with comments | « tools/perf/metrics/rendering_stats.py ('k') | tools/perf/metrics/smoothness.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698