Commit 8b5dda2c authored by Andrey Kosyakov's avatar Andrey Kosyakov Committed by Chromium LUCI CQ

Deflake inspector-protocol/performance-timeline/largest-contentful-paint.js

Bug: 1164469
Change-Id: I0fab507f0a58676abd0143e5bb8ea562bfb113f4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2628083
Commit-Queue: Peter Kvitek <kvitekp@chromium.org>
Reviewed-by: default avatarPeter Kvitek <kvitekp@chromium.org>
Cr-Commit-Position: refs/heads/master@{#844196}
parent e0ae4225
...@@ -71,7 +71,6 @@ crbug.com/1132260 http/tests/devtools/console/console-bad-stacktrace.js [ Pass F ...@@ -71,7 +71,6 @@ crbug.com/1132260 http/tests/devtools/console/console-bad-stacktrace.js [ Pass F
crbug.com/1132260 http/tests/devtools/console/console-uncaught-promise.js [ Pass Failure ] crbug.com/1132260 http/tests/devtools/console/console-uncaught-promise.js [ Pass Failure ]
crbug.com/1132260 http/tests/devtools/tracing/timeline-network/timeline-network-resource-details.js [ Pass Failure ] crbug.com/1132260 http/tests/devtools/tracing/timeline-network/timeline-network-resource-details.js [ Pass Failure ]
crbug.com/1132260 inspector-protocol/page/frameAttachedStacktrace.js [ Pass Failure ] crbug.com/1132260 inspector-protocol/page/frameAttachedStacktrace.js [ Pass Failure ]
crbug.com/1164469 inspector-protocol/performance-timeline/largest-contentful-paint.js [ Pass Failure ]
# With --enable-display-compositor-pixel-dump enabled by default, these three # With --enable-display-compositor-pixel-dump enabled by default, these three
# tests fail. See crbug.com/887140 for more info. # tests fail. See crbug.com/887140 for more info.
......
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
const unstableFields = ['frameId']; const unstableFields = ['frameId'];
const events = []; const events = [];
const startTime = Date.now();
await dp.PerformanceTimeline.enable({eventTypes: ['largest-contentful-paint']});
const TestHelper = await testRunner.loadScript('resources/performance-timeline-test.js'); const TestHelper = await testRunner.loadScript('resources/performance-timeline-test.js');
const testHelper = new TestHelper(dp); const testHelper = new TestHelper(dp);
await dp.PerformanceTimeline.enable({eventTypes: ['largest-contentful-paint']});
dp.PerformanceTimeline.onTimelineEventAdded(event => events.push(event.params.event)); dp.PerformanceTimeline.onTimelineEventAdded(event => events.push(event.params.event));
session.navigate(testRunner.url('resources/lcp.html')); session.navigate(testRunner.url('resources/lcp.html'));
await dp.PerformanceTimeline.onceTimelineEventAdded(); await dp.PerformanceTimeline.onceTimelineEventAdded();
...@@ -24,8 +24,8 @@ ...@@ -24,8 +24,8 @@
const endTime = Date.now(); const endTime = Date.now();
for (const event of events) { for (const event of events) {
testHelper.patchTimes(startTime, endTime, event, ['time']); testHelper.patchTimes(event, ['time']);
testHelper.patchTimes(startTime, endTime, event.lcpDetails, ['renderTime', 'loadTime']); testHelper.patchTimes(event.lcpDetails, ['renderTime', 'loadTime']);
await patchFields(event.lcpDetails); await patchFields(event.lcpDetails);
} }
......
...@@ -3,13 +3,12 @@ ...@@ -3,13 +3,12 @@
const unstableFields = ['frameId']; const unstableFields = ['frameId'];
const events = []; const events = [];
const startTime = Date.now();
await dp.PerformanceTimeline.enable({eventTypes: ['layout-shift']});
const TestHelper = await testRunner.loadScript('resources/performance-timeline-test.js'); const TestHelper = await testRunner.loadScript('resources/performance-timeline-test.js');
const testHelper = new TestHelper(dp); const testHelper = new TestHelper(dp);
await dp.PerformanceTimeline.enable({eventTypes: ['layout-shift']});
dp.PerformanceTimeline.onTimelineEventAdded(event => events.push(event.params.event)); dp.PerformanceTimeline.onTimelineEventAdded(event => events.push(event.params.event));
await session.navigate(testRunner.url('resources/layout-shift.html')); await session.navigate(testRunner.url('resources/layout-shift.html'));
await session.evaluateAsync(`new Promise(resolve => requestAnimationFrame(resolve))`); await session.evaluateAsync(`new Promise(resolve => requestAnimationFrame(resolve))`);
...@@ -25,11 +24,9 @@ ...@@ -25,11 +24,9 @@
await dp.PerformanceTimeline.onceTimelineEventAdded(); await dp.PerformanceTimeline.onceTimelineEventAdded();
const endTime = Date.now();
for (const event of events) { for (const event of events) {
testHelper.patchTimes(startTime, endTime, event, ['time']); testHelper.patchTimes(event, ['time']);
testHelper.patchTimes(startTime, endTime, event.layoutShiftDetails, ['lastInputTime']); testHelper.patchTimes(event.layoutShiftDetails, ['lastInputTime']);
await patchFields(event.layoutShiftDetails); await patchFields(event.layoutShiftDetails);
} }
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
class TestHelper { class TestHelper {
constructor(dp) { constructor(dp) {
this._dp = dp; this._dp = dp;
this._startTicks = performance.now();
} }
async describeNode(nodeId) { async describeNode(nodeId) {
...@@ -15,16 +16,19 @@ class TestHelper { ...@@ -15,16 +16,19 @@ class TestHelper {
`<${response.result.object.description}>` : '<invalid id>'; `<${response.result.object.description}>` : '<invalid id>';
} }
patchTimes(start, end, obj, fields) { async patchTimes(obj, fields) {
// Add some slack to defeat time clamping. const startTime = (await this._dp.Runtime.evaluate({
start -= 1; expression: 'window.performance.timeOrigin',
end += 1; returnByValue: true})).result.result.value;
const endTicks = performance.now();
// Ensure we're using monotonic time within the test duration.
const endTime = startTime + (endTicks - this._startTicks);
for (const field of fields) { for (const field of fields) {
const time = obj[field] * 1000; const time = obj[field] * 1000;
if (time && (start <= time && time <= end)) { if (time && (startTime <= time && time <= endTime)) {
obj[field] = `<${typeof time}>`; obj[field] = `<${typeof time}>`;
} else if (time) { } else if (time) {
obj[field] = `FAIL: actual: ${time}, expected: ${start} <= time <= ${end}` obj[field] = `FAIL: actual: ${time}, expected: ${startTime} <= time <= ${endTime}`;
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment