diff options
Diffstat (limited to 'gfx/tests/mochitest/test_acceleration.html')
-rw-r--r-- | gfx/tests/mochitest/test_acceleration.html | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/gfx/tests/mochitest/test_acceleration.html b/gfx/tests/mochitest/test_acceleration.html new file mode 100644 index 0000000000..dd6e146baf --- /dev/null +++ b/gfx/tests/mochitest/test_acceleration.html @@ -0,0 +1,163 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=627498 +--> +<head> + <title>Test hardware acceleration</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=627498">Mozilla Bug 627498</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script type="application/javascript"> + +// Make sure that acceleration is enabled/disabled the way we expect it to be +// based on platform. + +SimpleTest.waitForExplicitFinish(); + +addEventListener("pageshow", runTest, false); + +function runTest() { + var Cc = SpecialPowers.Cc; + var Ci = SpecialPowers.Ci; + + var sysInfo = SpecialPowers.Services.sysinfo; + var xr = SpecialPowers.Services.appinfo; + + var windows = SpecialPowers.Services.ww.getWindowEnumerator(); + var windowutils; + var acceleratedWindows = 0; + var advancedLayersWindows = 0; + var webrenderWindows = 0; + var layerManagerLog = []; + while (windows.hasMoreElements()) { + windowutils = windows.getNext().windowUtils; + try { + if (windowutils.layerManagerType != "Basic") { + acceleratedWindows++; + } + if (windowutils.layerManagerType == "WebRender") { + webrenderWindows++; + } + if (windowutils.usingAdvancedLayers) { + advancedLayersWindows++; + } + layerManagerLog.push(windowutils.layerManagerType + ":" + + windowutils.usingAdvancedLayers); + } catch (e) { + // The window may not have a layer manager, in which case we get an error. + // Don't count it as an accelerated window. + dump("Didn't get a layer manager! " + e); + } + } + + var osName = sysInfo.getProperty("name"); + switch (osName) { + case "Darwin": // Mac OS X. + // We only enable OpenGL layers on machines that don't support QuickDraw + // plugins. x86-64 architecture is a good proxy for this plugin support. + if (sysInfo.getProperty("arch") != "x86-64") { + is(acceleratedWindows, 0, "Acceleration not supported on x86 OS X"); + } else { + // Workaround for SeaMonkey tinderboxes which don't support acceleration. + if (navigator.userAgent.match(/ SeaMonkey\//)) { + if (acceleratedWindows == 0) { + todo(false, "Acceleration not supported on x86-64 OS X" + + " (This is expected on SeaMonkey (tinderboxes).)"); + break; + } + } + + isnot(acceleratedWindows, 0, "Acceleration enabled on x86-64 OS X"); + } + break; + + case "Windows_NT": // Windows. + var version = parseFloat(sysInfo.getProperty("version")); + if (version == 5.0) { + is(acceleratedWindows, 0, "Acceleration not supported on Windows 2000"); + } else { + // Workaround for SeaMonkey tinderboxes which don't support acceleration. + if (navigator.userAgent.match(/ SeaMonkey\//)) { + if (acceleratedWindows == 0) { + todo(false, "Acceleration not supported on Windows XP or newer" + + " (This is expected on SeaMonkey (tinderboxes).)"); + break; + } + } + + isnot(acceleratedWindows, 0, "Acceleration enabled on Windows XP or newer"); + } + + var gfxInfo = Cc["@mozilla.org/gfx/info;1"].getService(Ci.nsIGfxInfo); + if (version < 6.2) { + ok(!gfxInfo.D2DEnabled, "Direct2D not supported on Windows 2008 or older"); + if (version < 6.1) { + ok(!gfxInfo.DWriteEnabled, "DirectWrite not supported on Windows 2008 or older"); + } else { + ok(gfxInfo.DWriteEnabled, "DirectWrite enabled on Windows 7 or newer"); + } + } else { + ok(gfxInfo.D2DEnabled, "Direct2D enabled on Windows 8 or newer"); + ok(gfxInfo.DWriteEnabled, "DirectWrite enabled on Windows 7 or newer"); + } + + var shouldGetWR = false; + try { + shouldGetWR = SpecialPowers.DOMWindowUtils.isWebRenderRequested; + } catch (e) {} + + var advancedLayersEnabled = false; + var advancedLayersEnabledOnWin7 = false; + try { + advancedLayersEnabled = SpecialPowers.getBoolPref("layers.mlgpu.enabled"); + advancedLayersEnabledOnWin7 = SpecialPowers.getBoolPref("layers.mlgpu.enable-on-windows7"); + } catch (e) {} + var shouldGetAL = advancedLayersEnabled; + if (version < 6.2) { + shouldGetAL &= advancedLayersEnabledOnWin7; + } + if (shouldGetWR) { + shouldGetAL = false; + } + + if (shouldGetAL) { + isnot(advancedLayersWindows, 0, "Advanced Layers enabled on Windows; " + + layerManagerLog.join(",")); + } else { + is(advancedLayersWindows, 0, "Advanced Layers disabled on Windows"); + } + + if (shouldGetWR) { + isnot(webrenderWindows, 0, "WebRender enabled on Windows"); + } else { + is(webrenderWindows, 0, "WebRender disabled on Windows"); + } + break; + + case "Linux": + todo(false, "Acceleration supported on Linux, but only on taskcluster instances (bug 1296086)"); + break; + + default: + if (xr.OS == "Android") { + isnot(acceleratedWindows, 0, "Acceleration enabled on Android"); + } else { + is(acceleratedWindows, 0, "Acceleration not supported on '" + osName + "'"); + } + } + + SimpleTest.finish(); +} + +</script> +</pre> +</body> +</html> |