fune/layout/base/tests/browser_lazyload_telemetry.js

88 lines
2.7 KiB
JavaScript

const baseURL = getRootDirectory(gTestPath).replace(
"chrome://mochitests/content",
"http://example.com"
);
const testFileURL = `${baseURL}file_lazyload_telemetry.html`;
const { TelemetryTestUtils } = ChromeUtils.import(
"resource://testing-common/TelemetryTestUtils.jsm"
);
function pageLoadIsReported() {
const snapshot = Services.telemetry.getSnapshotForHistograms("main", false)
.parent;
return snapshot.FX_LAZYLOAD_IMAGE_PAGE_LOAD_MS;
}
function dataIsReported() {
const snapshot = Services.telemetry.getSnapshotForHistograms("main", false)
.content;
return (
snapshot.LAZYLOAD_IMAGE_STARTED && snapshot.LAZYLOAD_IMAGE_STARTED.values[4]
);
}
add_task(async function testTelemetryCollection() {
Services.telemetry.getHistogramById("LAZYLOAD_IMAGE_TOTAL").clear();
Services.telemetry.getHistogramById("LAZYLOAD_IMAGE_STARTED").clear();
Services.telemetry.getHistogramById("LAZYLOAD_IMAGE_NOT_VIEWPORT").clear();
Services.telemetry
.getHistogramById("LAZYLOAD_IMAGE_VIEWPORT_LOADING")
.clear();
Services.telemetry.getHistogramById("LAZYLOAD_IMAGE_VIEWPORT_LOADED").clear();
Services.telemetry.getHistogramById("FX_LAZYLOAD_IMAGE_PAGE_LOAD_MS").clear();
const testTab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
testFileURL,
true
);
await SpecialPowers.spawn(
testTab.linkedBrowser.browsingContext,
[],
async () => {
const image2 = content.document.getElementById("image2");
image2.scrollIntoView();
await new Promise(resolve => {
content.requestAnimationFrame(() => {
content.requestAnimationFrame(resolve);
});
});
}
);
await BrowserTestUtils.waitForCondition(pageLoadIsReported);
gBrowser.removeTab(testTab);
await BrowserTestUtils.waitForCondition(dataIsReported);
const snapshot = Services.telemetry.getSnapshotForHistograms("main", false);
// Ensures we have 4 lazyload images.
is(snapshot.content.LAZYLOAD_IMAGE_TOTAL.values[4], 1, "total images");
// All 4 images should be lazy-loaded.
is(snapshot.content.LAZYLOAD_IMAGE_STARTED.values[4], 1, "started to load");
// The last image didn't reach to the viewport.
is(
snapshot.content.LAZYLOAD_IMAGE_NOT_VIEWPORT.values[1],
1,
"images didn't reach viewport"
);
// The sum of the images that reached to the viewport
// should be three. This includes all images except
// the last one.
is(
snapshot.content.LAZYLOAD_IMAGE_VIEWPORT_LOADING.sum +
snapshot.content.LAZYLOAD_IMAGE_VIEWPORT_LOADED.sum,
3,
"images reached viewport"
);
ok(
snapshot.parent.FX_LAZYLOAD_IMAGE_PAGE_LOAD_MS.sum > 0,
"lazyload image page load telemetry"
);
});