gecko-dev/gfx/tests/mochitest/test_acceleration.html

167 строки
5.5 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=627498
-->
<head>
<title>Test hardware acceleration</title>
<script type="application/javascript" 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 = Cc["@mozilla.org/system-info;1"].getService(Ci.nsIPropertyBag2);
var xr = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime);
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.isWebRenderBuilt &&
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>