<!-- 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.copyImageThen(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>