forked from mirrors/gecko-dev
112 lines
3.4 KiB
JavaScript
112 lines
3.4 KiB
JavaScript
"use strict";
|
|
|
|
var gAnimHistogram = Services.telemetry.getHistogramById(
|
|
"FX_TAB_CLOSE_TIME_ANIM_MS"
|
|
);
|
|
var gNoAnimHistogram = Services.telemetry.getHistogramById(
|
|
"FX_TAB_CLOSE_TIME_NO_ANIM_MS"
|
|
);
|
|
|
|
/**
|
|
* Takes a Telemetry histogram snapshot and returns the sum of all counts.
|
|
*
|
|
* @param snapshot (Object)
|
|
* The Telemetry histogram snapshot to examine.
|
|
* @return (int)
|
|
* The sum of all counts in the snapshot.
|
|
*/
|
|
function snapshotCount(snapshot) {
|
|
// Use Array.prototype.reduce to sum up all of the
|
|
// snapshot.count entries
|
|
return Object.values(snapshot.values).reduce((a, b) => a + b, 0);
|
|
}
|
|
|
|
/**
|
|
* Takes a Telemetry histogram snapshot and makes sure
|
|
* that the sum of all counts equals expectedCount.
|
|
*
|
|
* @param snapshot (Object)
|
|
* The Telemetry histogram snapshot to examine.
|
|
* @param expectedCount (int)
|
|
* What we expect the number of incremented counts to be. For example,
|
|
* If we expect this probe to have only had a single recording, this
|
|
* would be 1. If we expected it to have not recorded any data at all,
|
|
* this would be 0.
|
|
*/
|
|
function assertCount(snapshot, expectedCount) {
|
|
Assert.equal(
|
|
snapshotCount(snapshot),
|
|
expectedCount,
|
|
`Should only be ${expectedCount} collected value.`
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Takes a Telemetry histogram and waits for the sum of all counts becomes
|
|
* equal to expectedCount.
|
|
*
|
|
* @param histogram (Object)
|
|
* The Telemetry histogram to examine.
|
|
* @param expectedCount (int)
|
|
* What we expect the number of incremented counts to become.
|
|
* @return (Promise)
|
|
* @resolves When the histogram snapshot count becomes the expected count.
|
|
*/
|
|
function waitForSnapshotCount(histogram, expectedCount) {
|
|
return BrowserTestUtils.waitForCondition(() => {
|
|
return snapshotCount(histogram.snapshot()) == expectedCount;
|
|
}, `Collected value should become ${expectedCount}.`);
|
|
}
|
|
|
|
add_setup(async function () {
|
|
// Force-enable tab animations
|
|
gReduceMotionOverride = false;
|
|
|
|
// These probes are opt-in, meaning we only capture them if extended
|
|
// Telemetry recording is enabled.
|
|
let oldCanRecord = Services.telemetry.canRecordExtended;
|
|
Services.telemetry.canRecordExtended = true;
|
|
registerCleanupFunction(() => {
|
|
Services.telemetry.canRecordExtended = oldCanRecord;
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Tests the FX_TAB_CLOSE_TIME_ANIM_MS probe by closing a tab with the tab
|
|
* close animation.
|
|
*/
|
|
add_task(async function test_close_time_anim_probe() {
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
|
await BrowserTestUtils.waitForCondition(() => tab._fullyOpen);
|
|
|
|
gAnimHistogram.clear();
|
|
gNoAnimHistogram.clear();
|
|
|
|
BrowserTestUtils.removeTab(tab, { animate: true });
|
|
|
|
await waitForSnapshotCount(gAnimHistogram, 1);
|
|
assertCount(gNoAnimHistogram.snapshot(), 0);
|
|
|
|
gAnimHistogram.clear();
|
|
gNoAnimHistogram.clear();
|
|
});
|
|
|
|
/**
|
|
* Tests the FX_TAB_CLOSE_TIME_NO_ANIM_MS probe by closing a tab without the
|
|
* tab close animation.
|
|
*/
|
|
add_task(async function test_close_time_no_anim_probe() {
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
|
await BrowserTestUtils.waitForCondition(() => tab._fullyOpen);
|
|
|
|
gAnimHistogram.clear();
|
|
gNoAnimHistogram.clear();
|
|
|
|
BrowserTestUtils.removeTab(tab, { animate: false });
|
|
|
|
await waitForSnapshotCount(gNoAnimHistogram, 1);
|
|
assertCount(gAnimHistogram.snapshot(), 0);
|
|
|
|
gAnimHistogram.clear();
|
|
gNoAnimHistogram.clear();
|
|
});
|