[cairo] Performance of the image surface back-end

Vladimir Vukicevic vladimir at pobox.com
Sat Aug 16 17:27:45 PDT 2008


On Aug 16, 2008, at 1:15 AM, Nicholas Allen wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Vladimir Vukicevic wrote:
>> On Aug 15, 2008, at 6:20 AM, Nicholas Allen wrote:
>>> Cairo (image surface back-end version 1.6.4 on Windows):
>>>
>>> ~     DrawHorizLine                 44352 ms             1000000  
>>> solid
>>> horiz lines from 0.5, 50.5 to 500.5, 50.5
>>
>> This is not actually a pixel-aligned horizontal line, unless you are
>> using the non-default SQUARE endcaps.  The horizontal line would be
>> from 0.0, 50.5 to 501.0, 50.5.  With this line, you are getting
>> essentially the slowest possible path for path rasterization;  
>> however,
>> even with that, it seems quite slow.  As others mentioned, seeing the
>> source for your benchmark would be useful!  (If, however, you are
>> explicitly setting SQUARE endcaps, then something is likely going
>> quite wrong.)
>
>
> Thanks for pointing out that error. At the moment I am just trying to
> get something to profile and not that draws correctly. If this 0.5
> offset can slow a line down by factors of a hundred or so then I would
> say this indicates some serious problems with the line capping code.

The problem in your case is that the line caps are -not- drawn.  A  
stroke which results in a fully pixel-aligned outline is just a fast  
solid fill.  One that's not pixel aligned (such as one that's offset  
by 0.5 pixel that causes the stroke outline to fall on a non-pixel  
boundary) ends up going through the slower rendering path because of  
the antialiasing that has to happen at that half pixel.  This is, as  
you say, not ideal, and some optimization is certainly possible (and  
some is in progress), and it is certainly slower than code that only  
has to deal with pixel-aligned strokes without any antialiasing.

    - Vlad



More information about the cairo mailing list