diff options
-rw-r--r-- | components/gfx/SanityTest.js | 45 |
1 files changed, 18 insertions, 27 deletions
diff --git a/components/gfx/SanityTest.js b/components/gfx/SanityTest.js index 03b9067ef..3bf7a3f1d 100644 --- a/components/gfx/SanityTest.js +++ b/components/gfx/SanityTest.js @@ -22,27 +22,6 @@ const DISABLE_VIDEO_PREF="media.hardware-video-decoding.failed"; const RUNNING_PREF="sanity-test.running"; const TIMEOUT_SEC=20; -// GRAPHICS_SANITY_TEST histogram enumeration values -const TEST_PASSED=0; -const TEST_FAILED_RENDER=1; -const TEST_FAILED_VIDEO=2; -const TEST_CRASHED=3; -const TEST_TIMEOUT=4; - -// GRAPHICS_SANITY_TEST_REASON enumeration values. -const REASON_FIRST_RUN=0; -const REASON_FIREFOX_CHANGED=1; -const REASON_DEVICE_CHANGED=2; -const REASON_DRIVER_CHANGED=3; - -// GRAPHICS_SANITY_TEST_OS_SNAPSHOT histogram enumeration values -const SNAPSHOT_VIDEO_OK=0; -const SNAPSHOT_VIDEO_FAIL=1; -const SNAPSHOT_ERROR=2; -const SNAPSHOT_TIMEOUT=3; -const SNAPSHOT_LAYERS_OK=4; -const SNAPSHOT_LAYERS_FAIL=5; - function testPixel(ctx, x, y, r, g, b, a, fuzz) { var data = ctx.getImageData(x, y, 1, 1); @@ -55,6 +34,11 @@ function testPixel(ctx, x, y, r, g, b, a, fuzz) { return false; } +function stopRunning() { + Preferences.set(RUNNING_PREF, false); + Services.prefs.savePrefFile(null); +} + function setTimeout(aMs, aCallback) { var timer = Cc['@mozilla.org/timer;1']. createInstance(Ci.nsITimer); @@ -100,15 +84,18 @@ function testCompositor(win, ctx) { var testPassed = true; if (!verifyVideoRendering(ctx)) { + stopRunning(); Preferences.set(DISABLE_VIDEO_PREF, true); testPassed = false; } if (!verifyLayersRendering(ctx)) { + stopRunning(); testPassed = false; } if (testPassed) { + stopRunning(); } return testPassed; @@ -130,8 +117,10 @@ var listener = { this.win.onload = this.onWindowLoaded.bind(this); this.utils = this.win.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIDOMWindowUtils); + // Stop running the test if it timed out. setTimeout(TIMEOUT_SEC * 1000, () => { if (this.win) { + stopRunning(); this.endTest(); } }); @@ -208,17 +197,19 @@ SanityTest.prototype = { Ci.nsISupportsWeakReference]), shouldRunTest: function() { - // Only test gfx features if firefox has updated, or if the user has a new - // gpu or drivers. + // Only test GFX features if the application was updated, or if the user + // has a new GPU or drivers. var buildId = Services.appinfo.platformBuildID; var gfxinfo = Cc["@mozilla.org/gfx/info;1"].getService(Ci.nsIGfxInfo); + // Stop the test and disable hardware video decoding if we crashed. if (Preferences.get(RUNNING_PREF, false)) { Preferences.set(DISABLE_VIDEO_PREF, true); + stopRunning(); return false; } - function checkPref(pref, value, reason) { + function checkPref(pref, value) { var prefValue = Preferences.get(pref, undefined); if (prefValue == value) { return true; @@ -227,9 +218,9 @@ SanityTest.prototype = { } // TODO: Handle dual GPU setups - if (checkPref(DRIVER_PREF, gfxinfo.adapterDriverVersion, REASON_DRIVER_CHANGED) && - checkPref(DEVICE_PREF, gfxinfo.adapterDeviceID, REASON_DEVICE_CHANGED) && - checkPref(VERSION_PREF, buildId, REASON_FIREFOX_CHANGED)) + if (checkPref(DRIVER_PREF, gfxinfo.adapterDriverVersion) && + checkPref(DEVICE_PREF, gfxinfo.adapterDeviceID) && + checkPref(VERSION_PREF, buildId)) { return false; } |