From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/performance/browser_startup_flicker.js | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 browser/base/content/test/performance/browser_startup_flicker.js (limited to 'browser/base/content/test/performance/browser_startup_flicker.js') diff --git a/browser/base/content/test/performance/browser_startup_flicker.js b/browser/base/content/test/performance/browser_startup_flicker.js new file mode 100644 index 0000000000..8279a0a601 --- /dev/null +++ b/browser/base/content/test/performance/browser_startup_flicker.js @@ -0,0 +1,85 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/* + * This test ensures that there is no unexpected flicker + * on the first window opened during startup. + */ + +add_task(async function () { + let startupRecorder = + Cc["@mozilla.org/test/startuprecorder;1"].getService().wrappedJSObject; + await startupRecorder.done; + + // Ensure all the frame data is in the test compartment to avoid traversing + // a cross compartment wrapper for each pixel. + let frames = Cu.cloneInto(startupRecorder.data.frames, {}); + ok(!!frames.length, "Should have captured some frames."); + + let unexpectedRects = 0; + let alreadyFocused = false; + for (let i = 1; i < frames.length; ++i) { + let frame = frames[i], + previousFrame = frames[i - 1]; + let rects = compareFrames(frame, previousFrame); + + if (!alreadyFocused) { + // The first screenshot we get shows an unfocused browser window for some + // reason. See bug 1445161. + // + // We'll assume the changes we are seeing are due to this focus change if + // there are at least 5 areas that changed near the top of the screen, + // but will only ignore this once (hence the alreadyFocused variable). + // + // On Linux we expect just one rect because we don't draw titlebar + // buttons in the tab bar, so we just get a whole-tab-bar color-switch. + const minRects = AppConstants.platform == "linux" ? 0 : 5; + if (rects.length > minRects && rects.every(r => r.y2 < 100)) { + alreadyFocused = true; + todo( + false, + "bug 1445161 - the window should be focused at first paint, " + + rects.toSource() + ); + continue; + } + } + + rects = rects.filter(rect => { + let width = frame.width; + + let exceptions = [ + /** + * Please don't add anything new unless justified! + */ + ]; + + let rectText = `${rect.toSource()}, window width: ${width}`; + for (let e of exceptions) { + if (e.condition(rect)) { + todo(false, e.name + ", " + rectText); + return false; + } + } + + ok(false, "unexpected changed rect: " + rectText); + return true; + }); + if (!rects.length) { + info("ignoring identical frame"); + continue; + } + + // Before dumping a frame with unexpected differences for the first time, + // ensure at least one previous frame has been logged so that it's possible + // to see the differences when examining the log. + if (!unexpectedRects) { + dumpFrame(previousFrame); + } + unexpectedRects += rects.length; + dumpFrame(frame); + } + is(unexpectedRects, 0, "should have 0 unknown flickering areas"); +}); -- cgit v1.2.3