blob: 50904720487d069ecf6451dd1cef145151e05858 [file] [log] [blame]
<!DOCTYPE html>
<html>
<style>
canvas {
width: 100px;
height: 100px;
}
</style>
<body>
<div>
<p>Frames of a 3-frame animated image with missing loopCount, (repetitionCount = 1):</p>
<canvas id="canvas-1"></canvas>
<canvas id="canvas-2"></canvas>
<canvas id="canvas-3"></canvas>
<canvas id="canvas-4"></canvas>
</div>
<div>
<p>Frames of a 3-frame animated image with loopCount = 1, (repetitionCount = 2):</p>
<canvas id="canvas-a"></canvas>
<canvas id="canvas-b"></canvas>
<canvas id="canvas-c"></canvas>
<canvas id="canvas-d"></canvas>
<canvas id="canvas-e"></canvas>
<canvas id="canvas-f"></canvas>
<canvas id="canvas-g"></canvas>
</div>
<div>
<p>Frames of a 3-frame animated image with loopCount = 0, (repetitionCount = infinite):</p>
<canvas id="canvas-A"></canvas>
<canvas id="canvas-B"></canvas>
<canvas id="canvas-C"></canvas>
<canvas id="canvas-D"></canvas>
<canvas id="canvas-E"></canvas>
<canvas id="canvas-F"></canvas>
<canvas id="canvas-G"></canvas>
</div>
<script>
function drawFrame(image, canvasId) {
return new Promise((resolve) => {
let canvas = document.getElementById("canvas-" + canvasId);
let context = canvas.getContext("2d");
context.drawImage(image, 0, 0, canvas.width, canvas.height);
setTimeout(() => {
resolve(String.fromCharCode(canvasId.charCodeAt() + 1));
}, 30);
});
}
function drawImage(image, canvasId, frameCount) {
let promise = drawFrame(image, canvasId);
for (let frame = 1; frame < frameCount; ++frame) {
promise = promise.then((canvasId) => {
return drawFrame(image, canvasId);
});
}
return promise;
}
function loadImage(src, canvasId, frameCount) {
return new Promise((resolve) => {
let image = new Image;
image.onload = (() => {
drawImage(image, canvasId, frameCount).then(resolve);
});
image.src = src;
});
}
(function() {
if (window.internals)
internals.clearMemoryCache();
if (window.testRunner)
testRunner.waitUntilDone();
var images = [
{ src: "resources/animated-red-green-blue-repeat-1.gif", canvasId: '1', frameCount: 4 },
{ src: "resources/animated-red-green-blue-repeat-2.gif", canvasId: 'a', frameCount: 7 },
{ src: "resources/animated-red-green-blue-repeat-infinite.gif", canvasId: 'A', frameCount: 7 }
];
var promises = [];
for (let image of images)
promises.push(loadImage(image.src, image.canvasId, image.frameCount));
Promise.all(promises).then(() => {
if (window.testRunner)
testRunner.notifyDone();
});
})();
</script>
</body>
</html>