| <!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 audits = tr.e.audits; |
| var IRVerifier = tr.e.rail.IRVerifier; |
| |
| test('empty', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| }; |
| verifier.expectedIRs = [ |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('MouseEventResponses', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| var mouseDown = audits.addInputEvent(model, INPUT_TYPE.MOUSE_DOWN, |
| {start: 0, end: 50, id: '0x100'}); |
| var mouseDownFrame = audits.addFrameEvent(model, |
| {start: 40, end: 50, isTopLevel: true}); |
| model.flowEvents.push(tr.c.test_utils.newFlowEventEx({ |
| id: '0x100', |
| start: 0, |
| end: 40, |
| startSlice: mouseDownFrame, |
| endSlice: mouseDownFrame |
| })); |
| |
| var mouseUp = audits.addInputEvent(model, INPUT_TYPE.MOUSE_UP, |
| {start: 50, end: 100, id: '0x101'}); |
| var mouseUpFrame = audits.addFrameEvent(model, |
| {start: 240, end: 250, isTopLevel: true}); |
| model.flowEvents.push(tr.c.test_utils.newFlowEventEx({ |
| id: '0x101', |
| start: 50, |
| end: 240, |
| startSlice: mouseUpFrame, |
| endSlice: mouseUpFrame |
| })); |
| |
| var mouseMove = audits.addInputEvent(model, INPUT_TYPE.MOUSE_MOVE, |
| {start: 200, end: 250, id: '0x102'}); |
| var mouseMoveFrame = audits.addFrameEvent(model, |
| {start: 240, end: 250, isTopLevel: true}); |
| model.flowEvents.push(tr.c.test_utils.newFlowEventEx({ |
| id: '0x102', |
| start: 200, |
| end: 240, |
| startSlice: mouseMoveFrame, |
| endSlice: mouseMoveFrame |
| })); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 50, eventCount: 3}, |
| {title: 'Response', start: 50, end: 100, eventCount: 3}, |
| {title: 'Idle', start: 100, end: 200, eventCount: 0}, |
| {title: 'Response', start: 200, end: 250, eventCount: 3} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('MouseEventsIgnored', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_MOVE, |
| {start: 0, end: 50}); |
| audits.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.test_utils.newSliceEx( |
| {title: 'model start', start: 0, end: 1, type: tr.model.ThreadSlice}); |
| start.isTopLevel = true; |
| model.browserMain.sliceGroup.pushSlice(start); |
| |
| var end = tr.c.test_utils.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('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) { |
| audits.addFrameEvent(model, {start: 0, end: 10}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_START, |
| {start: 919, end: 998}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_CANCEL, |
| {start: 919, end: 1001}); |
| audits.addInputEvent(model, INPUT_TYPE.TAP_DOWN, |
| {start: 919, end: 1001}); |
| audits.addInputEvent(model, INPUT_TYPE.TAP_CANCEL, |
| {start: 974, end: 1020}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN, |
| {start: 974, end: 1020}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 974, end: 1040}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 974, end: 1054}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 990, end: 1021}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 990, end: 1052}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 1006, end: 1021}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 1022, end: 1036}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 1022, end: 1052}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 1038, end: 1049}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 1038, end: 1068}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_END, |
| {start: 1046, end: 1050}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_START, |
| {start: 1046, end: 1077}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_START, |
| {start: 1432, end: 2238}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_CANCEL, |
| {start: 1432, end: 2241}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 1516, end: 2605}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN, |
| {start: 1532, end: 2274}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 1532, end: 2294}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 1549, end: 2310}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_END, |
| {start: 1627, end: 2275}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_START, |
| {start: 1627, end: 2310}); |
| audits.addFrameEvent(model, {start: 2990, end: 3000}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Idle', start: 0, end: 919, eventCount: 0}, |
| {title: 'Response', start: 919, end: 1054, eventCount: 6}, |
| {title: 'Animation', start: 1054, end: 1068, eventCount: 8}, |
| {title: 'Animation', start: 1054, end: 1432, eventCount: 2}, |
| {title: 'Response', start: 1432, end: 2605, eventCount: 5}, |
| {title: 'Animation', start: 1549, end: 2310, eventCount: 1}, |
| {title: 'Animation', start: 2605, end: 3000, eventCount: 1} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('keyboardEvents', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.KEY_DOWN_RAW, |
| {start: 0, end: 45}); |
| audits.addInputEvent(model, INPUT_TYPE.CHAR, |
| {start: 10, end: 50}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 50, eventCount: 2} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('mouseResponses', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.CLICK, |
| {start: 0, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.CONTEXT_MENU, |
| {start: 200, end: 300}); |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL, |
| {start: 400, end: 500}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 100, eventCount: 1}, |
| {title: 'Idle', start: 100, end: 200, eventCount: 0}, |
| {title: 'Response', start: 200, end: 300, eventCount: 1}, |
| {title: 'Idle', start: 300, end: 400, eventCount: 0}, |
| {title: 'Response', start: 400, end: 500, eventCount: 1} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('mouseWheelAnimation', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL, |
| {start: 0, end: 20}); |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL, |
| {start: 16, end: 36}); |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL, |
| {start: 55, end: 75}); |
| |
| // This threshold uses both events' start times, not end...start. |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL, |
| {start: 100, end: 150}); |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL, |
| {start: 141, end: 191}); |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_WHEEL, |
| {start: 182, end: 200}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 20, eventCount: 1}, |
| {title: 'Animation', start: 20, end: 75, eventCount: 2}, |
| {title: 'Idle', start: 75, end: 100, eventCount: 0}, |
| {title: 'Response', start: 100, end: 150, eventCount: 1}, |
| {title: 'Response', start: 141, end: 191, eventCount: 1}, |
| {title: 'Response', start: 182, end: 200, eventCount: 1} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('mouseDownUpResponse', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_DOWN, |
| {start: 0, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_UP, |
| {start: 200, end: 210}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Idle', start: 0, end: 200, eventCount: 0}, |
| {title: 'Response', start: 200, end: 210, eventCount: 2} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('ignoreLoneMouseMoves', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.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) { |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_DOWN, |
| {start: 0, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_MOVE, |
| {start: 200, end: 215}); |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_MOVE, |
| {start: 210, end: 220}); |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_MOVE, |
| {start: 221, end: 240}); |
| audits.addInputEvent(model, INPUT_TYPE.MOUSE_UP, |
| {start: 400, end: 410}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Idle', start: 0, end: 200, eventCount: 0}, |
| {title: 'Response', start: 200, end: 215, eventCount: 2}, |
| {title: 'Animation', start: 215, end: 410, eventCount: 3} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('twoScrollsNoFling', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN, |
| {start: 0, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 20, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 40, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 60, end: 150}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 70, end: 150}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_END, |
| {start: 80, end: 150}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN, |
| {start: 300, end: 400}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 320, end: 400}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 330, end: 450}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 340, end: 450}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 350, end: 500}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_END, |
| {start: 360, end: 500}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 100, eventCount: 2}, |
| {title: 'Animation', start: 100, end: 150, eventCount: 4}, |
| {title: 'Idle', start: 150, end: 300, eventCount: 0}, |
| {title: 'Response', start: 300, end: 400, eventCount: 2}, |
| {title: 'Animation', 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) { |
| audits.addEvent(model.rendererMain, { |
| title: 'Animation', start: 0, end: 100}); |
| audits.addEvent(model.rendererMain, { |
| title: 'Animation', start: 99, end: 200}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_START, |
| {start: 150, end: 180}); |
| audits.addFrameEvent(model, {start: 290, end: 300}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Animation', start: 0, end: 200, eventCount: 2}, |
| {title: 'Animation', start: 150, end: 300, eventCount: 1} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('flingThatIsntstopped', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.FLING_START, |
| {start: 32, end: 100}); |
| audits.addFlingAnimationEvent(model, {start: 38, end: 200}); |
| audits.addFrameEvent(model, {start: 290, end: 300}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Animation', 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) { |
| audits.addInputEvent(model, INPUT_TYPE.FLING_START, |
| {start: 32, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_CANCEL, |
| {start: 105, end: 150}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Animation', 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) { |
| audits.addInputEvent(model, INPUT_TYPE.FLING_START, |
| {start: 0, end: 30}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_START, |
| {start: 100, end: 130}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_CANCEL, |
| {start: 100, end: 130}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 110, end: 140}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 170, end: 180}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_END, |
| {start: 200, end: 210}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_START, |
| {start: 200, end: 220}); |
| audits.addFrameEvent(model, {start: 230, end: 240}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Animation', start: 0, end: 100, eventCount: 2}, |
| {title: 'Response', start: 100, end: 140, eventCount: 2}, |
| {title: 'Animation', start: 140, end: 210, eventCount: 2}, |
| {title: 'Animation', start: 200, end: 240, eventCount: 1} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('Load', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addCommitLoadEvent(model, {start: 0, end: 10}); |
| audits.addFrameEvent(model, {start: 11, end: 20}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Load', name: 'Succeeded', start: 0, end: 20, eventCount: 2} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('LoadFailed', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addStartProvisionalLoadEvent(model, {start: 0, end: 10}); |
| audits.addFailProvisionalLoadEvent(model, {start: 11, end: 20}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Load', name: 'Failed', start: 0, end: 20, eventCount: 2} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('LoadMainRunner', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addMainRunnerEvent(model, {start: 0, end: 10}); |
| audits.addFrameEvent(model, {start: 11, end: 20}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Load', name: 'Startup', start: 0, end: 20, eventCount: 2} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('totalIdle', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.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) { |
| audits.addFrameEvent(model, {start: 0, end: 1}); |
| audits.addCommitLoadEvent(model, {start: 1, end: 2}); |
| audits.addFrameEvent(model, {start: 3, end: 4}); |
| audits.addCommitLoadEvent(model, {start: 5, end: 6}); |
| audits.addFrameEvent(model, {start: 7, end: 8}); |
| audits.addCommitLoadEvent(model, {start: 9, end: 10}); |
| audits.addFrameEvent(model, {start: 11, end: 12}); |
| audits.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: 2}, |
| {title: 'Idle', start: 4, end: 5, eventCount: 0}, |
| {title: 'Load', name: 'Succeeded', start: 5, end: 8, eventCount: 2}, |
| {title: 'Idle', start: 8, end: 9, eventCount: 0}, |
| {title: 'Load', name: 'Succeeded', start: 9, end: 12, eventCount: 2}, |
| {title: 'Idle', start: 12, end: 13, eventCount: 0} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('TouchStartTouchEndTap', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_START, |
| {start: 0, end: 10}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_END, |
| {start: 200, end: 210}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 210, eventCount: 2} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('TouchMoveResponseAnimation', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_START, |
| {start: 0, end: 10}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 50, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 70, end: 150}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_END, |
| {start: 200, end: 300}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 100, eventCount: 2}, |
| {title: 'Animation', start: 100, end: 300, eventCount: 2} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('TapEvents', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.TAP, |
| {start: 0, end: 50}); |
| audits.addInputEvent(model, INPUT_TYPE.TAP_DOWN, |
| {start: 300, end: 310}); |
| audits.addInputEvent(model, INPUT_TYPE.TAP, |
| {start: 320, end: 350}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 50, eventCount: 1}, |
| {title: 'Idle', start: 50, end: 300, eventCount: 0}, |
| {title: 'Response', start: 300, end: 350, eventCount: 2} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('TapAndTapCancelResponses', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.TAP_DOWN, |
| {start: 0, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.TAP_CANCEL, |
| {start: 300, end: 350}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 100, eventCount: 1}, |
| {title: 'Idle', start: 100, end: 300, eventCount: 0}, |
| {title: 'Response', start: 300, end: 350, eventCount: 1} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('TapCancelResponse', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.TAP_DOWN, |
| {start: 0, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.TAP_CANCEL, |
| {start: 150, end: 200}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 200, eventCount: 2} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('PinchResponseAnimation', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addFrameEvent(model, {start: 0, end: 10}); |
| audits.addInputEvent(model, INPUT_TYPE.PINCH_BEGIN, |
| {start: 100, end: 150}); |
| audits.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE, |
| {start: 130, end: 160}); |
| audits.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE, |
| {start: 140, end: 200}); |
| audits.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE, |
| {start: 150, end: 205}); |
| audits.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE, |
| {start: 210, end: 220}); |
| // pause > 200ms |
| audits.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE, |
| {start: 421, end: 470}); |
| audits.addInputEvent(model, INPUT_TYPE.PINCH_END, |
| {start: 460, end: 500}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Idle', start: 0, end: 100, eventCount: 0}, |
| {title: 'Response', start: 100, end: 160, eventCount: 2}, |
| {title: 'Animation', start: 160, end: 220, eventCount: 3}, |
| {title: 'Idle', start: 220, end: 421, eventCount: 0}, |
| {title: 'Animation', 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) { |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_START, |
| {start: 0, end: 20}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_END, |
| {start: 40, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_START, |
| {start: 50, end: 120}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 80, end: 150}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 180, end: 200}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Response', start: 0, end: 100, eventCount: 2}, |
| {title: 'Response', start: 50, end: 150, eventCount: 2}, |
| {title: 'Animation', start: 150, end: 200, eventCount: 1} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('PinchFlingTapTouchEventsOverlap', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addFrameEvent(model, {start: 0, end: 10}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_START, |
| {start: 20, end: 50}); |
| audits.addInputEvent(model, INPUT_TYPE.TAP_DOWN, |
| {start: 20, end: 30}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_CANCEL, |
| {start: 20, end: 50}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 60, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_START, |
| {start: 60, end: 110}); |
| audits.addInputEvent(model, INPUT_TYPE.PINCH_BEGIN, |
| {start: 60, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.TAP_CANCEL, |
| {start: 65, end: 75}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 70, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.PINCH_UPDATE, |
| {start: 70, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 75, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 80, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 85, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN, |
| {start: 75, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 150, end: 200}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 150, end: 200}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_START, |
| {start: 180, end: 210}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_END, |
| {start: 190, end: 210}); |
| audits.addFrameEvent(model, {start: 215, end: 220}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Idle', start: 0, end: 20, eventCount: 0}, |
| {title: 'Response', start: 20, end: 110, eventCount: 9}, |
| {title: 'Animation', start: 110, end: 210, eventCount: 6}, |
| {title: 'Animation', start: 180, end: 220, eventCount: 1} |
| ]; |
| verifier.verify(); |
| }); |
| |
| test('ScrollThenFling', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 0, end: 40}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 50, end: 100}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_START, |
| {start: 80, end: 100}); |
| audits.addFrameEvent(model, {start: 190, end: 200}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Animation', start: 0, end: 100, eventCount: 2}, |
| {title: 'Animation', start: 80, end: 200, eventCount: 1} |
| ]; |
| verifier.verify(); |
| }); |
| |
| /* |
| This test was generated from |
| /test_data/measurmt-traces/mobile/fling_HN_to_rest.json |
| */ |
| test('fling_HN_to_rest', function() { |
| var verifier = new IRVerifier(); |
| verifier.customizeModelCallback = function(model) { |
| audits.addEvent(model.browserMain, |
| {title: 'model start', start: 0, end: 1}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_START, |
| {start: 1274, end: 1297}); |
| audits.addInputEvent(model, INPUT_TYPE.TAP_DOWN, |
| {start: 1274, end: 1305}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 1343, end: 1350}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 1359, end: 1366}); |
| audits.addInputEvent(model, INPUT_TYPE.TAP_CANCEL, |
| {start: 1359, end: 1366}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_BEGIN, |
| {start: 1359, end: 1367}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 1359, end: 1387}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 1375, end: 1385}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 1375, end: 1416}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 1389, end: 1404}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 1389, end: 1429}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 1405, end: 1418}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 1405, end: 1449}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_MOVE, |
| {start: 1419, end: 1432}); |
| audits.addInputEvent(model, INPUT_TYPE.SCROLL_UPDATE, |
| {start: 1419, end: 1474}); |
| audits.addInputEvent(model, INPUT_TYPE.TOUCH_END, |
| {start: 1427, end: 1435}); |
| audits.addInputEvent(model, INPUT_TYPE.FLING_START, |
| {start: 1427, end: 1474}); |
| audits.addFlingAnimationEvent(model, {start: 1440, end: 2300}); |
| audits.addEvent(model.browserMain, |
| {title: 'model end', start: 3184, end: 3185}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Idle', start: 0, end: 1274, eventCount: 0}, |
| {title: 'Response', start: 1274, end: 1387, eventCount: 6}, |
| {title: 'Animation', start: 1387, end: 1474, eventCount: 10}, |
| {title: 'Animation', start: 1427, end: 2300, eventCount: 2}, |
| {title: 'Idle', start: 2300, end: 3185, eventCount: 0} |
| ]; |
| verifier.verify(); |
| }); |
| }); |
| </script> |