blob: 7fc6ff25095a471acfe3c9d7d9ce70c0ee9a6d24 [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/importer/user_expectation_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 UserExpectationVerifier = tr.importer.UserExpectationVerifier;
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 UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
};
verifier.expectedIRs = [
];
verifier.verify();
});
test('videoExpectations_gapInMiddle', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'VideoPlayback', start: 0, end: 100, isTopLevel: true}));
chrome_test_utils.addFrameEvent(model, {start: 10, end: 20});
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'VideoPlayback', start: 200, end: 300, isTopLevel: true}));
chrome_test_utils.addFrameEvent(model, {start: 210, end: 220});
};
verifier.expectedIRs = [
{title: 'Video Animation', start: 0, end: 100, eventCount: 2},
{title: 'Idle', start: 100, end: 200, eventCount: 0},
{title: 'Video Animation', start: 200, end: 300, eventCount: 2},
];
verifier.verify();
});
test('videoExpectations_overlapping', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'VideoPlayback', start: 0, end: 200, isTopLevel: true}));
chrome_test_utils.addFrameEvent(model, {start: 10, end: 20});
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'VideoPlayback', start: 100, end: 300, isTopLevel: true}));
chrome_test_utils.addFrameEvent(model, {start: 210, end: 220});
};
verifier.expectedIRs = [
{title: 'Video Animation', start: 0, end: 300, eventCount: 4},
];
verifier.verify();
});
test('videoExpectations_oneInTheOther', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'VideoPlayback', start: 0, end: 300, isTopLevel: true}));
chrome_test_utils.addFrameEvent(model, {start: 10, end: 20});
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'VideoPlayback', start: 100, end: 200, isTopLevel: true}));
chrome_test_utils.addFrameEvent(model, {start: 110, end: 120});
};
verifier.expectedIRs = [
{title: 'Video Animation', start: 0, end: 300, eventCount: 4},
];
verifier.verify();
});
test('slowMouseMoveResponses', function() {
var verifier = new UserExpectationVerifier();
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: 'Mouse Response', start: 10, end: 20, eventCount: 4},
{title: 'Idle', start: 20, end: 70, eventCount: 0},
{title: 'Mouse Response', start: 70, end: 80, eventCount: 3},
{title: 'Idle', start: 80, end: 130, eventCount: 0},
{title: 'Mouse Response', start: 130, end: 140, eventCount: 3}
];
verifier.verify();
});
test('mouseEventResponses', function() {
var verifier = new UserExpectationVerifier();
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: 'Mouse Response', start: 0, end: 50, eventCount: 3},
{title: 'Mouse Response', start: 50, end: 100, eventCount: 3},
{title: 'Idle', start: 100, end: 200, eventCount: 0},
{title: 'Mouse Response', start: 200, end: 250, eventCount: 3}
];
verifier.verify();
});
test('mouseEventsIgnored', function() {
var verifier = new UserExpectationVerifier();
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 UserExpectationVerifier();
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('stillLoading', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addFrameEvent(model, {start: 0, end: 10});
chrome_test_utils.addNavigationStartEvent(model, {start: 10});
chrome_test_utils.addFrameEvent(model, {start: 19, end: 20});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 10, eventCount: 1},
{title: 'Successful Load', start: 10, end: 20, eventCount: 1}
];
verifier.verify();
});
test('overlappingIdleAndLoadCollectUnassociatedEvents', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addFrameEvent(model, {start: 0, end: 10});
chrome_test_utils.addNavigationStartEvent(model, {start: 10});
chrome_test_utils.addFirstContentfulPaintEvent(model, {start: 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: 4},
{title: 'Successful Load', start: 10, end: 30, eventCount: 0},
{title: 'Idle', start: 30, end: 40, eventCount: 2}
];
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 UserExpectationVerifier();
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.addFrameEvent(model,
{start: 1039, end: 1040, isTopLevel: true});
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.addFrameEvent(model,
{start: 1051, end: 1052, isTopLevel: true});
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.addFrameEvent(model,
{start: 1067, end: 1068, isTopLevel: true});
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.addFrameEvent(model,
{start: 2293, end: 2294, isTopLevel: true});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1549, end: 2310});
chrome_test_utils.addFrameEvent(model,
{start: 2309, end: 2310, isTopLevel: true});
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: 1},
{title: 'Scroll,Tap,Touch Response', start: 919, end: 1054,
eventCount: 6, isAnimationBegin: true},
{title: 'Scroll,Touch Animation', start: 1054, end: 1068,
eventCount: 11},
{title: 'Fling Animation', start: 1054, end: 1432,
eventCount: 4},
{title: 'Scroll,Touch Response', start: 1432, end: 2605,
eventCount: 5, isAnimationBegin: true},
{title: 'Scroll Animation', start: 1549, end: 2310,
eventCount: 3},
{title: 'Fling Animation', start: 2605, end: 3000,
eventCount: 4}
];
verifier.verify();
});
test('keyboardEvents', function() {
var verifier = new UserExpectationVerifier();
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: 'Keyboard Response', start: 0, end: 50, eventCount: 2}
];
verifier.verify();
});
test('mouseResponses', function() {
var verifier = new UserExpectationVerifier();
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: 'Mouse Response', start: 0, end: 100, eventCount: 1},
{title: 'Idle', start: 100, end: 200, eventCount: 0},
{title: 'Mouse Response', start: 200, end: 300, eventCount: 1},
{title: 'Idle', start: 300, end: 400, eventCount: 0},
{title: 'MouseWheel Response', start: 400, end: 500,
eventCount: 1}
];
verifier.verify();
});
test('mouseWheelAnimation', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 0, end: 20});
chrome_test_utils.addFrameEvent(model,
{start: 19, end: 20, isTopLevel: true});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 16, end: 36});
chrome_test_utils.addFrameEvent(model,
{start: 35, end: 36, isTopLevel: true});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 55, end: 75});
chrome_test_utils.addFrameEvent(model,
{start: 74, end: 75, isTopLevel: true});
// 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.addFrameEvent(model,
{start: 149, end: 150, isTopLevel: true});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 141, end: 191});
chrome_test_utils.addFrameEvent(model,
{start: 190, end: 191, isTopLevel: true});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL,
{start: 182, end: 200});
chrome_test_utils.addFrameEvent(model,
{start: 199, end: 200, isTopLevel: true});
};
verifier.expectedIRs = [
{title: 'MouseWheel Response', start: 0, end: 20, eventCount: 1},
{title: 'MouseWheel Animation', start: 20, end: 75,
eventCount: 5},
{title: 'Idle', start: 75, end: 100, eventCount: 0},
{title: 'MouseWheel Response', start: 100, end: 150,
eventCount: 1},
{title: 'MouseWheel Response', start: 141, end: 191,
eventCount: 1},
{title: 'MouseWheel Response', start: 182, end: 200,
eventCount: 1}
];
verifier.verify();
});
test('mouseDownUpResponse', function() {
var verifier = new UserExpectationVerifier();
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: 'Mouse Response', start: 200, end: 210, eventCount: 2}
];
verifier.verify();
});
test('ignoreLoneMouseMoves', function() {
var verifier = new UserExpectationVerifier();
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 UserExpectationVerifier();
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: 'Mouse Response', start: 200, end: 215, eventCount: 4},
{title: 'Mouse Animation', start: 215, end: 240, eventCount: 6}
];
verifier.verify();
});
test('twoScrollsNoFling', function() {
var verifier = new UserExpectationVerifier();
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.addFrameEvent(model, {start: 149, 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.addFrameEvent(model, {start: 499, end: 500});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_END,
{start: 360, end: 500});
};
verifier.expectedIRs = [
{title: 'Scroll Response', start: 0, end: 100, eventCount: 2,
isAnimationBegin: true},
{title: 'Scroll Animation', start: 100, end: 150, eventCount: 5},
{title: 'Idle', start: 150, end: 300, eventCount: 0},
{title: 'Scroll Response', start: 300, end: 400, eventCount: 2,
isAnimationBegin: true},
{title: 'Scroll Animation', start: 400, end: 500, eventCount: 5}
];
verifier.verify();
});
test('webGLAnimations_oneAnimation', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'DrawingBuffer::prepareMailbox', start: 0, end: 2}));
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 18, end: 19});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 20, end: 22});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 38, end: 39});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 40, end: 42});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 58, end: 59});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 60, end: 62});
};
verifier.expectedIRs = [
{title: 'WebGL Animation', start: 0, end: 62, eventCount: 4},
];
verifier.verify();
});
test('webGLAnimations_twoAnimations', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'DrawingBuffer::prepareMailbox', start: 0, end: 2}));
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 18, end: 19});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 20, end: 22});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 38, end: 39});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 40, end: 42});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 58, end: 59});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 60, end: 62});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 218, end: 19});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 220, end: 222});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 238, end: 39});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 240, end: 242});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 258, end: 59});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 260, end: 262});
};
verifier.expectedIRs = [
{title: 'WebGL Animation', start: 0, end: 62, eventCount: 4},
{title: 'Idle', start: 62, end: 220, eventCount: 0},
{title: 'WebGL Animation', start: 220, end: 262, eventCount: 3}
];
verifier.verify();
});
test('webGLAnimations_oneWithAnimationEventsOneWithout', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'DrawingBuffer::prepareMailbox', start: 0, end: 2}));
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 18, end: 19});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 20, end: 22});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 38, end: 39});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 40, end: 42});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 58, end: 59});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 60, end: 62});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 220, end: 222});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 240, end: 242});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 260, end: 262});
};
verifier.expectedIRs = [
{title: 'WebGL Animation', start: 0, end: 62, eventCount: 4},
{title: 'Idle', start: 62, end: 262, eventCount: 0},
];
verifier.verify();
});
test('webGLAnimations_noAnimationEvents', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'DrawingBuffer::prepareMailbox', start: 0, end: 2}));
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 20, end: 22});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 40, end: 42});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 60, end: 62});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 220, end: 222});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 240, end: 242});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'DrawingBuffer::prepareMailbox', start: 260, end: 262});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 262, eventCount: 0},
];
verifier.verify();
});
test('webGLAnimations_animationEventsOnly', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'PageAnimator::serviceScriptedAnimations',
start: 0, end: 2}));
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 20, end: 22});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 40, end: 42});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 42, eventCount: 0},
];
verifier.verify();
});
test('webGLAnimations_oneEvent', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'DrawingBuffer::prepareMailbox', start: 0, end: 2}));
chrome_test_utils.addEvent(model.rendererMain, {
title: 'PageAnimator::serviceScriptedAnimations',
start: 4, end: 6});
};
verifier.expectedIRs = [
{title: 'WebGL Animation', start: 0, end: 2, eventCount: 1},
{title: 'Idle', start: 2, end: 6, eventCount: 0},
];
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 UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
model.rendererMain.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx(
{title: 'Animation', start: 0, end: 130, isTopLevel: true}));
chrome_test_utils.addFrameEvent(model, {start: 10, end: 20});
chrome_test_utils.addEvent(model.rendererMain, {
title: 'Animation', start: 131, end: 200, isTopLevel: true});
chrome_test_utils.addFrameEvent(model, {start: 150, end: 160});
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: 'CSS Animation', start: 0, end: 200, eventCount: 4},
{title: 'Fling Animation', start: 150, end: 300, eventCount: 3}
];
verifier.verify();
});
test('cssAnimationStatesRunningAtEnd', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
// If a top-level Animation async slice has state-change instant
// events and the last one is a "running" event, then it will run
// to the end of the top level event.
var animationA = tr.c.TestUtils.newAsyncSliceEx(
{title: 'Animation', start: 0, end: 500, isTopLevel: true});
animationA.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 100, args: {data: {state: 'running'}}}));
animationA.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 200, args: {data: {state: 'idle'}}}));
animationA.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 300, args: {data: {state: 'running'}}}));
model.rendererMain.asyncSliceGroup.push(animationA);
chrome_test_utils.addFrameEvent(model, {start: 50, end: 60});
chrome_test_utils.addFrameEvent(model, {start: 150, end: 160});
chrome_test_utils.addFrameEvent(model, {start: 250, end: 260});
chrome_test_utils.addFrameEvent(model, {start: 350, end: 360});
chrome_test_utils.addFrameEvent(model, {start: 450, end: 460});
// We include a frame event off the end of the top level animation slice
// so we can test that it correctly stops the AnimationExpectation
// at the end of the top-level event, not tne end of the whole trace,
chrome_test_utils.addFrameEvent(model, {start: 1050, end: 1060});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 100, eventCount: 1},
{title: 'CSS Animation', start: 100, end: 200, eventCount: 5},
{title: 'Idle', start: 200, end: 300, eventCount: 1},
{title: 'CSS Animation', start: 300, end: 500, eventCount: 6},
{title: 'Idle', start: 500, end: 1060, eventCount: 1},
];
verifier.verify();
});
test('cssAnimationStates', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
// If a top-level Animation async slice does not have state-change instant
// subSlices, then assume that the animation was running throughout the
// async slice.
chrome_test_utils.addEvent(model.rendererMain, {
title: 'Animation', start: 181, end: 250, isTopLevel: true});
chrome_test_utils.addFrameEvent(model, {start: 200, end: 240});
// Animation ranges should be merged if there is less than 32ms dead time
// between them.
// If a top-level Animation async slice has state-change instant events,
// then run a state machine to find the time ranges when the animation was
// actually running.
// This animation was running from 10-40 and 50-60.
var animationA = tr.c.TestUtils.newAsyncSliceEx(
{title: 'Animation', start: 50, end: 500, isTopLevel: true});
animationA.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 71, args: {data: {state: 'running'}}}));
animationA.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 104, args: {data: {state: 'pending'}}}));
animationA.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 137, args: {data: {state: 'running'}}}));
animationA.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 150, args: {data: {state: 'paused'}}}));
animationA.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 281, args: {data: {state: 'running'}}}));
animationA.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 350, args: {data: {state: 'idle'}}}));
model.rendererMain.asyncSliceGroup.push(animationA);
chrome_test_utils.addFrameEvent(model, {start: 80, end: 90});
chrome_test_utils.addFrameEvent(model, {start: 290, end: 300});
// An animation without a frame event isn't really an animation.
var animationC = tr.c.TestUtils.newAsyncSliceEx(
{title: 'Animation', start: 350, end: 382, isTopLevel: true});
model.rendererMain.asyncSliceGroup.push(animationC);
animationA.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 350, args: {data: {state: 'idle'}}}));
// This animation was running from model.bounds.min-50 and
// 70-model.bounds.max.
var animationB = tr.c.TestUtils.newAsyncSliceEx(
{title: 'Animation', start: 0, end: 500, isTopLevel: true});
animationB.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 40, args: {data: {state: 'finished'}}}));
animationB.subSlices.push(tr.c.TestUtils.newInstantEvent(
{title: 'Animation', start: 382, args: {data: {state: 'running'}}}));
model.rendererMain.asyncSliceGroup.push(animationB);
chrome_test_utils.addFrameEvent(model, {start: 10, end: 20});
chrome_test_utils.addFrameEvent(model, {start: 390, end: 400});
};
verifier.expectedIRs = [
{title: 'CSS Animation', start: 0, end: 350, eventCount: 16},
{title: 'Idle', start: 350, end: 382, eventCount: 0},
{title: 'CSS Animation', start: 382, end: 500, eventCount: 4},
];
verifier.verify();
});
test('flingThatIsntstopped', function() {
var verifier = new UserExpectationVerifier();
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: 199, end: 200});
chrome_test_utils.addFrameEvent(model, {start: 290, end: 300});
};
verifier.expectedIRs = [
{title: 'Fling Animation', start: 32, end: 200, eventCount: 3},
{title: 'Idle', start: 200, end: 300, eventCount: 1}
];
verifier.verify();
});
test('flingThatIsStopped', function() {
var verifier = new UserExpectationVerifier();
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});
chrome_test_utils.addFrameEvent(model, {start: 104, end: 105});
chrome_test_utils.addFrameEvent(model, {start: 149, end: 150});
};
verifier.expectedIRs = [
{title: 'Fling Animation', start: 32, end: 105, eventCount: 3},
{title: 'Idle', start: 105, end: 150, eventCount: 1}
];
verifier.verify();
});
test('flingFling', function() {
// measurmt-traces/mobile/facebook_obama_scroll_dialog_box.html
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 0, end: 30});
chrome_test_utils.addFrameEvent(model, {start: 40, end: 41});
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.addFrameEvent(model, {start: 150, end: 151});
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: 'Fling Animation', start: 0, end: 100, eventCount: 3},
{title: 'Touch Response', start: 100, end: 140, eventCount: 2,
isAnimationBegin: true},
{title: 'Touch Animation', start: 140, end: 210, eventCount: 3},
{title: 'Fling Animation', start: 200, end: 240, eventCount: 2}
];
verifier.verify();
});
test('load', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addNavigationStartEvent(model, {start: 0});
chrome_test_utils.addFirstContentfulPaintEvent(model, {start: 20});
};
verifier.expectedIRs = [
{title: 'Successful Load', start: 0, end: 20, eventCount: 0}
];
verifier.verify();
});
test('loadStartup', function() {
var verifier = new UserExpectationVerifier();
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: 'Startup', start: 2, end: 20, eventCount: 3},
{title: 'Idle', start: 20, end: 30, eventCount: 1}
];
verifier.verify();
});
test('totalIdle', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addFrameEvent(model, {start: 0, end: 10});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 10, eventCount: 1}
];
verifier.verify();
});
test('multipleIdles', function() {
var verifier = new UserExpectationVerifier();
verifier.customizeModelCallback = function(model) {
chrome_test_utils.addFrameEvent(model, {start: 0, end: 1});
chrome_test_utils.addNavigationStartEvent(model, {start: 1});
chrome_test_utils.addFirstContentfulPaintEvent(model, {start: 4});
chrome_test_utils.addFrameEvent(model, {start: 12, end: 13});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 1, eventCount: 1},
{title: 'Successful Load', start: 1, end: 4, eventCount: 0},
{title: 'Idle', start: 4, end: 13, eventCount: 1}
];
verifier.verify();
});
test('touchStartTouchEndTap', function() {
var verifier = new UserExpectationVerifier();
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: 'Touch Response', start: 0, end: 210, eventCount: 2,
isAnimationBegin: true}
];
verifier.verify();
});
test('touchMoveResponseAnimation', function() {
var verifier = new UserExpectationVerifier();
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});
chrome_test_utils.addFrameEvent(model, {start: 299, end: 300});
};
verifier.expectedIRs = [
{title: 'Touch Response', start: 0, end: 100, eventCount: 2,
isAnimationBegin: true},
{title: 'Touch Animation', start: 100, end: 300, eventCount: 3}
];
verifier.verify();
});
test('tapEvents', function() {
var verifier = new UserExpectationVerifier();
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: 'Tap Response', start: 0, end: 50, eventCount: 1},
{title: 'Idle', start: 50, end: 300, eventCount: 0},
{title: 'Tap Response', start: 300, end: 350, eventCount: 2}
];
verifier.verify();
});
test('tapAndTapCancelResponses', function() {
var verifier = new UserExpectationVerifier();
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: 'Tap Response', start: 0, end: 100, eventCount: 1},
{title: 'Idle', start: 100, end: 300, eventCount: 0},
{title: 'Tap Response', start: 300, end: 350, eventCount: 1}
];
verifier.verify();
});
test('tapCancelResponse', function() {
var verifier = new UserExpectationVerifier();
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: 'Tap Response', start: 0, end: 200, eventCount: 2}
];
verifier.verify();
});
test('pinchResponseAnimation', function() {
var verifier = new UserExpectationVerifier();
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.addFrameEvent(model, {start: 159, end: 160});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE,
{start: 140, end: 200});
chrome_test_utils.addFrameEvent(model, {start: 199, end: 200});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE,
{start: 150, end: 205});
chrome_test_utils.addFrameEvent(model, {start: 204, end: 205});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE,
{start: 210, end: 220});
chrome_test_utils.addFrameEvent(model, {start: 219, end: 220});
// pause > 200ms
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE,
{start: 421, end: 470});
chrome_test_utils.addFrameEvent(model, {start: 469, end: 470});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.PINCH_END,
{start: 460, end: 500});
};
verifier.expectedIRs = [
{title: 'Idle', start: 0, end: 100, eventCount: 1},
{title: 'Pinch Response', start: 100, end: 160, eventCount: 2,
isAnimationBegin: true},
{title: 'Pinch Animation', start: 160, end: 220, eventCount: 7},
{title: 'Idle', start: 220, end: 421, eventCount: 0},
{title: 'Pinch Animation', start: 421, end: 500, eventCount: 3}
];
verifier.verify();
});
test('tapThenScroll', function() {
// measurmt-traces/mobile/google_io_instrument_strumming.json
var verifier = new UserExpectationVerifier();
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});
chrome_test_utils.addFrameEvent(model, {start: 199, end: 200});
};
verifier.expectedIRs = [
{title: 'Touch Response', start: 0, end: 100, eventCount: 2,
isAnimationBegin: true},
{title: 'Touch Response', start: 50, end: 150, eventCount: 2,
isAnimationBegin: true},
{title: 'Touch Animation', start: 150, end: 200, eventCount: 2}
];
verifier.verify();
});
test('pinchFlingTapTouchEventsOverlap', function() {
var verifier = new UserExpectationVerifier();
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.addFrameEvent(model, {start: 199, end: 200});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.FLING_START,
{start: 180, end: 210});
chrome_test_utils.addFrameEvent(model, {start: 209, 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: 1},
{title: 'Pinch,Scroll,Tap,Touch Response', start: 20, end: 110,
eventCount: 9, isAnimationBegin: true},
{title: 'Scroll,Touch Animation', start: 110, end: 210,
eventCount: 7},
{title: 'Fling Animation', start: 180, end: 220, eventCount: 4}
];
verifier.verify();
});
test('scrollThenFling', function() {
var verifier = new UserExpectationVerifier();
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.addFrameEvent(model, {start: 99, 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: 'Scroll Animation', start: 0, end: 100, eventCount: 3},
{title: 'Fling Animation', start: 80, end: 200, eventCount: 3}
];
verifier.verify();
});
/*
This test was generated from
/test_data/measurmt-traces/mobile/fling_HN_to_rest.json
*/
test('flingHNToRest', function() {
var verifier = new UserExpectationVerifier();
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.addFrameEvent(model, {start: 1431, end: 1432});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE,
{start: 1419, end: 1474});
chrome_test_utils.addFrameEvent(model, {start: 1473, 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: 'Scroll,Tap,Touch Response', start: 1274, end: 1387,
eventCount: 6, isAnimationBegin: true},
{title: 'Scroll,Touch Animation', start: 1387, end: 1474,
eventCount: 12},
{title: 'Fling Animation', start: 1427, end: 2300,
eventCount: 4},
{title: 'Idle', start: 2300, end: 3185, eventCount: 0}
];
verifier.verify();
});
test('TapResponseOverlappingTouchAnimation', function() {
var verifier = new UserExpectationVerifier();
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.addFrameEvent(model, {start: 19, end: 20});
chrome_test_utils.addInputEvent(model, INPUT_TYPE.TAP,
{start: 15, end: 100});
};
verifier.expectedIRs = [
{title: 'Tap,Touch Response', start: 0, end: 100,
eventCount: 5}
];
verifier.verify();
});
});
</script>