fune/toolkit/modules/BrowserTelemetryUtils.sys.mjs
Perry McManis d91169cb8a Bug 1858954 - Add some metrics for validating geckoview streaming collection against direct glean collection r=chutten,gfx-reviewers,media-playback-reviewers,jrmuizel,padenot
In an effort to understand if data collected via the Geckoview Streaming
API differs materially from that collected in Glean, we will implement
some temporary data collections that cover the existing use cases of the
former.

Differential Revision: https://phabricator.services.mozilla.com/D191119
2023-10-26 12:35:55 +00:00

76 lines
2.4 KiB
JavaScript

/* -*- mode: js; indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* 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/. */
export var BrowserTelemetryUtils = {
recordSiteOriginTelemetry(aWindows, aIsGeckoView) {
Services.tm.idleDispatchToMainThread(() => {
this._recordSiteOriginTelemetry(aWindows, aIsGeckoView);
});
},
computeSiteOriginCount(aWindows, aIsGeckoView) {
// Geckoview and Desktop work differently. On desktop, aBrowser objects
// holds an array of tabs which we can use to get the <browser> objects.
// In Geckoview, it is apps' responsibility to keep track of the tabs, so
// there isn't an easy way for us to get the tabs.
let tabs = [];
if (aIsGeckoView) {
// To get all active windows; Each tab has its own window
tabs = aWindows;
} else {
for (const win of aWindows) {
tabs = tabs.concat(win.gBrowser.tabs);
}
}
let topLevelBCs = [];
for (const tab of tabs) {
let browser;
if (aIsGeckoView) {
browser = tab.browser;
} else {
browser = tab.linkedBrowser;
}
if (browser.browsingContext) {
// This is the top level browsingContext
topLevelBCs.push(browser.browsingContext);
}
}
return CanonicalBrowsingContext.countSiteOrigins(topLevelBCs);
},
_recordSiteOriginTelemetry(aWindows, aIsGeckoView) {
let currentTime = Date.now();
// default is 5 minutes
if (!this.min_interval) {
this.min_interval = Services.prefs.getIntPref(
"telemetry.number_of_site_origin.min_interval",
300000
);
}
let originCount = this.computeSiteOriginCount(aWindows, aIsGeckoView);
let histogram = Services.telemetry.getHistogramById(
"FX_NUMBER_OF_UNIQUE_SITE_ORIGINS_ALL_TABS"
);
// Discard the first load because most of the time the first load only has 1
// tab and 1 window open, so it is useless to report it.
if (!this._lastRecordSiteOrigin) {
this._lastRecordSiteOrigin = currentTime;
} else if (currentTime >= this._lastRecordSiteOrigin + this.min_interval) {
this._lastRecordSiteOrigin = currentTime;
histogram.add(originCount);
Glean.fogValidation.gvsvNumberOfUniqueSiteOriginsAllTabs.accumulateSamples(
[originCount]
);
}
},
};