blob: a27bb9cb17748d8273393f299a59f7d91da3267e [file] [log] [blame]
<!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>