Bug 1140132 - Annotate the current telemetry environment in crash reports. r=ted/gfritzsche
authorBenjamin Smedberg <benjamin@smedbergs.us>
Mon, 13 Apr 2015 12:51:31 -0400
changeset 272973 1815927ac2fc57fa321fbe4bc1184a7767e8f13c
parent 272972 f64790d37d51f149f27a1e51df16dfb2a789f418
child 272974 5add1e8ab1e2cf8741be4a1e6d1f8b0969c85cdb
push id4830
push userjlund@mozilla.com
push dateMon, 29 Jun 2015 20:18:48 +0000
treeherdermozilla-beta@4c2175bb0420 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersted, gfritzsche
bugs1140132
milestone40.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1140132 - Annotate the current telemetry environment in crash reports. r=ted/gfritzsche
toolkit/components/telemetry/TelemetryStartup.js
--- a/toolkit/components/telemetry/TelemetryStartup.js
+++ b/toolkit/components/telemetry/TelemetryStartup.js
@@ -1,30 +1,47 @@
 /* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */
 /* 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/. */
 
 "use strict";
 
-const Cu = Components.utils;
+const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/TelemetryController.jsm", this);
 Cu.import("resource://gre/modules/TelemetrySession.jsm", this);
+Cu.import("resource://gre/modules/TelemetryEnvironment.jsm", this);
 Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
 
 /**
  * TelemetryStartup is needed to forward the "profile-after-change" notification
  * to TelemetryController.jsm.
  */
 function TelemetryStartup() {
 }
 
 TelemetryStartup.prototype.classID = Components.ID("{117b219f-92fe-4bd2-a21b-95a342a9d474}");
-TelemetryStartup.prototype.QueryInterface = XPCOMUtils.generateQI([Components.interfaces.nsIObserver])
+TelemetryStartup.prototype.QueryInterface = XPCOMUtils.generateQI([Components.interfaces.nsIObserver]);
 TelemetryStartup.prototype.observe = function(aSubject, aTopic, aData) {
   if (aTopic == "profile-after-change" || aTopic == "app-startup") {
     TelemetryController.observe(null, aTopic, null);
     TelemetrySession.observe(null, aTopic, null);
   }
+  if (aTopic == "profile-after-change") {
+    annotateEnvironment();
+    TelemetryEnvironment.registerChangeListener("CrashAnnotator", annotateEnvironment);
+    TelemetryEnvironment.onInitialized().then(() => annotateEnvironment());
+  }
+}
+
+function annotateEnvironment() {
+  try {
+    let cr = Cc["@mozilla.org/toolkit/crash-reporter;1"]
+      .getService(Ci.nsICrashReporter);
+    let env = JSON.stringify(TelemetryEnvironment.currentEnvironment);
+    cr.annotateCrashReport("TelemetryEnvironment", env);
+  } catch (e) {
+    // crash reporting not built or disabled? Ignore errors
+  }
 }
 
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([TelemetryStartup]);