drawImage vs CanvasPattern (v9)

Revision 9 of this benchmark created by Kashey on


Description

For drawing sprites, how does fillRect() with a CanvasPattern compare to drawImage? How does it differ for sub-pixel spaced images?

Preparation HTML

<canvas id="screen" width="48" height="48"></canvas>
<canvas id="imgCached" width="48" height="48" style="display:none;"></canvas>
<script>
  var ctx = document.getElementById("screen").getContext("2d");
  var imgCached = document.getElementById("imgCached");
  var patternRepeat, patternNoRepeat;
  var image = document.createElement("img");
  image.onload = function() {
   patternNoRepeat = ctx.createPattern(image, "no-repeat");
   patternRepeat = ctx.createPattern(image, "repeat");
   imgCached.getContext("2d").drawImage(image, 0, 0);
  };
  image.src = "http://icons.iconarchive.com/icons/ph03nyx/super-mario/48/Retro-Mushroom-1UP-2-icon.png";
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Image
ctx.drawImage(image, 0, 0);
ready
Image shifted
ctx.drawImage(image, 1, 1);
ready
Image subpixel
ctx.drawImage(image, 0.1, 0.1);
ready
boosted
ctx.save();
ctx.transform(1.0000001, 0, 0, 1.0000001, 0, 0);
ctx.drawImage(image, 0, 0);
ctx.restore();
ready
Image subpixel
ctx.drawImage(imgCached, 0.5, 0.5);
ready
boosted2
ctx.transform(1.0000001, 0, 0, 1.0000001, 0, 0);
ctx.drawImage(image, 0.1, 0.1);
ready
boosted3
ctx.save();
ctx.transform(1.0000001, 0, 0, 1.0000001, 0.1, 0.1);
ctx.drawImage(image, 0, 0);
ctx.restore();
ready
boosted4
ctx.save();
ctx.transform(1.1, 0, 0, 1.1, 0, 0);
ctx.drawImage(image, 0, 0);
ctx.restore();
ready
boosted5
ctx.save();
ctx.transform(1.5, 0, 0, 1.1, 0, 0);
ctx.drawImage(image, 0, 0);
ctx.restore();
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.