summaryrefslogtreecommitdiffstats
path: root/gfx/tests/mochitest/test_acceleration.html
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--gfx/tests/mochitest/test_acceleration.html163
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>