fune/browser/base/content/test/performance/browser_startup_images.js
Kris Maglione a78b44be00 Bug 1777886 - Check that denylist/intermittent files actually exist in startup perf tests. r=florian
This will require that entries for renamed files be updated so that they don't
accidentally start being loaded under the new name later. It also prevents
dead code entries from sticking around after their targets are removed.

Using `throttledMapPromises` is probably not strictly necessary given the
small number of entries in most lists, but since it already exists, we may as
well use it here.

Differential Revision: https://phabricator.services.mozilla.com/D150921
2022-07-08 00:59:02 +00:00

147 lines
4.4 KiB
JavaScript

/* 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 <not loaded> 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: "resource://gre-resources/loading-image.png",
platforms: ["win", "macosx"],
intermittentNotLoaded: ["win", "macosx"],
},
{
file: "resource://gre-resources/broken-image.png",
platforms: ["win", "macosx"],
intermittentNotLoaded: ["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 != "<not loaded>") {
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.`
);
}
}
}
});