Index: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
index 5ea30fd1c1b9789fa9c95a9f2eab2fe91a9941cb..33cce6b0aec3bf0ce5f711a30d53b3592f3aa381 100644 |
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
@@ -526,6 +526,30 @@ private: |
RawPtrWillBeMember<WebGLRenderingContextBase> m_context; |
}; |
+static void formatWebGLStatusString(const String& glInfo, const String& infostring, String& statusMessage) |
+{ |
+ if (!infostring.isEmpty()) |
+ statusMessage.append(", " + glInfo + " = " + infostring); |
+} |
+ |
+static String extractWebGLContextCreationError(const WebGraphicsContext3D::WebGraphicsInfo& info) |
+{ |
+ String statusMessage("Could not create a WebGL context"); |
+ formatWebGLStatusString("VENDOR", info.vendorId ? String::format("0x%04x", info.vendorId).utf8().data() : "0xffff", statusMessage); |
+ formatWebGLStatusString("DEVICE", info.deviceId ? String::format("0x%04x", info.deviceId).utf8().data() : "0xffff", statusMessage); |
+ formatWebGLStatusString("GL_VENDOR", info.vendorInfo.utf8().data(), statusMessage); |
+ formatWebGLStatusString("GL_RENDERER", info.rendererInfo.utf8().data(), statusMessage); |
+ formatWebGLStatusString("GL_VERSION", info.driverVersion.utf8().data(), statusMessage); |
+ formatWebGLStatusString("Sandboxed", info.sandboxed ? "yes" : "no", statusMessage); |
+ formatWebGLStatusString("Optimus", info.optimus ? "yes" : "no", statusMessage); |
+ formatWebGLStatusString("AMD switchable", info.amdSwitchable ? "yes" : "no", statusMessage); |
+ formatWebGLStatusString("Reset notification strategy", String::format("0x%04x", info.resetNotificationStrategy).utf8().data(), statusMessage); |
+ formatWebGLStatusString("GPU process crash count", String::number(info.processCrashCount).utf8().data(), statusMessage); |
+ formatWebGLStatusString("ErrorMessage", info.errorMessage.utf8().data(), statusMessage); |
+ statusMessage.append("."); |
+ return statusMessage; |
+} |
+ |
PassOwnPtr<WebGraphicsContext3D> WebGLRenderingContextBase::createWebGraphicsContext3D(HTMLCanvasElement* canvas, WebGLContextAttributes attributes, unsigned webGLVersion) |
{ |
Document& document = canvas->document(); |
@@ -544,47 +568,12 @@ PassOwnPtr<WebGraphicsContext3D> WebGLRenderingContextBase::createWebGraphicsCon |
} |
WebGraphicsContext3D::Attributes wgc3dAttributes = toWebGraphicsContext3DAttributes(attributes, document.topDocument().url().string(), settings, webGLVersion); |
- WebGLInfo glInfo; |
+ WebGraphicsContext3D::WebGraphicsInfo glInfo; |
+ glInfo.testFailContext = shouldFailContextCreationForTesting; |
OwnPtr<WebGraphicsContext3D> context = adoptPtr(Platform::current()->createOffscreenGraphicsContext3D(wgc3dAttributes, 0, &glInfo)); |
if (!context || shouldFailContextCreationForTesting) { |
shouldFailContextCreationForTesting = false; |
- String statusMessage; |
- if (!glInfo.contextInfoCollectionFailure.isEmpty()) { |
- statusMessage.append("Could not create a WebGL context. "); |
- statusMessage.append(glInfo.contextInfoCollectionFailure); |
- String vendorId = String::number(glInfo.vendorId); |
- String deviceId = String::number(glInfo.deviceId); |
- if (vendorId.isEmpty()) |
- statusMessage.append("VendorId = Not Available"); |
- else |
- statusMessage.append("VendorId = " + vendorId); |
- if (deviceId.isEmpty()) |
- statusMessage.append(", DeviceId = Not Available"); |
- else |
- statusMessage.append(", DeviceId = " + deviceId); |
- } else { |
- statusMessage.append("Could not create a WebGL context"); |
- if (!glInfo.vendorInfo.isEmpty()) { |
- statusMessage.append(", VendorInfo = "); |
- statusMessage.append(glInfo.vendorInfo); |
- } else { |
- statusMessage.append(", VendorInfo = Not Available"); |
- } |
- if (!glInfo.rendererInfo.isEmpty()) { |
- statusMessage.append(", RendererInfo = "); |
- statusMessage.append(glInfo.rendererInfo); |
- } else { |
- statusMessage.append(", RendererInfo = Not Available"); |
- } |
- if (!glInfo.driverVersion.isEmpty()) { |
- statusMessage.append(", DriverInfo = "); |
- statusMessage.append(glInfo.driverVersion); |
- } else { |
- statusMessage.append(", DriverInfo = Not Available"); |
- } |
- statusMessage.append("."); |
- } |
- canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcontextcreationerror, false, true, statusMessage)); |
+ canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcontextcreationerror, false, true, extractWebGLContextCreationError(glInfo))); |
return nullptr; |
} |
@@ -986,7 +975,7 @@ WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCa |
drawingBuffer()->bind(GL_FRAMEBUFFER); |
setupFlags(); |
- |
+ |
#define ADD_VALUES_TO_SET(set, values) \ |
for (size_t i = 0; i < arraysize(values); ++i) { \ |
set.insert(values[i]); \ |