Add mochitest to monitor backends. - r?jrmuizel draft
authorJeff Gilbert <jdashg@gmail.com>
Wed, 30 Mar 2016 17:37:06 -0700
changeset 346384 615f8a4a2de41c8e734c0643c8e8c9d68dda9ac3
parent 346383 2b5931ca5b493a7617e7ff513205b63a774cee4f
child 346385 70d5b72afa7417c001841a26bb1218075bdce1da
push id14369
push userjgilbert@mozilla.com
push dateFri, 01 Apr 2016 01:01:39 +0000
reviewersjrmuizel
bugs100644
milestone48.0a1
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
dom/canvas/test/webgl-mochitest.ini
dom/canvas/test/webgl-mochitest/test_backends.html
--- 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>