Bug 1848459 - add telemetry to count closed tabs lost in session restore r=sfoster,sessionstore-reviewers

* Add histogram to sessionrestore code to count how often and the number of
closed tabs that aren't saved on window close due to no open saveable tabs
* Add test coverage

Differential Revision: https://phabricator.services.mozilla.com/D193055
This commit is contained in:
Sarah Clements 2023-11-23 13:38:06 +00:00
parent 4ab2bf820c
commit b8cd7eaa7f
3 changed files with 44 additions and 3 deletions

View file

@ -2360,7 +2360,7 @@ var SessionStoreInternal = {
// It's possible that a tab switched its privacy state at some point
// before our flush, so we need to filter again.
lazy.PrivacyFilter.filterPrivateTabs(winData);
this.maybeSaveClosedWindow(winData, isLastWindow);
this.maybeSaveClosedWindow(winData, isLastWindow, true);
if (!isLastWindow && winData.closedId > -1) {
this._addClosedAction(
@ -2439,7 +2439,7 @@ var SessionStoreInternal = {
* to call this method again asynchronously (for example, after
* a window flush).
*/
maybeSaveClosedWindow(winData, isLastWindow) {
maybeSaveClosedWindow(winData, isLastWindow, recordTelemetry = false) {
// Make sure SessionStore is still running, and make sure that we
// haven't chosen to forget this window.
if (
@ -2498,6 +2498,14 @@ var SessionStoreInternal = {
}
if (alreadyStored) {
this._removeClosedWindow(winIndex);
return;
}
// we only do this after the TabStateFlusher promise resolves in ssi_onClose
if (recordTelemetry) {
let closedTabsHistogram = Services.telemetry.getHistogramById(
"FX_SESSION_RESTORE_CLOSED_TABS_NOT_SAVED"
);
closedTabsHistogram.add(winData._closedTabs.length);
}
}
}

View file

@ -1,7 +1,9 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const { TelemetryTestUtils } = ChromeUtils.import(
"resource://testing-common/TelemetryTestUtils.jsm"
);
const TEST_URLS = [
"http://mochi.test:8888/browser/",
"https://www.example.com/",
@ -74,17 +76,37 @@ async function prepareClosedData() {
closedIds.tab5 =
SessionStore.getClosedTabDataForWindow(privateWin)[0].closedId;
const testWindow6 = await BrowserTestUtils.openNewBrowserWindow();
const testWindow7 = await BrowserTestUtils.openNewBrowserWindow();
await openAndCloseTab(testWindow7, TEST_URLS[4]);
let closedTabsHistogram = TelemetryTestUtils.getAndClearHistogram(
"FX_SESSION_RESTORE_CLOSED_TABS_NOT_SAVED"
);
await BrowserTestUtils.closeWindow(testWindow1);
closedIds.testWindow1 = SessionStore.getClosedWindowData()[0].closedId;
await BrowserTestUtils.closeWindow(testWindow2);
closedIds.testWindow2 = SessionStore.getClosedWindowData()[0].closedId;
await BrowserTestUtils.closeWindow(testWindow3);
closedIds.testWindow3 = SessionStore.getClosedWindowData()[0].closedId;
await BrowserTestUtils.closeWindow(privateWin);
Assert.ok(
closedIds.testWindow2 > closedIds.testWindow1,
"We got the closedIds in the expected order"
);
await BrowserTestUtils.closeWindow(testWindow6);
TelemetryTestUtils.assertHistogram(closedTabsHistogram, 0, 1);
closedTabsHistogram.clear();
await BrowserTestUtils.closeWindow(testWindow7);
TelemetryTestUtils.assertHistogram(closedTabsHistogram, 1, 1);
closedTabsHistogram.clear();
return closedIds;
}

View file

@ -9307,6 +9307,17 @@
"n_values": 50,
"description": "Session restore: Number of tabs restored eagerly in the session that has just been restored."
},
"FX_SESSION_RESTORE_CLOSED_TABS_NOT_SAVED": {
"record_in_processes": ["main", "content"],
"products": ["firefox"],
"expires_in_version": "127",
"alert_emails": ["firefox-view-engineers@mozilla.com"],
"releaseChannelCollection": "opt-out",
"bug_numbers": [1848459],
"kind": "enumerated",
"n_values": 25,
"description": "Session restore: Number of closed tabs that are NOT saved due to lack of open tabs worth saving on window close."
},
"FX_TABLETMODE_PAGE_LOAD": {
"record_in_processes": ["main", "content"],
"products": ["firefox", "fennec"],