Add mochitest to monitor backends. - r?jrmuizel
draft
Add mochitest to monitor backends. - r?jrmuizel
From c7620e4a4050a983393748884823d6410801440b Mon Sep 17 00:00:00 2001
---
dom/canvas/test/webgl-mochitest.ini | 1 +
dom/canvas/test/webgl-mochitest/test_backends.html | 165 +++++++++++++++++++++
2 files changed, 166 insertions(+)
create mode 100644 dom/canvas/test/webgl-mochitest/test_backends.html
MozReview-Commit-ID: Id91Oo49MMJ
--- a/dom/canvas/test/webgl-mochitest.ini
+++ b/dom/canvas/test/webgl-mochitest.ini
@@ -43,16 +43,17 @@ fail-if = (os == 'android') || (os == 'l
fail-if = (os == 'mac' && os_version == '10.6')
[webgl-mochitest/ensure-exts/test_WEBGL_draw_buffers.html]
# Win7 is 6.1
fail-if = (os == 'android') || (os == 'win' && (os_version == '5.1' || os_version == '6.1'))
[webgl-mochitest/ensure-exts/test_common.html]
+[webgl-mochitest/test_backends.html]
[webgl-mochitest/test_backbuffer_channels.html]
fail-if = (os == 'b2g')
[webgl-mochitest/test_depth_readpixels.html]
[webgl-mochitest/test_capture.html]
support-files = captureStream_common.js
[webgl-mochitest/test_cubemap_must_be_square.html]
[webgl-mochitest/test_depth_tex_lazy_clear.html]
[webgl-mochitest/test_draw.html]
new file mode 100644
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_backends.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset='UTF-8'>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+</head>
+<body>
+<script>
+
+function RunWithPrefs(prefPairList, func) {
+ var prefEnv = {'set': prefPairList};
+ try {
+ SpecialPowers.pushPrefEnv(prefEnv, func);
+ } catch (e) {
+ console.log('Warning: Failed to set prefs: ' + JSON.stringify(prefPairList));
+ func();
+ }
+}
+
+////////////////////////////////////////
+
+var expectD3DType;
+try {
+ // code borrowed from browser/modules/test/browser_taskbar_preview.js
+ var version = SpecialPowers.Services.sysinfo.getProperty('version');
+ version = parseFloat(version);
+
+ // Version 6.0 is Vista, 6.1 is 7.
+ if (version >= 6.0)
+ expectD3DType = 'd3d11';
+ else
+ expectD3DType = 'd3d9';
+} catch (e) {
+ expectD3DType = 'd3d11';
+}
+
+function GetRenderer() {
+ var c = document.createElement('canvas');
+ var gl = c.getContext('experimental-webgl');
+ if (!gl)
+ return undefined;
+
+ var ext = gl.getExtension('WEBGL_debug_renderer_info');
+ if (!ext)
+ throw new Error('Requires WEBGL_debug_renderer_info.');
+
+ var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
+ return renderer;
+}
+
+function GetRendererType() {
+ var renderer = GetRenderer();
+ if (renderer === undefined)
+ return 'none';
+
+ if (renderer.includes('ANGLE')) {
+ if (renderer.includes('Microsoft Basic Render Driver')) // Also includes 'Direct3D11'.
+ return 'warp';
+ if (renderer.includes('Direct3D11'))
+ return 'd3d11';
+ if (renderer.includes('Direct3D9'))
+ return 'd3d9';
+
+ } else {
+ return 'gl';
+ }
+
+ throw new Error('Unrecognized renderer type for: ' + renderer);
+}
+
+function TestActualType(testName, expectedType) {
+ var actualType = GetRendererType();
+ ok(actualType == expectedType,
+ '[' + testName + '] Expected ' + expectedType + ', was ' + actualType);
+}
+
+////////////////////////////////////////
+
+function TestDefault() {
+ var expectedType = 'gl';
+ if (navigator.platform.indexOf('Win') == 0) {
+ expectedType = expectD3DType;
+ }
+ TestActualType('TestDefault', expectedType);
+
+ if (expectedType == 'none' || expectedType == 'gl') {
+ var prefPairList = [
+ ['webgl.disabled', true],
+ ];
+ RunWithPrefs(prefPairList, TestDisabled);
+ return;
+ }
+
+ var prefPairList = [
+ ['webgl.angle.force-warp', true],
+ ];
+ RunWithPrefs(prefPairList, TestWARP);
+}
+
+
+function TestWARP() {
+ var expectedType = (expectD3DType == 'd3d11') ? 'warp' : 'none';
+ TestActualType('TestWARP', expectedType);
+
+ var prefPairList = [
+ ['webgl.angle.force-warp', false],
+ ['webgl.angle.force-d3d11', true],
+ ];
+ RunWithPrefs(prefPairList, TestD3D11);
+}
+
+
+function TestD3D11() {
+ var expectedType = (expectD3DType == 'd3d11') ? 'd3d11' : 'none';
+ TestActualType('TestD3D11', expectedType);
+
+ var prefPairList = [
+ ['webgl.angle.force-d3d11', false],
+ ['webgl.angle.try-d3d11', false],
+ ];
+ RunWithPrefs(prefPairList, TestD3D9);
+}
+
+
+function TestD3D9() {
+ TestActualType('TestD3D9', 'd3d9');
+
+ var prefPairList = [
+ ['webgl.angle.try-d3d11', true],
+ ['webgl.disable-angle', true],
+ ];
+ RunWithPrefs(prefPairList, TestWinGL);
+}
+
+
+function TestWinGL() {
+ TestActualType('TestWinGL', 'gl');
+
+ var prefPairList = [
+ ['webgl.disabled', true],
+ ];
+ RunWithPrefs(prefPairList, TestDisabled);
+}
+
+
+function TestDisabled() {
+ TestActualType('TestDisabled', 'none');
+
+ SimpleTest.finish();
+}
+
+////////////////////////////////////////
+
+SimpleTest.waitForExplicitFinish();
+
+var prefPairList = [
+ ['webgl.force-enabled', true],
+ ['webgl.enable-debug-renderer-info', true],
+];
+RunWithPrefs(prefPairList, TestDefault);
+
+</script>
+</body>
+</html>