| <!DOCTYPE html> |
| <!-- |
| Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style license that can be |
| found in the LICENSE file. |
| --> |
| |
| <link rel="import" href="/extras/audits/chrome_audit.html"> |
| <link rel="import" href="/extras/importer/trace_event_importer.html"> |
| <link rel="import" href="/core/test_utils.html"> |
| <link rel="import" href="/core/trace_model/trace_model.html"> |
| |
| <script> |
| 'use strict'; |
| |
| tv.b.unittest.testSuite(function() { |
| |
| test('getLatencyData', function() { |
| var events = []; |
| for (var i = 0; i < 10; i++) { |
| var start_ts = i * 10000; |
| var end_ts = i * 10000 + 1000 * (i % 2); |
| |
| // Non Input latency related slices |
| events.push({'cat' : 'benchmark', 'pid' : 3507, 'tid': 3507, 'ts' : start_ts, 'ph' : 'S', 'name' : 'Test', 'id' : i}); // @suppress longLineCheck |
| events.push({'cat' : 'benchmark', 'pid' : 3507, 'tid': 3507, 'ts' : end_ts, 'ph' : 'F', 'name' : 'Test', 'id' : i}); // @suppress longLineCheck |
| |
| // Input latency sclices |
| events.push({'cat' : 'benchmark', 'pid' : 3507, 'tid': 3507, 'ts' : start_ts, 'ph' : 'S', 'name' : 'InputLatency', 'id' : i}); // @suppress longLineCheck |
| events.push({'cat' : 'benchmark', 'pid' : 3507, 'tid': 3507, 'ts' : end_ts, 'ph' : 'T', 'name' : 'InputLatency', 'args' : {'step' : 'GestureScrollUpdate'}, 'id' : i}); // @suppress longLineCheck |
| events.push({'cat' : 'benchmark', 'pid' : 3507, 'tid': 3507, 'ts' : end_ts, 'ph' : 'F', 'name' : 'InputLatency', 'args' : {'data' : {'INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT' : {'time' : start_ts}, 'INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT' : {'time' : end_ts}}}, 'id' : i}); // @suppress longLineCheck |
| } |
| events.push({'cat' : '__metadata', 'pid' : 3507, 'tid' : 3507, 'ts' : 0, 'ph' : 'M', 'name' : 'thread_name', 'args' : {'name' : 'CrBrowserMain'}}); // @suppress longLineCheck |
| |
| var m = new tv.c.TraceModel(events); |
| var audit = new tv.e.audits.ChromeAudit(m); |
| var latencyData = audit.browser.getLatencyDataInRange(m.bounds); |
| assertEquals(10, latencyData.length); |
| for (var i = 0; i < latencyData.length; i++) { |
| assertEquals(i % 2, latencyData[i].latency); |
| } |
| }); |
| |
| test('getFrametime', function() { |
| var frame_ts; |
| var events = []; |
| // Browser process 3507 |
| events.push({'cat' : '__metadata', 'pid' : 3507, 'tid' : 3507, 'ts' : 0, 'ph' : 'M', 'name' : 'thread_name', 'args' : {'name' : 'CrBrowserMain'}}); // @suppress longLineCheck |
| // Renderer process 3508 |
| events.push({'cat' : '__metadata', 'pid' : 3508, 'tid' : 3508, 'ts' : 0, 'ph' : 'M', 'name' : 'thread_name', 'args' : {'name' : 'CrRendererMain'}}); // @suppress longLineCheck |
| // Renderer process 3509 |
| events.push({'cat' : '__metadata', 'pid' : 3509, 'tid' : 3509, 'ts' : 0, 'ph' : 'M', 'name' : 'thread_name', 'args' : {'name' : 'CrRendererMain'}}); // @suppress longLineCheck |
| |
| frame_ts = 0; |
| // Add impl rendering stats for browser process 3507 |
| for (var i = 0; i < 10; i++) { |
| events.push({'cat' : 'benchmark', 'pid' : 3507, 'tid' : 3507, 'ts' : frame_ts, 'ph' : 'i', 'name' : 'BenchmarkInstrumentation::ImplThreadRenderingStats', 's' : 't'}); // @suppress longLineCheck |
| frame_ts += 16000 + 1000 * (i % 2); |
| } |
| |
| frame_ts = 0; |
| // Add main rendering stats for renderer process 3508 |
| for (var i = 0; i < 10; i++) { |
| events.push({'cat' : 'benchmark', 'pid' : 3508, 'tid' : 3508, 'ts' : frame_ts, 'ph' : 'i', 'name' : 'BenchmarkInstrumentation::MainThreadRenderingStats', 's' : 't'}); // @suppress longLineCheck |
| frame_ts += 16000 + 1000 * (i % 2); |
| } |
| |
| frame_ts = 0; |
| // Add impl and main rendering stats for renderer process 3509 |
| for (var i = 0; i < 10; i++) { |
| events.push({'cat' : 'benchmark', 'pid' : 3509, 'tid' : 3509, 'ts' : frame_ts, 'ph' : 'i', 'name' : 'BenchmarkInstrumentation::ImplThreadRenderingStats', 's' : 't'}); // @suppress longLineCheck |
| events.push({'cat' : 'benchmark', 'pid' : 3509, 'tid' : 3509, 'ts' : frame_ts, 'ph' : 'i', 'name' : 'BenchmarkInstrumentation::MainThreadRenderingStats', 's' : 't'}); // @suppress longLineCheck |
| frame_ts += 16000 + 1000 * (i % 2); |
| } |
| |
| var m = new tv.c.TraceModel(events); |
| var audit = new tv.e.audits.ChromeAudit(m); |
| |
| // Testing browser impl and main rendering stats. |
| var frameEvents = audit.browser.getFrameEventsInRange( |
| tv.e.audits.IMPL_FRAMETIME_TYPE, m.bounds); |
| var frametimeData = tv.e.audits.getFrametimeDataFromEvents(frameEvents); |
| assertEquals(9, frametimeData.length); |
| for (var i = 0; i < frametimeData.length; i++) { |
| assertEquals(16 + i % 2, frametimeData[i].frametime); |
| } |
| // No main rendering stats. |
| frameEvents = audit.browser.getFrameEventsInRange( |
| tv.e.audits.MAIN_FRAMETIME_TYPE, m.bounds); |
| assertEquals(0, frameEvents.length); |
| |
| |
| // Testing renderer 3508 impl and main rendering stats. |
| frameEvents = audit.renderers[3508].getFrameEventsInRange( |
| tv.e.audits.MAIN_FRAMETIME_TYPE, m.bounds); |
| frametimeData = tv.e.audits.getFrametimeDataFromEvents(frameEvents); |
| assertEquals(9, frametimeData.length); |
| for (var i = 0; i < frametimeData.length; i++) { |
| assertEquals(16 + i % 2, frametimeData[i].frametime); |
| } |
| |
| // No impl rendering stats. |
| frameEvents = audit.renderers[3508].getFrameEventsInRange( |
| tv.e.audits.IMPL_FRAMETIME_TYPE, m.bounds); |
| assertEquals(0, frameEvents.length); |
| |
| |
| // Testing renderer 3509 impl and main rendering stats. |
| frameEvents = audit.renderers[3509].getFrameEventsInRange( |
| tv.e.audits.IMPL_FRAMETIME_TYPE, m.bounds); |
| frametimeData = tv.e.audits.getFrametimeDataFromEvents(frameEvents); |
| assertEquals(9, frametimeData.length); |
| for (var i = 0; i < frametimeData.length; i++) { |
| assertEquals(16 + i % 2, frametimeData[i].frametime); |
| } |
| |
| frameEvents = audit.renderers[3509].getFrameEventsInRange( |
| tv.e.audits.MAIN_FRAMETIME_TYPE, m.bounds); |
| frametimeData = tv.e.audits.getFrametimeDataFromEvents(frameEvents); |
| assertEquals(9, frametimeData.length); |
| for (var i = 0; i < frametimeData.length; i++) { |
| assertEquals(16 + i % 2, frametimeData[i].frametime); |
| } |
| |
| }); |
| }); |
| </script> |