Bug 1289436 - add telemetry for the length of time we take to import data, r?jaws,bsmedberg
MozReview-Commit-ID: CkbHJVRucr5
--- a/browser/components/migration/MigrationUtils.jsm
+++ b/browser/components/migration/MigrationUtils.jsm
@@ -5,29 +5,31 @@
"use strict";
this.EXPORTED_SYMBOLS = ["MigrationUtils", "MigratorPrototype"];
const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
const TOPIC_WILL_IMPORT_BOOKMARKS = "initial-migration-will-import-default-bookmarks";
const TOPIC_DID_IMPORT_BOOKMARKS = "initial-migration-did-import-default-bookmarks";
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+Cu.import("resource://gre/modules/AppConstants.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/Task.jsm");
-Cu.import("resource://gre/modules/AppConstants.jsm");
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "AutoMigrate",
+ "resource:///modules/AutoMigrate.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "BookmarkHTMLUtils",
+ "resource://gre/modules/BookmarkHTMLUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
"resource://gre/modules/PlacesUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "BookmarkHTMLUtils",
- "resource://gre/modules/BookmarkHTMLUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "PromiseUtils",
"resource://gre/modules/PromiseUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "AutoMigrate",
- "resource:///modules/AutoMigrate.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch",
+ "resource://gre/modules/TelemetryStopwatch.jsm");
var gMigrators = null;
var gProfileStartup = null;
var gMigrationBundle = null;
XPCOMUtils.defineLazyGetter(this, "gAvailableMigratorKeys", function() {
if (AppConstants.platform == "win") {
return [
@@ -192,16 +194,20 @@ this.MigratorPrototype = {
let resources = this._getMaybeCachedResources(aProfile);
if (!resources) {
return [];
}
let types = resources.map(r => r.type);
return types.reduce((a, b) => a |= b, 0);
},
+ getKey: function MP_getKey() {
+ return this.contractID.match(/\=([^\=]+)$/)[1];
+ },
+
/**
* DO NOT OVERRIDE - After deCOMing migration, the UI will just call
* migrate for each resource.
*
* @see nsIBrowserProfileMigrator
*/
migrate: function MP_migrate(aItems, aStartup, aProfile) {
let resources = this._getMaybeCachedResources(aProfile);
@@ -213,16 +219,41 @@ this.MigratorPrototype = {
// Used to periodically give back control to the main-thread loop.
let unblockMainThread = function () {
return new Promise(resolve => {
Services.tm.mainThread.dispatch(resolve, Ci.nsIThread.DISPATCH_NORMAL);
});
};
+ let getHistogramForResourceType = resourceType => {
+ if (resourceType == MigrationUtils.resourceTypes.HISTORY) {
+ return "FX_MIGRATION_HISTORY_IMPORT_MS";
+ }
+ if (resourceType == MigrationUtils.resourceTypes.BOOKMARKS) {
+ return "FX_MIGRATION_BOOKMARKS_IMPORT_MS";
+ }
+ if (resourceType == MigrationUtils.resourceTypes.PASSWORDS) {
+ return "FX_MIGRATION_LOGINS_IMPORT_MS";
+ }
+ return null;
+ };
+ let maybeStartTelemetryStopwatch = (resourceType, resource) => {
+ let histogram = getHistogramForResourceType(resourceType);
+ if (histogram) {
+ TelemetryStopwatch.startKeyed(histogram, this.getKey(), resource);
+ }
+ };
+ let maybeStopTelemetryStopwatch = (resourceType, resource) => {
+ let histogram = getHistogramForResourceType(resourceType);
+ if (histogram) {
+ TelemetryStopwatch.finishKeyed(histogram, this.getKey(), resource);
+ }
+ };
+
// Called either directly or through the bookmarks import callback.
let doMigrate = Task.async(function*() {
let resourcesGroupedByItems = new Map();
resources.forEach(function(resource) {
if (!resourcesGroupedByItems.has(resource.type)) {
resourcesGroupedByItems.set(resource.type, new Set());
}
resourcesGroupedByItems.get(resource.type).add(resource)
@@ -241,18 +272,20 @@ this.MigratorPrototype = {
let migrationType = key, itemResources = value;
notify("Migration:ItemBeforeMigrate", migrationType);
let itemSuccess = false;
for (let res of itemResources) {
// Workaround bug 449811.
let resource = res;
+ maybeStartTelemetryStopwatch(migrationType, resource);
let completeDeferred = PromiseUtils.defer();
let resourceDone = function(aSuccess) {
+ maybeStopTelemetryStopwatch(migrationType, resource);
itemResources.delete(resource);
itemSuccess |= aSuccess;
if (itemResources.size == 0) {
notify(itemSuccess ?
"Migration:ItemAfterMigrate" : "Migration:ItemError",
migrationType);
resourcesGroupedByItems.delete(migrationType);
if (resourcesGroupedByItems.size == 0) {
--- a/toolkit/components/telemetry/Histograms.json
+++ b/toolkit/components/telemetry/Histograms.json
@@ -4275,16 +4275,49 @@
},
"FX_MIGRATION_HOMEPAGE_IMPORTED": {
"expires_in_version": "53",
"kind": "boolean",
"keyed": true,
"releaseChannelCollection": "opt-out",
"description": "Whether the homepage was imported during browser migration. Only available on release builds during firstrun."
},
+ "FX_MIGRATION_BOOKMARKS_IMPORT_MS": {
+ "bug_numbers": [1289436],
+ "alert_emails": ["gijs@mozilla.com"],
+ "expires_in_version": "54",
+ "kind": "exponential",
+ "n_buckets": 70,
+ "high": 100000,
+ "releaseChannelCollection": "opt-out",
+ "keyed": true,
+ "description": "How long it took to import bookmarks from another browser, keyed by the name of the browser."
+ },
+ "FX_MIGRATION_HISTORY_IMPORT_MS": {
+ "bug_numbers": [1289436],
+ "alert_emails": ["gijs@mozilla.com"],
+ "expires_in_version": "54",
+ "kind": "exponential",
+ "n_buckets": 70,
+ "high": 100000,
+ "releaseChannelCollection": "opt-out",
+ "keyed": true,
+ "description": "How long it took to import history from another browser, keyed by the name of the browser."
+ },
+ "FX_MIGRATION_LOGINS_IMPORT_MS": {
+ "bug_numbers": [1289436],
+ "alert_emails": ["gijs@mozilla.com"],
+ "expires_in_version": "54",
+ "kind": "exponential",
+ "n_buckets": 70,
+ "high": 100000,
+ "releaseChannelCollection": "opt-out",
+ "keyed": true,
+ "description": "How long it took to import logins (passwords) from another browser, keyed by the name of the browser."
+ },
"FX_STARTUP_MIGRATION_BROWSER_COUNT": {
"bug_numbers": [1275114],
"alert_emails": ["gijs@mozilla.com"],
"expires_in_version": "53",
"kind": "enumerated",
"n_values": 15,
"releaseChannelCollection": "opt-out",
"description": "Number of browsers from which the user could migrate on initial profile migration. Only available on release builds during firstrun."