On 8/8/14, 8:43 PM, Rik Cabanier wrote:
The problem is that a large number of drawImage calls have a lot of
overhead due to JS crossings and housekeeping.

Could we please quantify this?

I measured the "JS crossings" part of this, because it's easy: Just have the C++ side of drawImage return immediately. What I see if I do that is that a drawImage call that passes an HTMLImageElement and two integers takes about 17ns on my hardware in a current Firefox nightly on Mac.

For scale, a full-up drawImage call that actually does something takes the following amounts of time in various browsers I have [1]:

Firefox nightly: ~9500ns/call
Chrome dev: ~4300ns/call
Safari 7.0.5 and WebKit nightly: ~3000ns/call

all with noise (when averaged across 100000 calls) that's way more than 17ns.

So I'm not sure "JS crossings" is a significant performance cost here. I'd be interested in which parts of "housekeeping" would be shareable across the multiple images in the proposal and how much time those take in practice.

-Boris

[1] The specific testcase I used:

<!DOCTYPE html>
<img src="http://www.mozilla.org/images/mozilla-banner.gif";>
<script>
  onload = function() {
    var c = document.createElement("canvas").getContext("2d");
    var count = 1000000;
    var img = document.querySelector("img");
    var start = new Date;
    for (var i = 0; i < count; ++i) c.drawImage(img, 0, 0);
    var stop = new Date;
    console.log((stop - start) / count * 1e6 + "ns per call");
  }
</script>

Reply via email to