Bug 1915045 Ensure decode tasks are scheduled on BufferingState::Enter() r=media...
[gecko.git] / dom / canvas / test / webgl-mochitest / driver-info.js
blob5e68ce50ba74d4df9874b65df65b67549b846710
1 DriverInfo = (function () {
2   // ---------------------------------------------------------------------------
3   // Debug info handling
5   function info(str) {
6     window.console.log("Info: " + str);
7   }
9   // ---------------------------------------------------------------------------
10   // OS and driver identification
11   //   Stolen from dom/canvas/test/webgl/test_webgl_conformance_test_suite.html
12   function detectDriverInfo() {
13     var canvas = document.createElement("canvas");
14     canvas.width = 1;
15     canvas.height = 1;
17     var type = "";
18     var gl = null;
19     try {
20       gl = canvas.getContext("experimental-webgl");
21     } catch (e) {}
23     if (!gl) {
24       info("Failed to create WebGL context for querying driver info.");
25       throw "WebGL failed";
26     }
28     var ext = gl.getExtension("WEBGL_debug_renderer_info");
29     if (!ext) {
30       throw "WEBGL_debug_renderer_info not available";
31     }
33     var webglRenderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
34     return webglRenderer;
35   }
37   function detectOSInfo() {
38     var os = null;
39     var version = null;
40     if (navigator.platform.indexOf("Win") == 0) {
41       os = OS.WINDOWS;
43       var versionMatch = /Windows NT (\d+.\d+)/.exec(navigator.userAgent);
44       version = versionMatch ? parseFloat(versionMatch[1]) : null;
45       // Version 6.0 is Vista, 6.1 is 7.
46     } else if (navigator.platform.indexOf("Mac") == 0) {
47       os = OS.MAC;
49       var versionMatch = /Mac OS X (\d+.\d+)/.exec(navigator.userAgent);
50       version = versionMatch ? parseFloat(versionMatch[1]) : null;
51     } else if (navigator.appVersion.includes("Android")) {
52       os = OS.ANDROID;
54       try {
55         // From layout/tools/reftest/reftest.js:
56         version = SpecialPowers.Services.sysinfo.getProperty("version");
57       } catch (e) {
58         info("No SpecialPowers: can't query android version");
59       }
60     } else if (navigator.platform.indexOf("Linux") == 0) {
61       // Must be checked after android, as android also has a 'Linux' platform string.
62       os = OS.LINUX;
63     }
65     return [os, version];
66   }
68   var OS = {
69     WINDOWS: "windows",
70     MAC: "mac",
71     LINUX: "linux",
72     ANDROID: "android",
73   };
75   var DRIVER = {
76     INTEL: "intel",
77     MESA: "mesa",
78     NVIDIA: "nvidia",
79     ANDROID_X86_EMULATOR: "android x86 emulator",
80     ANGLE: "angle",
81   };
83   var kOS = null;
84   var kOSVersion = null;
85   var kRawDriver = null;
86   var kDriver = null;
88   try {
89     [kOS, kOSVersion] = detectOSInfo();
90   } catch (e) {
91     // Generally just fails when we don't have SpecialPowers.
92   }
94   try {
95     kRawDriver = detectDriverInfo();
97     if (kRawDriver.includes("llvmpipe")) {
98       kDriver = DRIVER.MESA;
99     } else if (kRawDriver.includes("Android Emulator")) {
100       kDriver = DRIVER.ANDROID_X86_EMULATOR;
101     } else if (kRawDriver.includes("ANGLE")) {
102       kDriver = DRIVER.ANGLE;
103     } else if (kRawDriver.includes("NVIDIA")) {
104       kDriver = DRIVER.NVIDIA;
105     } else if (kRawDriver.includes("Intel")) {
106       kDriver = DRIVER.INTEL;
107     }
108   } catch (e) {
109     // detectDriverInfo is fallible where WebGL fails.
110   }
112   function dump(line_out_func) {
113     let lines = [
114       "[DriverInfo] userAgent: " + navigator.userAgent,
115       "[DriverInfo] kRawDriver: " + kRawDriver,
116       "[DriverInfo] kDriver: " + kDriver,
117       "[DriverInfo] kOS: " + kOS,
118       "[DriverInfo] kOSVersion: " + kOSVersion,
119     ];
120     lines.forEach(line_out_func);
121   }
123   dump(x => console.log(x));
125   return {
126     DRIVER,
127     OS,
128     dump,
129     getDriver() {
130       return kDriver;
131     },
132     getOS() {
133       return kOS;
134     },
135     getOSVersion() {
136       return kOSVersion;
137     },
138   };
139 })();