From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../test/performance/browser_startup_images.js | 136 +++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 browser/base/content/test/performance/browser_startup_images.js (limited to 'browser/base/content/test/performance/browser_startup_images.js') diff --git a/browser/base/content/test/performance/browser_startup_images.js b/browser/base/content/test/performance/browser_startup_images.js new file mode 100644 index 0000000000..5a27b9a8dd --- /dev/null +++ b/browser/base/content/test/performance/browser_startup_images.js @@ -0,0 +1,136 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * This test checks that any images we load on startup are actually used, + * so we don't waste IO and cycles loading images the user doesn't see. + * It has a list of known problematic images that we aim to reduce to + * empty. + */ + +/* A list of images that are loaded at startup but not shown. + * List items support the following attributes: + * - file: The location of the loaded image file. + * - hidpi: An alternative hidpi file location for retina screens, if one exists. + * May be the magic string in strange cases where + * only the low-resolution image is loaded but not shown. + * - platforms: An array of the platforms where the issue is occurring. + * Possible values are linux, win, macosx. + * - intermittentNotLoaded: an array of platforms where this image is + * intermittently not loaded, e.g. because it is + * loaded during the time we stop recording. + * - intermittentShown: An array of platforms where this image is + * intermittently shown, even though the list implies + * it might not be shown. + * + * PLEASE do not add items to this list. + * + * PLEASE DO remove items from this list. + */ +const knownUnshownImages = [ + { + file: "chrome://global/skin/icons/arrow-left.svg", + platforms: ["linux", "win", "macosx"], + }, + + { + file: "chrome://browser/skin/toolbar-drag-indicator.svg", + platforms: ["linux", "win", "macosx"], + }, + + { + file: "chrome://global/skin/icons/chevron.svg", + platforms: ["win", "linux", "macosx"], + intermittentShown: ["win", "linux"], + }, + + { + file: "chrome://browser/skin/window-controls/maximize.svg", + platforms: ["win"], + // This is to prevent perma-fails in case Windows machines + // go back to running tests in non-maximized windows. + intermittentShown: ["win"], + // This file is not loaded on Windows 7/8. + intermittentNotLoaded: ["win"], + }, +]; + +add_task(async function () { + if (!AppConstants.DEBUG) { + ok(false, "You need to run this test on a debug build."); + } + + let startupRecorder = + Cc["@mozilla.org/test/startuprecorder;1"].getService().wrappedJSObject; + await startupRecorder.done; + + let data = Cu.cloneInto(startupRecorder.data.images, {}); + let knownImagesForPlatform = knownUnshownImages.filter(el => { + return el.platforms.includes(AppConstants.platform); + }); + + { + let results = await PerfTestHelpers.throttledMapPromises( + knownImagesForPlatform, + async image => ({ + uri: image.file, + exists: await PerfTestHelpers.checkURIExists(image.file), + }) + ); + for (let { uri, exists } of results) { + ok(exists, `Unshown image entry ${uri} must exist`); + } + } + + let loadedImages = data["image-loading"]; + let shownImages = data["image-drawing"]; + + for (let loaded of loadedImages.values()) { + let knownImage = knownImagesForPlatform.find(el => { + if (window.devicePixelRatio >= 2 && el.hidpi && el.hidpi == loaded) { + return true; + } + return el.file == loaded; + }); + if (knownImage) { + if ( + !knownImage.intermittentShown || + !knownImage.intermittentShown.includes(AppConstants.platform) + ) { + todo( + shownImages.has(loaded), + `Image ${loaded} should not have been shown.` + ); + } + continue; + } + ok( + shownImages.has(loaded), + `Loaded image ${loaded} should have been shown.` + ); + } + + // Check for known images that are no longer used. + for (let item of knownImagesForPlatform) { + if ( + !item.intermittentNotLoaded || + !item.intermittentNotLoaded.includes(AppConstants.platform) + ) { + if (window.devicePixelRatio >= 2 && item.hidpi) { + if (item.hidpi != "") { + ok( + loadedImages.has(item.hidpi), + `Image ${item.hidpi} should have been loaded.` + ); + } + } else { + ok( + loadedImages.has(item.file), + `Image ${item.file} should have been loaded.` + ); + } + } + } +}); -- cgit v1.2.3