chromium/third_party/blink/web_tests/compositing/webgl/webgl-repaint.html

<!DOCTYPE html>
<html>
<head>
<style type="text/css" media="screen">
canvas {
    margin: 20px;
    width: 200px;
    height: 200px;
    padding: 0 0;
}
.border {
    border: 1px solid black;
}
</style>
<script src="../../resources/run-after-layout-and-paint.js"></script>
<script>
function initWebGL()
{
    var canvas = document.getElementById('canvas');
    var gl = canvas.getContext("webgl", {'antialias': false});
    if (!gl) {
        alert("No WebGL context found");
        return null;
    }

    return gl;
}

var gl = null;

function init()
{
  gl = initWebGL();
  gl.viewport(0, 0, 200, 200);
  gl.clearColor(1, 0, 0, 1); // red
  gl.clear(gl.COLOR_BUFFER_BIT);
  runAfterLayoutAndPaint(drawGreen, true);
}

// Note that this test can't actually reproduce an under-invalidation bug when
// running as a web test, because the under-invalidation causes surface
// under-damage only, and it won't be shown in the captured image as the image
// is always treated as fully damaged. You need to run this test in browser
// to verify an under-invalidation bug.
function drawGreen()
{
  gl.clearColor(0, 1, 0, 1); // green
  gl.clear(gl.COLOR_BUFFER_BIT);
}

</script>
</head>
<body onload="init()">
<canvas id="canvas" width="200" height="200"></canvas>
</body>
</html>