chromium/third_party/blink/web_tests/fast/canvas/canvas-large-fills.html

<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>

<pre id="console"></pre>
<canvas id="c" width="100" height="50"></canvas>

<script>
// Tests that using the different composite modes to fill large rects doesn't crash and works as expected.
var canvas = document.getElementById("c");
var ctx = canvas.getContext("2d", {willReadFrequently: true});

function clearContextToGreen() {
    ctx.globalCompositeOperation="source-over";
    ctx.fillStyle = "rgb(0, 255, 0)";
    ctx.fillRect(0, 0, canvas.width, canvas.height);
}

var testScenarios = [
    ['Test source-over', 'source-over', [0, 0, 255]],
    ['Test source-in', 'source-in', [0, 0, 255]],
    ['Test source-out', 'source-out', [0, 0, 0]],
    ['Test source-atop', 'source-atop', [0, 0, 255]],
    ['Test destination-over', 'destination-over', [0, 255, 0]],
    ['Test destiation-in', 'destination-in', [0, 255, 0]],
    ['Test destination-out', 'destination-out', [0, 0, 0]],
    ['Test destination-atop', 'destination-atop', [0, 255, 0]],
    ['Test lighter', 'lighter', [0, 255, 255]],
    ['Test copy', 'copy', [0, 0, 255]],
    ['Test xor', 'xor', [0, 0, 0]]
];

var fillSize = 0;
function testLargeRect(compositeMode, expected) {
    clearContextToGreen();
    ctx.fillStyle = "rgb(0, 0, 255)";
    ctx.globalCompositeOperation = compositeMode;
    ctx.fillRect(0, 0, fillSize, fillSize);

    var data = ctx.getImageData(0, 0, canvas.width, canvas.height).data;
    var testPassed = true;
    for (var i = 0; i < 3; i++)
        if (data[i] != expected[i])
            testPassed = false;
    assert_true(testPassed);
}

[10000, 50000, 100000].forEach(function(fillSizeItem) {
    fillSize = fillSizeItem;
    generate_tests(testLargeRect, testScenarios);
});

</script>