Index: LayoutTests/compositing/webgl/webgl-copy-image.html |
diff --git a/LayoutTests/compositing/webgl/webgl-copy-image.html b/LayoutTests/compositing/webgl/webgl-copy-image.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d934006f5673e3477d17cc1d9b544e937795677a |
--- /dev/null |
+++ b/LayoutTests/compositing/webgl/webgl-copy-image.html |
@@ -0,0 +1,78 @@ |
+<!-- This is a test for crbug.com/392765, in which Copy image for |
+ WebGL elements were crashing. Must be run with the threaded |
+ compositor enabled. --> |
+<head> |
+<script src="../../resources/js-test.js"></script> |
+<script> |
+ |
+function main() |
+{ |
+ if (!window.testRunner) { |
+ testFailed("Requires window.testRunner"); |
+ } else { |
+ testRunner.waitUntilDone(); |
+ testRunner.dumpAsText(); |
+ window.requestAnimationFrame(initTest); |
+ } |
+} |
+ |
+var tolerance = 1; |
+ |
+function initTest() { |
+ var canvas = document.getElementById("c"); |
+ var gl = canvas.getContext("webgl"); |
+ if (!gl) { |
+ testFailed("Test requires WebGL"); |
+ testRunner.notifyDone(); |
+ return; |
+ } |
+ |
+ gl.clearColor(1, 0, 0, 1); |
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); |
+ |
+ window.requestAnimationFrame(runTest); |
+} |
+ |
+function runTest() { |
+ try { |
+ testRunner.copyImageAtAndCapturePixelsAsyncThen(50, 50, completionCallback); |
+ } catch (e) { |
+ debug('error in runTest'); |
+ debug(e); |
+ testRunner.notifyDone(); |
+ } |
+} |
+ |
+var pixel; |
+function fetchPixelAt(x, y, width, height, snapshot) { |
+ var data = new Uint8Array(snapshot); |
+ pixel = [ |
+ data[4 * (width * y + x) + 0], |
+ data[4 * (width * y + x) + 1], |
+ data[4 * (width * y + x) + 2], |
+ data[4 * (width * y + x) + 3] |
+ ]; |
+} |
+ |
+function completionCallback(width, height, snapshot) { |
+ try { |
+ fetchPixelAt(50, 50, width, height, snapshot); |
+ shouldBeCloseTo('pixel[0]', 255, tolerance); |
+ shouldBeCloseTo('pixel[1]', 0, tolerance); |
+ shouldBeCloseTo('pixel[2]', 0, tolerance); |
+ } catch (e) { |
+ debug('error in completionCallback'); |
+ debug(e); |
+ testRunner.notifyDone(); |
+ return; |
+ } |
+ testRunner.notifyDone(); |
+} |
+ |
+main(); |
+</script> |
+</head> |
+<body> |
+<canvas id="c" width="200" height="200" class="nomargin"></canvas> |
+<div id="console"></div> |
+</body> |