зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1103101
- Start Telemetry on content process startup; r=vladan
This commit is contained in:
Родитель
bf90d800d4
Коммит
3bc584457b
|
@ -13,12 +13,7 @@ const Cu = Components.utils;
|
|||
Cu.import("resource://gre/modules/debug.js", this);
|
||||
Cu.import("resource://gre/modules/Services.jsm", this);
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
|
||||
#ifndef MOZ_WIDGET_GONK
|
||||
Cu.import("resource://gre/modules/LightweightThemeManager.jsm", this);
|
||||
#endif
|
||||
Cu.import("resource://gre/modules/ThirdPartyCookieProbe.jsm", this);
|
||||
Cu.import("resource://gre/modules/Promise.jsm", this);
|
||||
Cu.import("resource://gre/modules/AsyncShutdown.jsm", this);
|
||||
Cu.import("resource://gre/modules/DeferredTask.jsm", this);
|
||||
Cu.import("resource://gre/modules/Preferences.jsm");
|
||||
|
||||
|
@ -64,16 +59,25 @@ XPCOMUtils.defineLazyServiceGetter(this, "Telemetry",
|
|||
XPCOMUtils.defineLazyServiceGetter(this, "idleService",
|
||||
"@mozilla.org/widget/idleservice;1",
|
||||
"nsIIdleService");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "UpdateChannel",
|
||||
"resource://gre/modules/UpdateChannel.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "AddonManagerPrivate",
|
||||
"resource://gre/modules/AddonManager.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "AsyncShutdown",
|
||||
"resource://gre/modules/AsyncShutdown.jsm");
|
||||
#ifndef MOZ_WIDGET_GONK
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "LightweightThemeManager",
|
||||
"resource://gre/modules/LightweightThemeManager.jsm");
|
||||
#endif
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "TelemetryFile",
|
||||
"resource://gre/modules/TelemetryFile.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "UITelemetry",
|
||||
"resource://gre/modules/UITelemetry.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "TelemetryLog",
|
||||
"resource://gre/modules/TelemetryLog.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "ThirdPartyCookieProbe",
|
||||
"resource://gre/modules/ThirdPartyCookieProbe.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "UITelemetry",
|
||||
"resource://gre/modules/UITelemetry.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "UpdateChannel",
|
||||
"resource://gre/modules/UpdateChannel.jsm");
|
||||
|
||||
function generateUUID() {
|
||||
let str = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator).generateUUID().toString();
|
||||
|
@ -201,7 +205,7 @@ this.TelemetryPing = Object.freeze({
|
|||
* Used only for testing purposes.
|
||||
*/
|
||||
setup: function() {
|
||||
return Impl.setup(true);
|
||||
return Impl.setupChromeProcess(true);
|
||||
},
|
||||
/**
|
||||
* Used only for testing purposes.
|
||||
|
@ -903,10 +907,37 @@ let Impl = {
|
|||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Perform telemetry initialization for either chrome or content process.
|
||||
*/
|
||||
enableTelemetryRecording: function enableTelemetryRecording(testing) {
|
||||
|
||||
#ifdef MOZILLA_OFFICIAL
|
||||
if (!Telemetry.canSend && !testing) {
|
||||
// We can't send data; no point in initializing observers etc.
|
||||
// Only do this for official builds so that e.g. developer builds
|
||||
// still enable Telemetry based on prefs.
|
||||
Telemetry.canRecord = false;
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
let enabled = Preferences.get(PREF_ENABLED, false);
|
||||
this._server = Preferences.get(PREF_SERVER, undefined);
|
||||
if (!enabled) {
|
||||
// Turn off local telemetry if telemetry is disabled.
|
||||
// This may change once about:telemetry is added.
|
||||
Telemetry.canRecord = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
/**
|
||||
* Initializes telemetry within a timer. If there is no PREF_SERVER set, don't turn on telemetry.
|
||||
*/
|
||||
setup: function setup(aTesting) {
|
||||
setupChromeProcess: function setupChromeProcess(testing) {
|
||||
// Initialize some probes that are kept in their own modules
|
||||
this._thirdPartyCookies = new ThirdPartyCookieProbe();
|
||||
this._thirdPartyCookies.init();
|
||||
|
@ -922,22 +953,7 @@ let Impl = {
|
|||
Preferences.set(PREF_PREVIOUS_BUILDID, thisBuildID);
|
||||
}
|
||||
|
||||
#ifdef MOZILLA_OFFICIAL
|
||||
if (!Telemetry.canSend && !aTesting) {
|
||||
// We can't send data; no point in initializing observers etc.
|
||||
// Only do this for official builds so that e.g. developer builds
|
||||
// still enable Telemetry based on prefs.
|
||||
Telemetry.canRecord = false;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
let enabled = Preferences.get(PREF_ENABLED, false);
|
||||
this._server = Preferences.get(PREF_SERVER, undefined);
|
||||
if (!enabled) {
|
||||
// Turn off local telemetry if telemetry is disabled.
|
||||
// This may change once about:telemetry is added.
|
||||
Telemetry.canRecord = false;
|
||||
if (!this.enableTelemetryRecording(testing)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -957,7 +973,6 @@ let Impl = {
|
|||
}.bind(this));
|
||||
|
||||
Services.obs.addObserver(this, "sessionstore-windows-restored", false);
|
||||
Services.obs.addObserver(this, "quit-application-granted", false);
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
Services.obs.addObserver(this, "application-background", false);
|
||||
#endif
|
||||
|
@ -1000,12 +1015,34 @@ let Impl = {
|
|||
Telemetry.asyncFetchTelemetryData(function () {});
|
||||
deferred.resolve();
|
||||
|
||||
}.bind(this), aTesting ? TELEMETRY_TEST_DELAY : TELEMETRY_DELAY);
|
||||
}.bind(this), testing ? TELEMETRY_TEST_DELAY : TELEMETRY_DELAY);
|
||||
|
||||
delayedTask.arm();
|
||||
return deferred.promise;
|
||||
},
|
||||
|
||||
/**
|
||||
* Initializes telemetry for a content process.
|
||||
*/
|
||||
setupContentProcess: function setupContentProcess() {
|
||||
if (!this.enableTelemetryRecording()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Services.obs.addObserver(this, "content-child-shutdown", false);
|
||||
|
||||
this.gatherStartupHistograms();
|
||||
|
||||
let delayedTask = new DeferredTask(function* () {
|
||||
this._initialized = true;
|
||||
|
||||
this.attachObservers();
|
||||
this.gatherMemory();
|
||||
}.bind(this), TELEMETRY_DELAY);
|
||||
|
||||
delayedTask.arm();
|
||||
},
|
||||
|
||||
testLoadHistograms: function testLoadHistograms(file) {
|
||||
return TelemetryFile.testLoadHistograms(file);
|
||||
},
|
||||
|
@ -1045,7 +1082,6 @@ let Impl = {
|
|||
Services.obs.removeObserver(this, "xul-window-visible");
|
||||
this._hasXulWindowVisibleObserver = false;
|
||||
}
|
||||
Services.obs.removeObserver(this, "quit-application-granted");
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
Services.obs.removeObserver(this, "application-background", false);
|
||||
#endif
|
||||
|
@ -1099,7 +1135,11 @@ let Impl = {
|
|||
observe: function (aSubject, aTopic, aData) {
|
||||
switch (aTopic) {
|
||||
case "profile-after-change":
|
||||
return this.setup();
|
||||
// profile-after-change is only registered for chrome processes.
|
||||
return this.setupChromeProcess();
|
||||
case "app-startup":
|
||||
// app-startup is only registered for content processes.
|
||||
return this.setupContentProcess();
|
||||
case "cycle-collector-begin":
|
||||
let now = new Date();
|
||||
if (!gLastMemoryPoll
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
const Cu = Components.utils;
|
||||
|
||||
Cu.import("resource://gre/modules/TelemetryPing.jsm", this);
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this)
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
|
||||
|
||||
/**
|
||||
* TelemetryStartup is needed to forward the "profile-after-change" notification
|
||||
|
@ -19,9 +19,9 @@ function TelemetryStartup() {
|
|||
|
||||
TelemetryStartup.prototype.classID = Components.ID("{117b219f-92fe-4bd2-a21b-95a342a9d474}");
|
||||
TelemetryStartup.prototype.QueryInterface = XPCOMUtils.generateQI([Components.interfaces.nsIObserver])
|
||||
TelemetryStartup.prototype.observe = function(aSubject, aTopic, aData){
|
||||
if (aTopic == "profile-after-change") {
|
||||
TelemetryPing.observe(null, "profile-after-change", null);
|
||||
TelemetryStartup.prototype.observe = function(aSubject, aTopic, aData) {
|
||||
if (aTopic == "profile-after-change" || aTopic == "app-startup") {
|
||||
TelemetryPing.observe(null, aTopic, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
component {117b219f-92fe-4bd2-a21b-95a342a9d474} TelemetryStartup.js
|
||||
contract @mozilla.org/base/telemetry-startup;1 {117b219f-92fe-4bd2-a21b-95a342a9d474}
|
||||
category profile-after-change TelemetryStartup @mozilla.org/base/telemetry-startup;1
|
||||
category profile-after-change TelemetryStartup @mozilla.org/base/telemetry-startup;1 process=main
|
||||
category app-startup TelemetryStartup @mozilla.org/base/telemetry-startup;1 process=content
|
||||
|
|
Загрузка…
Ссылка в новой задаче