diff --git a/toolkit/content/aboutSupport.js b/toolkit/content/aboutSupport.js index 2b063d1c678c..65242a6846bb 100644 --- a/toolkit/content/aboutSupport.js +++ b/toolkit/content/aboutSupport.js @@ -366,6 +366,7 @@ var snapshotFormatters = { ? apzInfo.join("; ") : localizedMsg(["apzNone"])); addRowFromKey("features", "webglRenderer"); + addRowFromKey("features", "webgl2Renderer"); addRowFromKey("features", "supportsHardwareH264", "hardwareH264"); addRowFromKey("features", "direct2DEnabled", "#Direct2D"); diff --git a/toolkit/locales/en-US/chrome/global/aboutSupport.properties b/toolkit/locales/en-US/chrome/global/aboutSupport.properties index ecaf7ed75fab..7545ba05508a 100644 --- a/toolkit/locales/en-US/chrome/global/aboutSupport.properties +++ b/toolkit/locales/en-US/chrome/global/aboutSupport.properties @@ -50,8 +50,8 @@ blockedOSVersion = Blocked for your operating system version. # LOCALIZATION NOTE The verb "blocked" here refers to a graphics feature such as "Direct2D" or "OpenGL layers". blockedMismatchedVersion = Blocked for your graphics driver version mismatch between registry and DLL. -# LOCALIZATION NOTE In the following strings, "Direct2D", "DirectWrite" and "ClearType" -# are proper nouns and should not be translated. Feel free to leave english strings if +# LOCALIZATION NOTE In the following strings, "Direct2D", "DirectWrite" and "ClearType" +# are proper nouns and should not be translated. Feel free to leave english strings if # there are no good translations, these are only used in about:support clearTypeParameters = ClearType Parameters @@ -71,6 +71,7 @@ gpuDriverVersion = Driver Version gpuDriverDate = Driver Date gpuActive = Active webglRenderer = WebGL Renderer +webgl2Renderer = WebGL2 Renderer GPU1 = GPU #1 GPU2 = GPU #2 blocklistedBug = Blocklisted due to known issues diff --git a/toolkit/modules/Troubleshoot.jsm b/toolkit/modules/Troubleshoot.jsm index 321023356b16..f8526d3d9269 100644 --- a/toolkit/modules/Troubleshoot.jsm +++ b/toolkit/modules/Troubleshoot.jsm @@ -420,44 +420,63 @@ var dataProviders = { data.direct2DEnabledMessage = statusMsgForFeature(Ci.nsIGfxInfo.FEATURE_DIRECT2D); + ////// + let doc = Cc["@mozilla.org/xmlextras/domparser;1"] .createInstance(Ci.nsIDOMParser) .parseFromString("", "text/html"); - let canvas = doc.createElement("canvas"); - canvas.width = 1; - canvas.height = 1; + function GetWebGLInfo(contextType) { + let canvas = doc.createElement("canvas"); + canvas.width = 1; + canvas.height = 1; - let gl; - try { - gl = canvas.getContext("experimental-webgl"); - } catch(e) {} + /////// - if (gl) { - let ext = gl.getExtension("WEBGL_debug_renderer_info"); - // this extension is unconditionally available to chrome. No need to check. - data.webglRenderer = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL) - + " -- " - + gl.getParameter(ext.UNMASKED_RENDERER_WEBGL); - } else { - let feature; - if (AppConstants.platform == "win") { - // If ANGLE is not available but OpenGL is, we want to report on the - // OpenGL feature, because that's what's going to get used. In all - // other cases we want to report on the ANGLE feature. - let angle = gfxInfo.getFeatureStatus(gfxInfo.FEATURE_WEBGL_ANGLE) == - gfxInfo.FEATURE_STATUS_OK; - let opengl = gfxInfo.getFeatureStatus(gfxInfo.FEATURE_WEBGL_OPENGL) == - gfxInfo.FEATURE_STATUS_OK; - feature = !angle && opengl ? gfxInfo.FEATURE_WEBGL_OPENGL : - gfxInfo.FEATURE_WEBGL_ANGLE; - } else { - feature = gfxInfo.FEATURE_WEBGL_OPENGL; - } - data.webglRendererMessage = statusMsgForFeature(feature); + let creationError = "(no info)"; + + canvas.addEventListener( + "webglcontextcreationerror", + + function(e) { + creationError = e.statusMessage; + }, + + false + ); + + let gl = canvas.getContext(contextType); + if (!gl) + return creationError; + + /////// + + let infoExt = gl.getExtension("WEBGL_debug_renderer_info"); + // This extension is unconditionally available to chrome. No need to check. + let vendor = gl.getParameter(infoExt.UNMASKED_VENDOR_WEBGL); + let renderer = gl.getParameter(infoExt.UNMASKED_RENDERER_WEBGL); + + let contextInfo = vendor + " -- " + renderer; + + /////// + + // Eagerly free resources. + let loseExt = gl.getExtension("WEBGL_lose_context"); + loseExt.loseContext(); + + /////// + + return contextInfo; } + ////// + + data.webglRenderer = GetWebGLInfo("webgl"); + data.webgl2Renderer = GetWebGLInfo("webgl2"); + + ////// + let infoInfo = gfxInfo.getInfo(); if (infoInfo) data.info = infoInfo; diff --git a/toolkit/modules/tests/browser/browser_Troubleshoot.js b/toolkit/modules/tests/browser/browser_Troubleshoot.js index 1a70a1c23ecc..9b4b3a47e877 100644 --- a/toolkit/modules/tests/browser/browser_Troubleshoot.js +++ b/toolkit/modules/tests/browser/browser_Troubleshoot.js @@ -297,6 +297,9 @@ const SNAPSHOT_SCHEMA = { webglRenderer: { type: "string", }, + webgl2Renderer: { + type: "string", + }, info: { type: "object", }, @@ -315,9 +318,6 @@ const SNAPSHOT_SCHEMA = { direct2DEnabledMessage: { type: "array", }, - webglRendererMessage: { - type: "array", - }, }, }, javaScript: {