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

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

Issue 187343004: Revert of re-land: Use browser compositor rendering stats in smoothness (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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
13 from metrics.rendering_stats import RenderingStats 12 from metrics.rendering_stats import RenderingStats
14 import telemetry.core.timeline.bounds as timeline_bounds 13 import telemetry.core.timeline.bounds as timeline_bounds
15 from telemetry.core.timeline import model 14 from telemetry.core.timeline import model
16 import telemetry.core.timeline.async_slice as tracing_async_slice 15 import telemetry.core.timeline.async_slice as tracing_async_slice
17 16
18 17
19 class MockTimer(object): 18 class MockTimer(object):
20 """A mock timer class which can generate random durations. 19 """A mock timer class which can generate random durations.
21 20
22 An instance of this class is used as a global timer to generate random 21 An instance of this class is used as a global timer to generate random
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 ref_latency_stats.touch_scroll_events.append(async_sub_slice) 192 ref_latency_stats.touch_scroll_events.append(async_sub_slice)
194 ref_latency_stats.touch_scroll_latency.append( 193 ref_latency_stats.touch_scroll_latency.append(
195 (data[END_COMP_NAME]['time'] - data[UI_COMP_NAME]['time']) / 1000.0) 194 (data[END_COMP_NAME]['time'] - data[UI_COMP_NAME]['time']) / 1000.0)
196 195
197 if input_type == 'TouchMove': 196 if input_type == 'TouchMove':
198 ref_latency_stats.js_touch_scroll_events.append(async_sub_slice) 197 ref_latency_stats.js_touch_scroll_events.append(async_sub_slice)
199 ref_latency_stats.js_touch_scroll_latency.append( 198 ref_latency_stats.js_touch_scroll_latency.append(
200 (data[END_COMP_NAME]['time'] - data[UI_COMP_NAME]['time']) / 1000.0) 199 (data[END_COMP_NAME]['time'] - data[UI_COMP_NAME]['time']) / 1000.0)
201 200
202 class RenderingStatsUnitTest(unittest.TestCase): 201 class RenderingStatsUnitTest(unittest.TestCase):
203 def testHasRenderingStats(self):
204 timeline = model.TimelineModel()
205 timer = MockTimer()
206
207 # A process without rendering stats
208 process_without_stats = timeline.GetOrCreateProcess(pid = 1)
209 thread_without_stats = process_without_stats.GetOrCreateThread(tid = 11)
210 process_without_stats.FinalizeImport()
211 self.assertFalse(HasRenderingStats(thread_without_stats))
212
213 # A process with rendering stats, but no frames in them
214 process_without_frames = timeline.GetOrCreateProcess(pid = 2)
215 thread_without_frames = process_without_frames.GetOrCreateThread(tid = 21)
216 AddMainThreadRenderingStats(timer, thread_without_frames, True, None)
217 process_without_frames.FinalizeImport()
218 self.assertFalse(HasRenderingStats(thread_without_frames))
219
220 # A process with rendering stats and frames in them
221 process_with_frames = timeline.GetOrCreateProcess(pid = 3)
222 thread_with_frames = process_with_frames.GetOrCreateThread(tid = 31)
223 AddImplThreadRenderingStats(timer, thread_with_frames, True, None)
224 process_with_frames.FinalizeImport()
225 self.assertTrue(HasRenderingStats(thread_with_frames))
226
227 def testFromTimeline(self): 202 def testFromTimeline(self):
228 timeline = model.TimelineModel() 203 timeline = model.TimelineModel()
229 204
230 # Create a browser process and a renderer process, and a main thread and 205 # Create a browser process and a renderer process, and a main thread and
231 # impl thread for each. 206 # impl thread for each.
232 browser = timeline.GetOrCreateProcess(pid = 1) 207 browser = timeline.GetOrCreateProcess(pid = 1)
233 browser_main = browser.GetOrCreateThread(tid = 11) 208 browser_main = browser.GetOrCreateThread(tid = 11)
234 browser_compositor = browser.GetOrCreateThread(tid = 12) 209 browser_compositor = browser.GetOrCreateThread(tid = 12)
235 renderer = timeline.GetOrCreateProcess(pid = 2) 210 renderer = timeline.GetOrCreateProcess(pid = 2)
236 renderer_main = renderer.GetOrCreateThread(tid = 21) 211 renderer_main = renderer.GetOrCreateThread(tid = 21)
237 renderer_compositor = renderer.GetOrCreateThread(tid = 22) 212 renderer_compositor = renderer.GetOrCreateThread(tid = 22)
238 213
239 timer = MockTimer() 214 timer = MockTimer()
240 ref_stats = ReferenceRenderingStats() 215 ref_stats = ReferenceRenderingStats()
241 216
242 # Create 10 main and impl rendering stats events for Action A. 217 # Create 10 main and impl rendering stats events for Action A.
243 timer.Advance() 218 timer.Advance()
244 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') 219 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '')
245 ref_stats.AppendNewRange() 220 ref_stats.AppendNewRange()
246 for i in xrange(0, 10): 221 for i in xrange(0, 10):
247 first = (i == 0) 222 first = (i == 0)
248 AddMainThreadRenderingStats(timer, renderer_main, first, None) 223 AddMainThreadRenderingStats(timer, renderer_main, first, ref_stats)
249 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) 224 AddImplThreadRenderingStats(timer, renderer_compositor, first, ref_stats)
250 AddMainThreadRenderingStats(timer, browser_main, first, ref_stats) 225 AddMainThreadRenderingStats(timer, browser_main, first, None)
251 AddImplThreadRenderingStats(timer, browser_compositor, first, ref_stats) 226 AddImplThreadRenderingStats(timer, browser_compositor, first, None)
252 renderer_main.EndSlice(timer.Get()) 227 renderer_main.EndSlice(timer.Get())
253 228
254 # Create 5 main and impl rendering stats events not within any action. 229 # Create 5 main and impl rendering stats events not within any action.
255 for i in xrange(0, 5): 230 for i in xrange(0, 5):
256 first = (i == 0) 231 first = (i == 0)
257 AddMainThreadRenderingStats(timer, renderer_main, first, None) 232 AddMainThreadRenderingStats(timer, renderer_main, first, None)
258 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) 233 AddImplThreadRenderingStats(timer, renderer_compositor, first, None)
259 AddMainThreadRenderingStats(timer, browser_main, first, None) 234 AddMainThreadRenderingStats(timer, browser_main, first, None)
260 AddImplThreadRenderingStats(timer, browser_compositor, first, None) 235 AddImplThreadRenderingStats(timer, browser_compositor, first, None)
261 236
262 # Create 10 main and impl rendering stats events for Action B. 237 # Create 10 main and impl rendering stats events for Action B.
263 timer.Advance() 238 timer.Advance()
264 renderer_main.BeginSlice('webkit.console', 'ActionB', timer.Get(), '') 239 renderer_main.BeginSlice('webkit.console', 'ActionB', timer.Get(), '')
265 ref_stats.AppendNewRange() 240 ref_stats.AppendNewRange()
266 for i in xrange(0, 10): 241 for i in xrange(0, 10):
267 first = (i == 0) 242 first = (i == 0)
268 AddMainThreadRenderingStats(timer, renderer_main, first, None) 243 AddMainThreadRenderingStats(timer, renderer_main, first, ref_stats)
269 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) 244 AddImplThreadRenderingStats(timer, renderer_compositor, first, ref_stats)
270 AddMainThreadRenderingStats(timer, browser_main, first, ref_stats) 245 AddMainThreadRenderingStats(timer, browser_main, first, None)
271 AddImplThreadRenderingStats(timer, browser_compositor, first, ref_stats) 246 AddImplThreadRenderingStats(timer, browser_compositor, first, None)
272 renderer_main.EndSlice(timer.Get()) 247 renderer_main.EndSlice(timer.Get())
273 248
274 # Create 10 main and impl rendering stats events for Action A. 249 # Create 10 main and impl rendering stats events for Action A.
275 timer.Advance() 250 timer.Advance()
276 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') 251 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '')
277 ref_stats.AppendNewRange() 252 ref_stats.AppendNewRange()
278 for i in xrange(0, 10): 253 for i in xrange(0, 10):
279 first = (i == 0) 254 first = (i == 0)
280 AddMainThreadRenderingStats(timer, renderer_main, first, None) 255 AddMainThreadRenderingStats(timer, renderer_main, first, ref_stats)
281 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) 256 AddImplThreadRenderingStats(timer, renderer_compositor, first, ref_stats)
282 AddMainThreadRenderingStats(timer, browser_main, first, ref_stats) 257 AddMainThreadRenderingStats(timer, browser_main, first, None)
283 AddImplThreadRenderingStats(timer, browser_compositor, first, ref_stats) 258 AddImplThreadRenderingStats(timer, browser_compositor, first, None)
284 renderer_main.EndSlice(timer.Get()) 259 renderer_main.EndSlice(timer.Get())
285 260
286 browser.FinalizeImport() 261 renderer_main.FinalizeImport()
287 renderer.FinalizeImport() 262 renderer_compositor.FinalizeImport()
288 263
289 timeline_markers = timeline.FindTimelineMarkers( 264 timeline_markers = timeline.FindTimelineMarkers(
290 ['ActionA', 'ActionB', 'ActionA']) 265 ['ActionA', 'ActionB', 'ActionA'])
291 timeline_ranges = [ timeline_bounds.Bounds.CreateFromEvent(marker) 266 timeline_ranges = [ timeline_bounds.Bounds.CreateFromEvent(marker)
292 for marker in timeline_markers ] 267 for marker in timeline_markers ]
293 stats = RenderingStats(renderer, browser, timeline_ranges) 268 stats = RenderingStats(renderer, browser, timeline_ranges)
294 269
295 # Check if we are using the browser compositor's stats
296 self.assertEquals(stats.top_level_process, browser)
297
298 # Compare rendering stats to reference. 270 # Compare rendering stats to reference.
299 self.assertEquals(stats.frame_timestamps, ref_stats.frame_timestamps) 271 self.assertEquals(stats.frame_timestamps, ref_stats.frame_timestamps)
300 self.assertEquals(stats.frame_times, ref_stats.frame_times) 272 self.assertEquals(stats.frame_times, ref_stats.frame_times)
301 self.assertEquals(stats.rasterize_times, ref_stats.rasterize_times) 273 self.assertEquals(stats.rasterize_times, ref_stats.rasterize_times)
302 self.assertEquals(stats.rasterized_pixel_counts, 274 self.assertEquals(stats.rasterized_pixel_counts,
303 ref_stats.rasterized_pixel_counts) 275 ref_stats.rasterized_pixel_counts)
304 self.assertEquals(stats.paint_times, ref_stats.paint_times) 276 self.assertEquals(stats.paint_times, ref_stats.paint_times)
305 self.assertEquals(stats.painted_pixel_counts, 277 self.assertEquals(stats.painted_pixel_counts,
306 ref_stats.painted_pixel_counts) 278 ref_stats.painted_pixel_counts)
307 self.assertEquals(stats.record_times, ref_stats.record_times) 279 self.assertEquals(stats.record_times, ref_stats.record_times)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') 330 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '')
359 for _ in xrange(0, 10): 331 for _ in xrange(0, 10):
360 AddInputLatencyStats(timer, 'MouseWheel', browser_main, 332 AddInputLatencyStats(timer, 'MouseWheel', browser_main,
361 renderer_main, ref_latency_stats) 333 renderer_main, ref_latency_stats)
362 AddInputLatencyStats(timer, 'GestureScrollUpdate', browser_main, 334 AddInputLatencyStats(timer, 'GestureScrollUpdate', browser_main,
363 renderer_main, ref_latency_stats) 335 renderer_main, ref_latency_stats)
364 AddInputLatencyStats(timer, 'TouchMove', browser_main, 336 AddInputLatencyStats(timer, 'TouchMove', browser_main,
365 renderer_main, ref_latency_stats) 337 renderer_main, ref_latency_stats)
366 renderer_main.EndSlice(timer.Get()) 338 renderer_main.EndSlice(timer.Get())
367 339
368 browser.FinalizeImport() 340 browser_main.FinalizeImport()
369 renderer.FinalizeImport() 341 renderer_main.FinalizeImport()
370 342
371 mouse_wheel_scroll_events = [] 343 mouse_wheel_scroll_events = []
372 touch_scroll_events = [] 344 touch_scroll_events = []
373 js_touch_scroll_events = [] 345 js_touch_scroll_events = []
374 346
375 timeline_markers = timeline.FindTimelineMarkers( 347 timeline_markers = timeline.FindTimelineMarkers(
376 ['ActionA', 'ActionB', 'ActionA']) 348 ['ActionA', 'ActionB', 'ActionA'])
377 for timeline_range in [ timeline_bounds.Bounds.CreateFromEvent(marker) 349 for timeline_range in [ timeline_bounds.Bounds.CreateFromEvent(marker)
378 for marker in timeline_markers ]: 350 for marker in timeline_markers ]:
379 if timeline_range.is_empty: 351 if timeline_range.is_empty:
(...skipping 13 matching lines...) Expand all
393 self.assertEquals(touch_scroll_events, 365 self.assertEquals(touch_scroll_events,
394 ref_latency_stats.touch_scroll_events) 366 ref_latency_stats.touch_scroll_events)
395 self.assertEquals(js_touch_scroll_events, 367 self.assertEquals(js_touch_scroll_events,
396 ref_latency_stats.js_touch_scroll_events) 368 ref_latency_stats.js_touch_scroll_events)
397 self.assertEquals(ComputeMouseWheelScrollLatency(mouse_wheel_scroll_events), 369 self.assertEquals(ComputeMouseWheelScrollLatency(mouse_wheel_scroll_events),
398 ref_latency_stats.mouse_wheel_scroll_latency) 370 ref_latency_stats.mouse_wheel_scroll_latency)
399 self.assertEquals(ComputeTouchScrollLatency(touch_scroll_events), 371 self.assertEquals(ComputeTouchScrollLatency(touch_scroll_events),
400 ref_latency_stats.touch_scroll_latency) 372 ref_latency_stats.touch_scroll_latency)
401 self.assertEquals(ComputeTouchScrollLatency(js_touch_scroll_events), 373 self.assertEquals(ComputeTouchScrollLatency(js_touch_scroll_events),
402 ref_latency_stats.js_touch_scroll_latency) 374 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