When the sanity test fails, report its snapshot via Telemetry. (bug 1194505, r=mattwoodrow,vladan)

This commit is contained in:
David Anderson 2015-08-13 17:51:31 -07:00
Родитель 2b6cbec11a
Коммит b0b3d88c1e
2 изменённых файлов: 24 добавлений и 1 удалений

Просмотреть файл

@ -74,6 +74,16 @@ function reportTestReason(val) {
histogram.add(val);
}
function reportSnapshotContents(canvas) {
try {
var data = canvas.toDataURL();
Cc['@mozilla.org/observer-service;1'].
getService(Ci.nsIObserverService).
notifyObservers(null, "graphics-sanity-test-failed", data);
} catch (e) {
}
}
function annotateCrashReport(value) {
try {
// "1" if we're annotating the crash report, "" to remove the annotation.
@ -167,7 +177,9 @@ let listener = {
// Perform the compositor backbuffer test, which currently we use for
// actually deciding whether to enable hardware media decoding.
testCompositor(this.win, this.ctx);
if (!testCompositor(this.win, this.ctx)) {
reportSnapshotContents(this.canvas);
}
this.endTest();
},

Просмотреть файл

@ -161,6 +161,7 @@ const EXPERIMENTS_CHANGED_TOPIC = "experiments-changed";
const SEARCH_ENGINE_MODIFIED_TOPIC = "browser-search-engine-modified";
const SEARCH_SERVICE_TOPIC = "browser-search-service";
const COMPOSITOR_CREATED_TOPIC = "compositor:created";
const SANITY_TEST_FAILED_TOPIC = "graphics-sanity-test-failed";
/**
* Get the current browser.
@ -814,6 +815,7 @@ EnvironmentCache.prototype = {
Services.obs.addObserver(this, SEARCH_ENGINE_MODIFIED_TOPIC, false);
Services.obs.addObserver(this, SEARCH_SERVICE_TOPIC, false);
Services.obs.addObserver(this, COMPOSITOR_CREATED_TOPIC, false);
Services.obs.addObserver(this, SANITY_TEST_FAILED_TOPIC, false);
},
_removeObservers: function () {
@ -821,6 +823,7 @@ EnvironmentCache.prototype = {
Services.obs.removeObserver(this, SEARCH_ENGINE_MODIFIED_TOPIC);
Services.obs.removeObserver(this, SEARCH_SERVICE_TOPIC);
Services.obs.removeObserver(this, COMPOSITOR_CREATED_TOPIC);
Services.obs.removeObserver(this, SANITY_TEST_FAILED_TOPIC);
},
observe: function (aSubject, aTopic, aData) {
@ -846,6 +849,9 @@ EnvironmentCache.prototype = {
// first compositor to be created and then query nsIGfxInfo again.
this._onCompositorCreated();
break;
case SANITY_TEST_FAILED_TOPIC:
this._onGraphicsSanityTestFailed(aData);
break;
}
},
@ -925,6 +931,11 @@ EnvironmentCache.prototype = {
}
},
_onGraphicsSanityTestFailed: function (aData) {
let gfxData = this._currentEnvironment.system.gfx;
gfxData.sanityTestSnapshot = aData;
},
/**
* Get the build data in object form.
* @return Object containing the build data.