[whatwg] Proposal: Add CanvasRenderingContext2D.fillRule with "nonzero" (default) and "evenodd" options
Rik Cabanier
cabanier at gmail.com
Wed Jan 9 10:49:55 PST 2013
Thanks for investigating this!
I opened a moderately complex file [1] and it had 19200 fills. The overhead
in ms then becomes
enum boolean
Firefox .5 .25
Safari .9 .6
Chrome 1.1 8
Opera 3 1.6
This is assuming that the extra parsing time and validation on the c++ side
take no time.
A quick search on the web shows that mobile browsers are about 8 times
slower.
Considering that the file takes a couple of seconds to render, it seems
that the overhead is negligible.
1:
http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/showcase/illustrator/pdfs/magic-paintbrush-howto.pdf
On Wed, Jan 9, 2013 at 9:13 AM, Boris Zbarsky <bzbarsky at mit.edu> wrote:
> On 1/9/13 1:20 AM, Rik Cabanier wrote:
>
>> Also, would there be a performance impact of having a string
>> argument for a call that happens very frequently?
>>
>
> That's an excellent question. The answer is that it depends.
>
> Here's a testcase that exercises setting a property to a WebIDL enum and
> measures the time in ns per property set:
>
> <script>
> var xhr = new XMLHttpRequest;
> xhr.open("GET", "");
> var count = 1000000;
> var start = new Date;
> for (var i = 0; i < count; ++i) {
> xhr.responseType = "text";
> }
> var stop = new Date;
> alert((stop - start) / count * 1e6);
> </script>
>
> What I see on my hardware in a current Firefox nightly is that this takes
> about 27ns per set (this is on a 6-month-old fast laptop, for context, but
> of course you can measure on the hardware of your choice). About 8-10ns of
> that is the general overhead associated with the loop counter, the setter
> invocation, etc. If my profiler is not lying to me, another several ns is
> the actual implementation of the C++ responseType setter. The rest of the
> time is spent dealing with the string. For what it's worth, it's possible
> we could make the string bit faster for cases when a constant string is
> being used, as above; I'd have to think about it a bit.
>
> Here's a similar testcase that exercises a boolean:
>
> <script>
> var xhr = new XMLHttpRequest;
> xhr.open("GET", "");
> var count = 1000000;
> var start = new Date;
> for (var i = 0; i < count; ++i) {
> xhr.withCredentials = false;
> }
> var stop = new Date;
> alert((stop - start) / count * 1e6);
> </script>
>
> The time I see now is closer to 12-13ns. So there is definitely overhead
> associated with the string: about 15ns per call. How many calls are we
> expecting people to make here?
>
> But as I said, it depends. The numbers are quite different in other UAs.
> Testing a Chrome 25 dev channel build, a WebKit nightly (labeled "Safari"
> below), and and Opera build that claims to be "12.50 internal", I get
> numbers like so, in ns (all with a few ns plus or minus; I'm leaving off
> the error bars):
>
> enum boolean
> Firefox 27 13
> Safari 51 33
> Chrome 58 40
> Opera 158 82
>
> so how long this stuff takes is clearly pretty implementation-dependent.
> And note that these are upper bounds, since I have no guarantees that the
> time taken by the actual C++ setters is negligible in these case (except
> for Firefox, where profiles show that it is). For example, Chrome gets
> about 30% slower if I set responseType to "document" instead of "text", as
> far as I can tell, and that might be due to the C++ side.
>
> Hope that helps,
> Boris
>
> P.S. For a real fun time, try doing xhr.responseType = false, as I
> accidentally did at some point while testing this and look at the resulting
> numbers. ;)
>
More information about the whatwg
mailing list