| OLD | NEW |
| (Empty) | |
| 1 (async function(testRunner) { |
| 2 let {page, session, dp} = await testRunner.startBlank(``); |
| 3 |
| 4 await session.evaluate(` |
| 5 var logs = []; |
| 6 function log(text) { |
| 7 logs.push(text); |
| 8 } |
| 9 |
| 10 var expectedOffsets = []; |
| 11 var receivedTimestamps = []; |
| 12 var resolve; |
| 13 var verifyTimestampsPromise = new Promise(f => resolve = f); |
| 14 |
| 15 function logEvent(event) { |
| 16 log('-----Event-----'); |
| 17 log('type: ' + event.type); |
| 18 receivedTimestamps.push(event.timeStamp); |
| 19 if (receivedTimestamps.length === expectedOffsets.length) |
| 20 verifyTimestamps(); |
| 21 } |
| 22 |
| 23 function verifyTimestamps() { |
| 24 log('-----Verify-----'); |
| 25 log('Received ' + receivedTimestamps.length + ' timestamps'); |
| 26 |
| 27 // Event.timeStamp values are in milliseconds |
| 28 var receivedOffsets = receivedTimestamps.map(t => t - receivedTimestamps[0
]); |
| 29 for (var i = 0; i < receivedOffsets.length; ++i) { |
| 30 if (isNear(receivedOffsets[i], expectedOffsets[i])) |
| 31 log('timeStamps offsets is as expected.'); |
| 32 else |
| 33 log('timeStamp offset is expected ' + expectedOffsets[i] + ' but it is
:' + receivedOffsets[i]); |
| 34 } |
| 35 |
| 36 function isNear(a, b) { |
| 37 var epsilon = 0.5; |
| 38 return Math.abs(b - a) < epsilon; |
| 39 } |
| 40 |
| 41 resolve(logs.join('\\n')); |
| 42 } |
| 43 |
| 44 window.addEventListener('keydown', logEvent); |
| 45 window.addEventListener('mousedown', logEvent); |
| 46 window.addEventListener('touchstart', logEvent); |
| 47 `); |
| 48 |
| 49 // We send epoch timestamp but expect to receive high-res timestamps |
| 50 var baseEpochTimestamp = Date.now() / 1000; // in seconds |
| 51 var offsets = [0, 5, 10, 15, 20, 25]; |
| 52 var sentTimestamps = offsets.map(offset => baseEpochTimestamp + offset); |
| 53 |
| 54 var offsetsMs = offsets.map(offset => 1000 * offset); |
| 55 await session.evaluate(` |
| 56 expectedOffsets = [${offsetsMs.join(', ')}]; |
| 57 `); |
| 58 |
| 59 function dumpError(message) { |
| 60 if (message.error) |
| 61 testRunner.log('Error: ' + message.error.message); |
| 62 } |
| 63 |
| 64 dumpError(await dp.Input.dispatchKeyEvent({ |
| 65 type: 'rawKeyDown', |
| 66 timestamp: sentTimestamps[0] |
| 67 })); |
| 68 dumpError(await dp.Input.dispatchKeyEvent({ |
| 69 type: 'rawKeyDown', |
| 70 timestamp: sentTimestamps[1] |
| 71 })); |
| 72 dumpError(await dp.Input.dispatchMouseEvent({ |
| 73 type: 'mousePressed', |
| 74 timestamp: sentTimestamps[2], |
| 75 button: 'left', |
| 76 clickCount: 1, |
| 77 x: 100, |
| 78 y: 200 |
| 79 })); |
| 80 dumpError(await dp.Input.dispatchMouseEvent({ |
| 81 type: 'mousePressed', |
| 82 timestamp: sentTimestamps[3], |
| 83 button: 'left', |
| 84 clickCount: 1, |
| 85 x: 100, |
| 86 y: 200 |
| 87 })); |
| 88 dumpError(await dp.Input.dispatchTouchEvent({ |
| 89 type: 'touchStart', |
| 90 timestamp: sentTimestamps[4], |
| 91 touchPoints: [{ |
| 92 state: 'touchPressed', |
| 93 x: 100, |
| 94 y: 200 |
| 95 }] |
| 96 })); |
| 97 dumpError(await dp.Input.dispatchTouchEvent({ |
| 98 type: 'touchStart', |
| 99 timestamp: sentTimestamps[5], |
| 100 touchPoints: [{ |
| 101 state: 'touchPressed', |
| 102 x: 100, |
| 103 y: 100 |
| 104 }] |
| 105 })); |
| 106 |
| 107 testRunner.log(await session.evaluateAsync('verifyTimestampsPromise')); |
| 108 testRunner.completeTest(); |
| 109 }) |
| OLD | NEW |