OLD | NEW |
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 |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 def AddInputLatencyStats(mock_timer, input_type, start_thread, end_thread, | 146 def AddInputLatencyStats(mock_timer, input_type, start_thread, end_thread, |
147 ref_latency_stats = None): | 147 ref_latency_stats = None): |
148 """ Adds a random input latency stats event. | 148 """ Adds a random input latency stats event. |
149 | 149 |
150 input_type: The input type for which the latency slice is generated. | 150 input_type: The input type for which the latency slice is generated. |
151 start_thread: The start thread on which the async slice is added. | 151 start_thread: The start thread on which the async slice is added. |
152 end_thread: The end thread on which the async slice is ended. | 152 end_thread: The end thread on which the async slice is ended. |
153 ref_latency_stats: A ReferenceInputLatencyStats object for expected values. | 153 ref_latency_stats: A ReferenceInputLatencyStats object for expected values. |
154 """ | 154 """ |
155 | 155 |
156 mock_timer.Advance() | 156 mock_timer.Advance(2, 4) |
157 ui_comp_time = mock_timer.Get() * 1000.0 | 157 ui_comp_time = mock_timer.Get() * 1000.0 |
158 mock_timer.Advance() | 158 mock_timer.Advance(2, 4) |
159 begin_comp_time = mock_timer.Get() * 1000.0 | 159 begin_comp_time = mock_timer.Get() * 1000.0 |
160 mock_timer.Advance(10, 20) | 160 mock_timer.Advance(10, 20) |
161 end_comp_time = mock_timer.Get() * 1000.0 | 161 end_comp_time = mock_timer.Get() * 1000.0 |
162 | 162 |
163 data = { UI_COMP_NAME: {'time': ui_comp_time}, | 163 data = { UI_COMP_NAME: {'time': ui_comp_time}, |
164 BEGIN_COMP_NAME: {'time': begin_comp_time}, | 164 BEGIN_COMP_NAME: {'time': begin_comp_time}, |
165 END_COMP_NAME: {'time': end_comp_time} } | 165 END_COMP_NAME: {'time': end_comp_time} } |
166 | 166 |
167 timestamp = mock_timer.Get() | 167 timestamp = mock_timer.Get() |
168 | 168 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 browser_main = browser.GetOrCreateThread(tid = 11) | 233 browser_main = browser.GetOrCreateThread(tid = 11) |
234 browser_compositor = browser.GetOrCreateThread(tid = 12) | 234 browser_compositor = browser.GetOrCreateThread(tid = 12) |
235 renderer = timeline.GetOrCreateProcess(pid = 2) | 235 renderer = timeline.GetOrCreateProcess(pid = 2) |
236 renderer_main = renderer.GetOrCreateThread(tid = 21) | 236 renderer_main = renderer.GetOrCreateThread(tid = 21) |
237 renderer_compositor = renderer.GetOrCreateThread(tid = 22) | 237 renderer_compositor = renderer.GetOrCreateThread(tid = 22) |
238 | 238 |
239 timer = MockTimer() | 239 timer = MockTimer() |
240 ref_stats = ReferenceRenderingStats() | 240 ref_stats = ReferenceRenderingStats() |
241 | 241 |
242 # Create 10 main and impl rendering stats events for Action A. | 242 # Create 10 main and impl rendering stats events for Action A. |
243 timer.Advance() | 243 timer.Advance(2, 4) |
244 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') | 244 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') |
245 ref_stats.AppendNewRange() | 245 ref_stats.AppendNewRange() |
246 for i in xrange(0, 10): | 246 for i in xrange(0, 10): |
247 first = (i == 0) | 247 first = (i == 0) |
248 AddMainThreadRenderingStats(timer, renderer_main, first, None) | 248 AddMainThreadRenderingStats(timer, renderer_main, first, None) |
249 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) | 249 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) |
250 AddMainThreadRenderingStats(timer, browser_main, first, ref_stats) | 250 AddMainThreadRenderingStats(timer, browser_main, first, ref_stats) |
251 AddImplThreadRenderingStats(timer, browser_compositor, first, ref_stats) | 251 AddImplThreadRenderingStats(timer, browser_compositor, first, ref_stats) |
252 timer.Advance() | 252 timer.Advance(2, 4) |
253 renderer_main.EndSlice(timer.Get()) | 253 renderer_main.EndSlice(timer.Get()) |
254 | 254 |
255 # Create 5 main and impl rendering stats events not within any action. | 255 # Create 5 main and impl rendering stats events not within any action. |
256 for i in xrange(0, 5): | 256 for i in xrange(0, 5): |
257 first = (i == 0) | 257 first = (i == 0) |
258 AddMainThreadRenderingStats(timer, renderer_main, first, None) | 258 AddMainThreadRenderingStats(timer, renderer_main, first, None) |
259 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) | 259 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) |
260 AddMainThreadRenderingStats(timer, browser_main, first, None) | 260 AddMainThreadRenderingStats(timer, browser_main, first, None) |
261 AddImplThreadRenderingStats(timer, browser_compositor, first, None) | 261 AddImplThreadRenderingStats(timer, browser_compositor, first, None) |
262 | 262 |
263 # Create 10 main and impl rendering stats events for Action B. | 263 # Create 10 main and impl rendering stats events for Action B. |
264 timer.Advance() | 264 timer.Advance(2, 4) |
265 renderer_main.BeginSlice('webkit.console', 'ActionB', timer.Get(), '') | 265 renderer_main.BeginSlice('webkit.console', 'ActionB', timer.Get(), '') |
266 ref_stats.AppendNewRange() | 266 ref_stats.AppendNewRange() |
267 for i in xrange(0, 10): | 267 for i in xrange(0, 10): |
268 first = (i == 0) | 268 first = (i == 0) |
269 AddMainThreadRenderingStats(timer, renderer_main, first, None) | 269 AddMainThreadRenderingStats(timer, renderer_main, first, None) |
270 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) | 270 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) |
271 AddMainThreadRenderingStats(timer, browser_main, first, ref_stats) | 271 AddMainThreadRenderingStats(timer, browser_main, first, ref_stats) |
272 AddImplThreadRenderingStats(timer, browser_compositor, first, ref_stats) | 272 AddImplThreadRenderingStats(timer, browser_compositor, first, ref_stats) |
273 timer.Advance() | 273 timer.Advance(2, 4) |
274 renderer_main.EndSlice(timer.Get()) | 274 renderer_main.EndSlice(timer.Get()) |
275 | 275 |
276 # Create 10 main and impl rendering stats events for Action A. | 276 # Create 10 main and impl rendering stats events for Action A. |
277 timer.Advance() | 277 timer.Advance(2, 4) |
278 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') | 278 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') |
279 ref_stats.AppendNewRange() | 279 ref_stats.AppendNewRange() |
280 for i in xrange(0, 10): | 280 for i in xrange(0, 10): |
281 first = (i == 0) | 281 first = (i == 0) |
282 AddMainThreadRenderingStats(timer, renderer_main, first, None) | 282 AddMainThreadRenderingStats(timer, renderer_main, first, None) |
283 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) | 283 AddImplThreadRenderingStats(timer, renderer_compositor, first, None) |
284 AddMainThreadRenderingStats(timer, browser_main, first, ref_stats) | 284 AddMainThreadRenderingStats(timer, browser_main, first, ref_stats) |
285 AddImplThreadRenderingStats(timer, browser_compositor, first, ref_stats) | 285 AddImplThreadRenderingStats(timer, browser_compositor, first, ref_stats) |
286 timer.Advance() | 286 timer.Advance(2, 4) |
287 renderer_main.EndSlice(timer.Get()) | 287 renderer_main.EndSlice(timer.Get()) |
288 | 288 |
289 browser.FinalizeImport() | 289 browser.FinalizeImport() |
290 renderer.FinalizeImport() | 290 renderer.FinalizeImport() |
291 | 291 |
292 timeline_markers = timeline.FindTimelineMarkers( | 292 timeline_markers = timeline.FindTimelineMarkers( |
293 ['ActionA', 'ActionB', 'ActionA']) | 293 ['ActionA', 'ActionB', 'ActionA']) |
294 timeline_ranges = [ timeline_bounds.Bounds.CreateFromEvent(marker) | 294 timeline_ranges = [ timeline_bounds.Bounds.CreateFromEvent(marker) |
295 for marker in timeline_markers ] | 295 for marker in timeline_markers ] |
296 stats = RenderingStats(renderer, browser, timeline_ranges) | 296 stats = RenderingStats(renderer, browser, timeline_ranges) |
(...skipping 20 matching lines...) Expand all Loading... |
317 # Create a browser process and a renderer process. | 317 # Create a browser process and a renderer process. |
318 browser = timeline.GetOrCreateProcess(pid = 1) | 318 browser = timeline.GetOrCreateProcess(pid = 1) |
319 browser_main = browser.GetOrCreateThread(tid = 11) | 319 browser_main = browser.GetOrCreateThread(tid = 11) |
320 renderer = timeline.GetOrCreateProcess(pid = 2) | 320 renderer = timeline.GetOrCreateProcess(pid = 2) |
321 renderer_main = renderer.GetOrCreateThread(tid = 21) | 321 renderer_main = renderer.GetOrCreateThread(tid = 21) |
322 | 322 |
323 timer = MockTimer() | 323 timer = MockTimer() |
324 ref_latency_stats = ReferenceInputLatencyStats() | 324 ref_latency_stats = ReferenceInputLatencyStats() |
325 | 325 |
326 # Create 10 input latency stats events for Action A. | 326 # Create 10 input latency stats events for Action A. |
327 timer.Advance() | 327 timer.Advance(2, 4) |
328 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') | 328 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') |
329 for _ in xrange(0, 10): | 329 for _ in xrange(0, 10): |
330 AddInputLatencyStats(timer, 'MouseWheel', browser_main, | 330 AddInputLatencyStats(timer, 'MouseWheel', browser_main, |
331 renderer_main, ref_latency_stats) | 331 renderer_main, ref_latency_stats) |
332 AddInputLatencyStats(timer, 'GestureScrollUpdate', browser_main, | 332 AddInputLatencyStats(timer, 'GestureScrollUpdate', browser_main, |
333 renderer_main, ref_latency_stats) | 333 renderer_main, ref_latency_stats) |
334 AddInputLatencyStats(timer, 'TouchMove', browser_main, | 334 AddInputLatencyStats(timer, 'TouchMove', browser_main, |
335 renderer_main, ref_latency_stats) | 335 renderer_main, ref_latency_stats) |
336 timer.Advance() | 336 timer.Advance(2, 4) |
337 renderer_main.EndSlice(timer.Get()) | 337 renderer_main.EndSlice(timer.Get()) |
338 | 338 |
339 # Create 5 input latency stats events not within any action. | 339 # Create 5 input latency stats events not within any action. |
| 340 timer.Advance(2, 4) |
340 for _ in xrange(0, 5): | 341 for _ in xrange(0, 5): |
341 AddInputLatencyStats(timer, 'MouseWheel', browser_main, | 342 AddInputLatencyStats(timer, 'MouseWheel', browser_main, |
342 renderer_main, None) | 343 renderer_main, None) |
343 AddInputLatencyStats(timer, 'GestureScrollUpdate', browser_main, | 344 AddInputLatencyStats(timer, 'GestureScrollUpdate', browser_main, |
344 renderer_main, None) | 345 renderer_main, None) |
345 AddInputLatencyStats(timer, 'TouchMove', browser_main, | 346 AddInputLatencyStats(timer, 'TouchMove', browser_main, |
346 renderer_main, None) | 347 renderer_main, None) |
347 | 348 |
348 # Create 10 input latency stats events for Action B. | 349 # Create 10 input latency stats events for Action B. |
349 timer.Advance() | 350 timer.Advance(2, 4) |
350 renderer_main.BeginSlice('webkit.console', 'ActionB', timer.Get(), '') | 351 renderer_main.BeginSlice('webkit.console', 'ActionB', timer.Get(), '') |
351 for _ in xrange(0, 10): | 352 for _ in xrange(0, 10): |
352 AddInputLatencyStats(timer, 'MouseWheel', browser_main, | 353 AddInputLatencyStats(timer, 'MouseWheel', browser_main, |
353 renderer_main, ref_latency_stats) | 354 renderer_main, ref_latency_stats) |
354 AddInputLatencyStats(timer, 'GestureScrollUpdate', browser_main, | 355 AddInputLatencyStats(timer, 'GestureScrollUpdate', browser_main, |
355 renderer_main, ref_latency_stats) | 356 renderer_main, ref_latency_stats) |
356 AddInputLatencyStats(timer, 'TouchMove', browser_main, | 357 AddInputLatencyStats(timer, 'TouchMove', browser_main, |
357 renderer_main, ref_latency_stats) | 358 renderer_main, ref_latency_stats) |
358 timer.Advance() | 359 timer.Advance(2, 4) |
359 renderer_main.EndSlice(timer.Get()) | 360 renderer_main.EndSlice(timer.Get()) |
360 | 361 |
361 # Create 10 input latency stats events for Action A. | 362 # Create 10 input latency stats events for Action A. |
362 timer.Advance() | 363 timer.Advance(2, 4) |
363 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') | 364 renderer_main.BeginSlice('webkit.console', 'ActionA', timer.Get(), '') |
364 for _ in xrange(0, 10): | 365 for _ in xrange(0, 10): |
365 AddInputLatencyStats(timer, 'MouseWheel', browser_main, | 366 AddInputLatencyStats(timer, 'MouseWheel', browser_main, |
366 renderer_main, ref_latency_stats) | 367 renderer_main, ref_latency_stats) |
367 AddInputLatencyStats(timer, 'GestureScrollUpdate', browser_main, | 368 AddInputLatencyStats(timer, 'GestureScrollUpdate', browser_main, |
368 renderer_main, ref_latency_stats) | 369 renderer_main, ref_latency_stats) |
369 AddInputLatencyStats(timer, 'TouchMove', browser_main, | 370 AddInputLatencyStats(timer, 'TouchMove', browser_main, |
370 renderer_main, ref_latency_stats) | 371 renderer_main, ref_latency_stats) |
371 timer.Advance() | 372 timer.Advance(2, 4) |
372 renderer_main.EndSlice(timer.Get()) | 373 renderer_main.EndSlice(timer.Get()) |
373 | 374 |
374 browser.FinalizeImport() | 375 browser.FinalizeImport() |
375 renderer.FinalizeImport() | 376 renderer.FinalizeImport() |
376 | 377 |
377 mouse_wheel_scroll_events = [] | 378 mouse_wheel_scroll_events = [] |
378 touch_scroll_events = [] | 379 touch_scroll_events = [] |
379 js_touch_scroll_events = [] | 380 js_touch_scroll_events = [] |
380 | 381 |
381 timeline_markers = timeline.FindTimelineMarkers( | 382 timeline_markers = timeline.FindTimelineMarkers( |
(...skipping 17 matching lines...) Expand all Loading... |
399 self.assertEquals(touch_scroll_events, | 400 self.assertEquals(touch_scroll_events, |
400 ref_latency_stats.touch_scroll_events) | 401 ref_latency_stats.touch_scroll_events) |
401 self.assertEquals(js_touch_scroll_events, | 402 self.assertEquals(js_touch_scroll_events, |
402 ref_latency_stats.js_touch_scroll_events) | 403 ref_latency_stats.js_touch_scroll_events) |
403 self.assertEquals(ComputeMouseWheelScrollLatency(mouse_wheel_scroll_events), | 404 self.assertEquals(ComputeMouseWheelScrollLatency(mouse_wheel_scroll_events), |
404 ref_latency_stats.mouse_wheel_scroll_latency) | 405 ref_latency_stats.mouse_wheel_scroll_latency) |
405 self.assertEquals(ComputeTouchScrollLatency(touch_scroll_events), | 406 self.assertEquals(ComputeTouchScrollLatency(touch_scroll_events), |
406 ref_latency_stats.touch_scroll_latency) | 407 ref_latency_stats.touch_scroll_latency) |
407 self.assertEquals(ComputeTouchScrollLatency(js_touch_scroll_events), | 408 self.assertEquals(ComputeTouchScrollLatency(js_touch_scroll_events), |
408 ref_latency_stats.js_touch_scroll_latency) | 409 ref_latency_stats.js_touch_scroll_latency) |
OLD | NEW |