| <!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('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: 0}, |
| {title: 'Successful Load', start: 10, end: 20, eventCount: 0} |
| ]; |
| 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: 3}, |
| {title: 'Successful Load', start: 10, end: 30, eventCount: 0}, |
| {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 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.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: 'Scroll,Tap,Touch Response', start: 919, end: 1054, |
| eventCount: 6, isAnimationBegin: true}, |
| {title: 'Scroll,Touch Animation', start: 1054, end: 1068, |
| eventCount: 8}, |
| {title: 'Fling Animation', start: 1054, end: 1432, |
| eventCount: 2}, |
| {title: 'Scroll,Touch Response', start: 1432, end: 2605, |
| eventCount: 5, isAnimationBegin: true}, |
| {title: 'Scroll Animation', start: 1549, end: 2310, |
| eventCount: 1}, |
| {title: 'Fling Animation', start: 2605, end: 3000, |
| eventCount: 1} |
| ]; |
| 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.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: 'MouseWheel Response', start: 0, end: 20, eventCount: 1}, |
| {title: 'MouseWheel Animation', start: 20, end: 75, |
| eventCount: 2}, |
| {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.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: 'Scroll Response', start: 0, end: 100, eventCount: 2, |
| isAnimationBegin: true}, |
| {title: 'Scroll Animation', start: 100, end: 150, eventCount: 4}, |
| {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: 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 UserExpectationVerifier(); |
| 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: 'CSS Animation', start: 0, end: 200, eventCount: 2}, |
| {title: 'Fling Animation', start: 150, end: 300, eventCount: 1} |
| ]; |
| 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: 290, end: 300}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Fling Animation', start: 32, end: 200, eventCount: 2}, |
| {title: 'Idle', start: 200, end: 300, eventCount: 0} |
| ]; |
| 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}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Fling 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 UserExpectationVerifier(); |
| 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: 'Fling Animation', start: 0, end: 100, eventCount: 2}, |
| {title: 'Touch Response', start: 100, end: 140, eventCount: 2, |
| isAnimationBegin: true}, |
| {title: 'Touch Animation', start: 140, end: 210, eventCount: 2}, |
| {title: 'Fling Animation', start: 200, end: 240, eventCount: 1} |
| ]; |
| 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 Load', start: 2, end: 20, eventCount: 2}, |
| {title: 'Idle', start: 20, end: 30, eventCount: 0} |
| ]; |
| 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: 0} |
| ]; |
| 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: 0}, |
| {title: 'Successful Load', start: 1, end: 4, eventCount: 0}, |
| {title: 'Idle', start: 4, end: 13, eventCount: 0} |
| ]; |
| 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}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Touch Response', start: 0, end: 100, eventCount: 2, |
| isAnimationBegin: true}, |
| {title: 'Touch Animation', start: 100, end: 300, eventCount: 2} |
| ]; |
| 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.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: 'Pinch Response', start: 100, end: 160, eventCount: 2, |
| isAnimationBegin: true}, |
| {title: 'Pinch Animation', start: 160, end: 220, eventCount: 3}, |
| {title: 'Idle', start: 220, end: 421, eventCount: 0}, |
| {title: 'Pinch Animation', start: 421, end: 500, eventCount: 2} |
| ]; |
| 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}); |
| }; |
| 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: 1} |
| ]; |
| 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.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: 'Pinch,Scroll,Tap,Touch Response', start: 20, end: 110, |
| eventCount: 9, isAnimationBegin: true}, |
| {title: 'Scroll,Touch Animation', start: 110, end: 210, |
| eventCount: 6}, |
| {title: 'Fling Animation', start: 180, end: 220, eventCount: 1} |
| ]; |
| 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.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: 2}, |
| {title: 'Fling 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('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.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: 'Scroll,Tap,Touch Response', start: 1274, end: 1387, |
| eventCount: 6, isAnimationBegin: true}, |
| {title: 'Scroll,Touch Animation', start: 1387, end: 1474, |
| eventCount: 10}, |
| {title: 'Fling Animation', start: 1427, end: 2300, |
| eventCount: 2}, |
| {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.addInputEvent(model, INPUT_TYPE.TAP, |
| {start: 15, end: 100}); |
| }; |
| verifier.expectedIRs = [ |
| {title: 'Tap,Touch Response', start: 0, end: 100, |
| eventCount: 4} |
| ]; |
| verifier.verify(); |
| }); |
| }); |
| </script> |