blob: 2b3067bb796082c4b7710ca4536dd22a03ae9699 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2015 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="/tracing/extras/chrome/cc/input_latency_async_slice.html">
<link rel="import" href="/tracing/extras/chrome/chrome_test_utils.html">
<link rel="import" href="/tracing/extras/rail/ir_verifier.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
var INPUT_TYPE = tr.e.cc.INPUT_EVENT_TYPE_NAMES;
var chrome_test_utils = tr.e.chrome.ChromeTestUtils;
var IRVerifier = tr.e.rail.IRVerifier;
function addFrameEventForInput(model, event) {
var frame = chrome_test_utils.addFrameEvent(model,
{start: event.start, end: event.end, isTopLevel: true});
model.flowEvents.push(tr.c.TestUtils.newFlowEventEx({
id: event.id,
start: event.start,
end: event.end,
startSlice: frame,
endSlice: frame
}));
}
test('empty', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
};
verifier.expectedIRs = [
];
verifier.verify();
});
test('slowMouseMoveResponses', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(
model, INPUT_TYPE.MOUSE_DOWN, {start: 0, end: 10});
var mouseMove = chrome_test_utils.addInputEvent(
model, INPUT_TYPE.MOUSE_MOVE, {start: 10, end: 20, id: '0x100'});
addFrameEventForInput(model, mouseMove);
mouseMove = chrome_test_utils.addInputEvent(
model, INPUT_TYPE.MOUSE_MOVE, {start: 70, end: 80, id: '0x101'});
addFrameEventForInput(model, mouseMove);
mouseMove = chrome_test_utils.addInputEvent(
model, INPUT_TYPE.MOUSE_MOVE, {start: 130, end: 140, id: '0x102'});
addFrameEventForInput(model, mouseMove);
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 10, eventCount: 0},
{title: 'Response', name: 'Mouse', start: 10, end: 20, eventCount: 4},
{title: 'Idle', start: 20, end: 70, eventCount: 0},
{title: 'Response', name: 'Mouse', start: 70, end: 80, eventCount: 3},
{title: 'Idle', start: 80, end: 130, eventCount: 0},
{title: 'Response', name: 'Mouse', start: 130, end: 140, eventCount: 3}
];
verifier.verify();
});
test('mouseEventResponses', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
var mouseDown = chrome_test_utils.addInputEvent(
model, INPUT_TYPE.MOUSE_DOWN, {start: 0, end: 50, id: '0x100'});
addFrameEventForInput(model, mouseDown);
var mouseUp = chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_UP,
{start: 50, end: 100, id: '0x101'});
addFrameEventForInput(model, mouseUp);
var mouseMove = chrome_test_utils.addInputEvent(
model, INPUT_TYPE.MOUSE_MOVE, {start: 200, end: 250, id: '0x102'});
addFrameEventForInput(model, mouseMove);
};
verifier.expectedIRs = [
{title: 'Response', name: 'Mouse', start: 0, end: 50, eventCount: 3},
{title: 'Response', name: 'Mouse', start: 50, end: 100, eventCount: 3},
{title: 'Idle', start: 100, end: 200, eventCount: 0},
{title: 'Response', name: 'Mouse', start: 200, end: 250, eventCount: 3}
];
verifier.verify();
});
test('mouseEventsIgnored', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_MOVE,
{start: 0, end: 50});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_DOWN,
{start: 50, end: 100});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 100, eventCount: 0}
];
verifier.verify();
});
test('unassociatedEvents', function() {
// Unassociated ThreadSlices that start during an Idle should be associated
// with it. Expect the Idle IR to have 2 associated events: both of the
// ThreadSlices in the model.
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
var start = tr.c.TestUtils.newSliceEx(
{title: 'model start', start: 0, end: 1, type: tr.model.ThreadSlice});
start.isTopLevel = true;
model.browserMain.sliceGroup.pushSlice(start);
var end = tr.c.TestUtils.newSliceEx(
{title: 'model end', start: 9, end: 10, type: tr.model.ThreadSlice});
end.isTopLevel = true;
model.browserMain.sliceGroup.pushSlice(end);
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 10, eventCount: 2}
];
verifier.verify();
});
test('overlappingIdleAndLoadCollectUnassociatedEvents', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addFrameEvent(model, {start: 0, end: 10});
chrome_test_utils.addCommitLoadEvent(
model, {start: 10, end: 20, args: {id: 1}});
chrome_test_utils.addFinishLoadEvent(
model, {start: 21, end: 24, args: {id: 1}});
chrome_test_utils.addLoadFinishedEvent(
model, {start: 22, end: 23});
chrome_test_utils.addFrameEvent(model, {start: 25, end: 30});
chrome_test_utils.addFrameEvent(model, {start: 35, end: 40});
// 3 Idle events.
chrome_test_utils.addRenderingEvent(model, {start: 5, end: 15});
chrome_test_utils.addRenderingEvent(model, {start: 11, end: 15});
chrome_test_utils.addRenderingEvent(model, {start: 13, end: 15});
// 1 Idle event.
chrome_test_utils.addRenderingEvent(model, {start: 35, end: 36});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 10, eventCount: 1},
{title: 'Load', name: 'Succeeded', start: 10, end: 30, eventCount: 4},
{title: 'Idle', start: 30, end: 40, eventCount: 1}
];
verifier.verify();
});
test('flingFlingFling', function() {
// This trace gave me so many different kinds of trouble that I'm just going
// to copy it straight in here, without trying to clarify it at all.
// measurmt-traces/mobile/cnet_fling_up_fling_down_motox_2013.json
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addFrameEvent(model, {start: 0, end: 10});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_START,
{start: 919, end: 998});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_CANCEL,
{start: 919, end: 1001});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_DOWN,
{start: 919, end: 1001});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_CANCEL,
{start: 974, end: 1020});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN,
{start: 974, end: 1020});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 974, end: 1040});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 974, end: 1054});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 990, end: 1021});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 990, end: 1052});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 1006, end: 1021});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 1022, end: 1036});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1022, end: 1052});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 1038, end: 1049});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1038, end: 1068});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_END,
{start: 1046, end: 1050});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 1046, end: 1077});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_START,
{start: 1432, end: 2238});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_CANCEL,
{start: 1432, end: 2241});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 1516, end: 2605});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN,
{start: 1532, end: 2274});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1532, end: 2294});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1549, end: 2310});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_END,
{start: 1627, end: 2275});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 1627, end: 2310});
chrome_test_utils.addFrameEvent(model, {start: 2990, end: 3000});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 919, eventCount: 0},
{title: 'Response', name: 'Scroll,Tap,Touch', start: 919, end: 1054,
eventCount: 6},
{title: 'Animation', name: 'Scroll,Touch', start: 1054, end: 1068,
eventCount: 8},
{title: 'Animation', name: 'Fling', start: 1054, end: 1432,
eventCount: 2},
{title: 'Response', name: 'Scroll,Touch', start: 1432, end: 2605,
eventCount: 5},
{title: 'Animation', name: 'Scroll', start: 1549, end: 2310,
eventCount: 1},
{title: 'Animation', name: 'Fling', start: 2605, end: 3000,
eventCount: 1}
];
verifier.verify();
});
test('keyboardEvents', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.KEY_DOWN_RAW,
{start: 0, end: 45});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.CHAR,
{start: 10, end: 50});
};
verifier.expectedIRs = [
{title: 'Response', name: 'Keyboard', start: 0, end: 50, eventCount: 2}
];
verifier.verify();
});
test('mouseResponses', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.CLICK,
{start: 0, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.CONTEXT_MENU,
{start: 200, end: 300});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 400, end: 500});
};
verifier.expectedIRs = [
{title: 'Response', name: 'Mouse', start: 0, end: 100, eventCount: 1},
{title: 'Idle', start: 100, end: 200, eventCount: 0},
{title: 'Response', name: 'Mouse', start: 200, end: 300, eventCount: 1},
{title: 'Idle', start: 300, end: 400, eventCount: 0},
{title: 'Response', name: 'MouseWheel', start: 400, end: 500,
eventCount: 1}
];
verifier.verify();
});
test('mouseWheelAnimation', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 0, end: 20});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 16, end: 36});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 55, end: 75});
// This threshold uses both events' start times, not end...start.
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 100, end: 150});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 141, end: 191});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 182, end: 200});
};
verifier.expectedIRs = [
{title: 'Response', name: 'MouseWheel', start: 0, end: 20, eventCount: 1},
{title: 'Animation', name: 'MouseWheel', start: 20, end: 75,
eventCount: 2},
{title: 'Idle', start: 75, end: 100, eventCount: 0},
{title: 'Response', name: 'MouseWheel', start: 100, end: 150,
eventCount: 1},
{title: 'Response', name: 'MouseWheel', start: 141, end: 191,
eventCount: 1},
{title: 'Response', name: 'MouseWheel', start: 182, end: 200,
eventCount: 1}
];
verifier.verify();
});
test('mouseDownUpResponse', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_DOWN,
{start: 0, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_UP,
{start: 200, end: 210});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 200, eventCount: 0},
{title: 'Response', name: 'Mouse', start: 200, end: 210, eventCount: 2}
];
verifier.verify();
});
test('ignoreLoneMouseMoves', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_MOVE,
{start: 0, end: 100});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 100, eventCount: 0}
];
verifier.verify();
});
test('mouseDrags', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(
model, INPUT_TYPE.MOUSE_DOWN, {start: 0, end: 100});
var mouseMove = chrome_test_utils.addInputEvent(
model, INPUT_TYPE.MOUSE_MOVE, {start: 200, end: 215});
addFrameEventForInput(model, mouseMove);
mouseMove = chrome_test_utils.addInputEvent(
model, INPUT_TYPE.MOUSE_MOVE, {start: 210, end: 220});
addFrameEventForInput(model, mouseMove);
mouseMove = chrome_test_utils.addInputEvent(
model, INPUT_TYPE.MOUSE_MOVE, {start: 221, end: 240});
addFrameEventForInput(model, mouseMove);
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 200, eventCount: 0},
{title: 'Response', name: 'Mouse', start: 200, end: 215, eventCount: 4},
{title: 'Animation', name: 'Mouse', start: 215, end: 240, eventCount: 6}
];
verifier.verify();
});
test('twoScrollsNoFling', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN,
{start: 0, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 20, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 40, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 60, end: 150});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 70, end: 150});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_END,
{start: 80, end: 150});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN,
{start: 300, end: 400});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 320, end: 400});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 330, end: 450});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 340, end: 450});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 350, end: 500});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_END,
{start: 360, end: 500});
};
verifier.expectedIRs = [
{title: 'Response', name: 'Scroll', start: 0, end: 100, eventCount: 2},
{title: 'Animation', name: 'Scroll', start: 100, end: 150, eventCount: 4},
{title: 'Idle', start: 150, end: 300, eventCount: 0},
{title: 'Response', name: 'Scroll', start: 300, end: 400, eventCount: 2},
{title: 'Animation', name: 'Scroll', start: 400, end: 500, eventCount: 4}
];
verifier.verify();
});
test('cssAnimations', function() {
// CSS Animations happen on the renderer process, not the browser process.
// They are merged if they overlap.
// They are merged with other kinds of animations.
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addEvent(model.rendererMain, {
title: 'Animation', start: 0, end: 100});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'Animation', start: 99, end: 200});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 150, end: 180});
chrome_test_utils.addFrameEvent(model, {start: 290, end: 300});
};
verifier.expectedIRs = [
{title: 'Animation', name: 'CSS', start: 0, end: 200, eventCount: 2},
{title: 'Animation', name: 'Fling', start: 150, end: 300, eventCount: 1}
];
verifier.verify();
});
test('flingThatIsntstopped', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 32, end: 100});
chrome_test_utils.addFlingAnimationEvent(model, {start: 38, end: 200});
chrome_test_utils.addFrameEvent(model, {start: 290, end: 300});
};
verifier.expectedIRs = [
{title: 'Animation', name: 'Fling', start: 32, end: 200, eventCount: 2},
{title: 'Idle', start: 200, end: 300, eventCount: 0}
];
verifier.verify();
});
test('flingThatIsStopped', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 32, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_CANCEL,
{start: 105, end: 150});
};
verifier.expectedIRs = [
{title: 'Animation', name: 'Fling', start: 32, end: 105, eventCount: 2},
{title: 'Idle', start: 105, end: 150, eventCount: 0}
];
verifier.verify();
});
test('flingFling', function() {
// measurmt-traces/mobile/facebook_obama_scroll_dialog_box.html
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 0, end: 30});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_START,
{start: 100, end: 130});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_CANCEL,
{start: 100, end: 130});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 110, end: 140});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 170, end: 180});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_END,
{start: 200, end: 210});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 200, end: 220});
chrome_test_utils.addFrameEvent(model, {start: 230, end: 240});
};
verifier.expectedIRs = [
{title: 'Animation', name: 'Fling', start: 0, end: 100, eventCount: 2},
{title: 'Response', name: 'Touch', start: 100, end: 140, eventCount: 2},
{title: 'Animation', name: 'Touch', start: 140, end: 210, eventCount: 2},
{title: 'Animation', name: 'Fling', start: 200, end: 240, eventCount: 1}
];
verifier.verify();
});
test('load', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addCommitLoadEvent(model, {
start: 0, end: 10, args: {id: 1}});
chrome_test_utils.addFinishLoadEvent(
model, {start: 11, end: 14, args: {id: 1}});
chrome_test_utils.addLoadFinishedEvent(
model, {start: 12, end: 13});
chrome_test_utils.addFrameEvent(model, {start: 15, end: 20});
};
verifier.expectedIRs = [
{title: 'Load', name: 'Succeeded', start: 0, end: 20, eventCount: 4}
];
verifier.verify();
});
test('loadFailed', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addStartProvisionalLoadEvent(
model, {start: 0, end: 10});
chrome_test_utils.addFailProvisionalLoadEvent(
model, {start: 11, end: 20});
};
verifier.expectedIRs = [
{title: 'Load', name: 'Failed', start: 0, end: 20, eventCount: 2}
];
verifier.verify();
});
test('loadStartup', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addRenderingEvent(model, {start: 2, end: 3});
chrome_test_utils.addCreateThreadsEvent(model, {start: 5, end: 10});
// Throw an second one in there, just to try to confuse the algo.
chrome_test_utils.addCreateThreadsEvent(model, {start: 25, end: 30});
chrome_test_utils.addFrameEvent(model, {start: 11, end: 20});
};
verifier.expectedIRs = [
{title: 'Load', name: 'Startup', start: 2, end: 20, eventCount: 2},
{title: 'Idle', start: 20, end: 30, eventCount: 0}
];
verifier.verify();
});
test('totalIdle', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addFrameEvent(model, {start: 0, end: 10});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 10, eventCount: 0}
];
verifier.verify();
});
test('multipleIdles', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addFrameEvent(model, {start: 0, end: 1});
chrome_test_utils.addCommitLoadEvent(model, {
start: 1, end: 2, args: {id: 1}});
chrome_test_utils.addFinishLoadEvent(
model, {start: 2.1, end: 2.4, args: {id: 1}});
chrome_test_utils.addLoadFinishedEvent(
model, {start: 2.2, end: 2.3});
chrome_test_utils.addFrameEvent(model, {start: 3, end: 4});
chrome_test_utils.addCreateChildFrameEvent(model, {
start: 4, end: 5, args: {id: 1, child: 2}});
chrome_test_utils.addCommitLoadEvent(model, {
start: 5, end: 6, args: {id: 2}});
chrome_test_utils.addFrameEvent(model, {start: 7, end: 8});
chrome_test_utils.addCreateChildFrameEvent(model, {
start: 8, end: 9, args: {id: 1, child: 3}});
chrome_test_utils.addCommitLoadEvent(model, {
start: 9, end: 10, args: {id: 3}});
chrome_test_utils.addFrameEvent(model, {start: 11, end: 12});
chrome_test_utils.addFrameEvent(model, {start: 12, end: 13});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 1, eventCount: 0},
{title: 'Load', name: 'Succeeded', start: 1, end: 4, eventCount: 4},
{title: 'Idle', start: 4, end: 13, eventCount: 0}
];
verifier.verify();
});
test('touchStartTouchEndTap', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_START,
{start: 0, end: 10});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_END,
{start: 200, end: 210});
};
verifier.expectedIRs = [
{title: 'Response', name: 'Touch', start: 0, end: 210, eventCount: 2}
];
verifier.verify();
});
test('touchMoveResponseAnimation', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_START,
{start: 0, end: 10});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 50, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 70, end: 150});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_END,
{start: 200, end: 300});
};
verifier.expectedIRs = [
{title: 'Response', name: 'Touch', start: 0, end: 100, eventCount: 2},
{title: 'Animation', name: 'Touch', start: 100, end: 300, eventCount: 2}
];
verifier.verify();
});
test('tapEvents', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP,
{start: 0, end: 50});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_DOWN,
{start: 300, end: 310});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP,
{start: 320, end: 350});
};
verifier.expectedIRs = [
{title: 'Response', name: 'Tap', start: 0, end: 50, eventCount: 1},
{title: 'Idle', start: 50, end: 300, eventCount: 0},
{title: 'Response', name: 'Tap', start: 300, end: 350, eventCount: 2}
];
verifier.verify();
});
test('tapAndTapCancelResponses', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_DOWN,
{start: 0, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_CANCEL,
{start: 300, end: 350});
};
verifier.expectedIRs = [
{title: 'Response', name: 'Tap', start: 0, end: 100, eventCount: 1},
{title: 'Idle', start: 100, end: 300, eventCount: 0},
{title: 'Response', name: 'Tap', start: 300, end: 350, eventCount: 1}
];
verifier.verify();
});
test('tapCancelResponse', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_DOWN,
{start: 0, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_CANCEL,
{start: 150, end: 200});
};
verifier.expectedIRs = [
{title: 'Response', name: 'Tap', start: 0, end: 200, eventCount: 2}
];
verifier.verify();
});
test('pinchResponseAnimation', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addFrameEvent(model, {start: 0, end: 10});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_BEGIN,
{start: 100, end: 150});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE,
{start: 130, end: 160});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE,
{start: 140, end: 200});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE,
{start: 150, end: 205});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE,
{start: 210, end: 220});
// pause > 200ms
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE,
{start: 421, end: 470});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_END,
{start: 460, end: 500});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 100, eventCount: 0},
{title: 'Response', name: 'Pinch', start: 100, end: 160, eventCount: 2},
{title: 'Animation', name: 'Pinch', start: 160, end: 220, eventCount: 3},
{title: 'Idle', start: 220, end: 421, eventCount: 0},
{title: 'Animation', name: 'Pinch', start: 421, end: 500, eventCount: 2}
];
verifier.verify();
});
test('tapThenScroll', function() {
// measurmt-traces/mobile/google_io_instrument_strumming.json
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_START,
{start: 0, end: 20});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_END,
{start: 40, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_START,
{start: 50, end: 120});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 80, end: 150});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 180, end: 200});
};
verifier.expectedIRs = [
{title: 'Response', name: 'Touch', start: 0, end: 100, eventCount: 2},
{title: 'Response', name: 'Touch', start: 50, end: 150, eventCount: 2},
{title: 'Animation', name: 'Touch', start: 150, end: 200, eventCount: 1}
];
verifier.verify();
});
test('pinchFlingTapTouchEventsOverlap', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addFrameEvent(model, {start: 0, end: 10});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_START,
{start: 20, end: 50});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_DOWN,
{start: 20, end: 30});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_CANCEL,
{start: 20, end: 50});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 60, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_START,
{start: 60, end: 110});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_BEGIN,
{start: 60, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_CANCEL,
{start: 65, end: 75});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 70, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE,
{start: 70, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 75, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 80, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 85, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN,
{start: 75, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 150, end: 200});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 150, end: 200});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 180, end: 210});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_END,
{start: 190, end: 210});
chrome_test_utils.addFrameEvent(model, {start: 215, end: 220});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 20, eventCount: 0},
{title: 'Response', name: 'Pinch,Scroll,Tap,Touch', start: 20, end: 110,
eventCount: 9},
{title: 'Animation', name: 'Scroll,Touch', start: 110, end: 210,
eventCount: 6},
{title: 'Animation', name: 'Fling', start: 180, end: 220, eventCount: 1}
];
verifier.verify();
});
test('scrollThenFling', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 0, end: 40});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 50, end: 100});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 80, end: 100});
chrome_test_utils.addFrameEvent(model, {start: 190, end: 200});
};
verifier.expectedIRs = [
{title: 'Animation', name: 'Scroll', start: 0, end: 100, eventCount: 2},
{title: 'Animation', name: 'Fling', start: 80, end: 200, eventCount: 1}
];
verifier.verify();
});
/*
This test was generated from
/test_data/measurmt-traces/mobile/fling_HN_to_rest.json
*/
test('flingHNToRest', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addEvent(model.browserMain,
{title: 'model start', start: 0, end: 1});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_START,
{start: 1274, end: 1297});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_DOWN,
{start: 1274, end: 1305});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 1343, end: 1350});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 1359, end: 1366});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP_CANCEL,
{start: 1359, end: 1366});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN,
{start: 1359, end: 1367});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1359, end: 1387});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 1375, end: 1385});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1375, end: 1416});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 1389, end: 1404});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1389, end: 1429});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 1405, end: 1418});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1405, end: 1449});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 1419, end: 1432});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1419, end: 1474});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_END,
{start: 1427, end: 1435});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 1427, end: 1474});
chrome_test_utils.addFlingAnimationEvent(model, {start: 1440, end: 2300});
chrome_test_utils.addEvent(model.browserMain,
{title: 'model end', start: 3184, end: 3185});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 1274, eventCount: 0},
{title: 'Response', name: 'Scroll,Tap,Touch', start: 1274, end: 1387,
eventCount: 6},
{title: 'Animation', name: 'Scroll,Touch', start: 1387, end: 1474,
eventCount: 10},
{title: 'Animation', name: 'Fling', start: 1427, end: 2300,
eventCount: 2},
{title: 'Idle', start: 2300, end: 3185, eventCount: 0}
];
verifier.verify();
});
test('TapResponseOverlappingTouchAnimation', function() {
var verifier = new IRVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 0, end: 10});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 5, end: 15});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE,
{start: 10, end: 20});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP,
{start: 15, end: 100});
};
verifier.expectedIRs = [
{title: 'Response', name: 'Tap,Touch', start: 0, end: 100,
eventCount: 4}
];
verifier.verify();
});
});
</script>