[cairo] Performance analysis of a Cairo application

Ivan Baldo ibaldo at adinet.com.uy
Fri Oct 19 11:18:12 PDT 2007

    Hello Dan, thanks for answering!

El 18/10/07 19:38, Dan Amelang escribió:
> On 10/17/07, Ivan Baldo <ibaldo at adinet.com.uy> wrote:
>>     Hello.
>>     I want my (under development) application to run faster, so I want
>> to know where most of the time is spent to focus this optimization effort.
>> ...
>>     Instead I am getting things like this:
>>     1% main()
>> 99% draw()
>>     50% drawThings1()
>>     50% drawThings2()
>>     Thats because both functions have equal complexity on my code, but I
>> know that actually drawThings1 is using Cairo in a way that it is slower
>> for Cairo or my graphics card to process than drawThings2.
> And how do you know this?
    Intuition, and I know that it isn't the right way to profile 
programs and optimize them, thats why I looked at gprof and oprofile, 
but didn't get meaningful results for my purpose, so after googling a 
bit I decided that it was time to ask for help :-).

> The Right Thing To Do is use oprofile to get global, system-wide
> profiles what will contain performance information for both your
> application code, cairo, and the X server. That should be all you
> need, don't worry about the work your graphics card is doing. It's
> unlikely that your graphics card is involved in the bottleneck, in
> fact, on many (most?) systems today, the graphics card isn't doing
> that much to accelerate cairo (yet).
> So you want to find out what your CPU is spending its time doing, and
> oprofile is the way to get that.
    I get that with oprofile, you are right, but it is not what I am 
looking because it is not centered on _the outside effects accumulated 
on my application_.
    Maybe I am not being clear by email (or my bad English), to help 
explain this a bit (and to simplify my research) I made this simple 
standalone Cairo XRender application (based on the Cairo boilerplate 
code) that it is attached.
    It has two functions (testfast and testslow) that call one function 
that does the actual work but only varying the size of the drawing.
    I get this output:
Elapsed times: fast 3710ms (22%), slow 12892ms (77%), total 16602ms.
    It doesn't matter if I use gprof or qprof or oprofile, none of this 
tools told me that testfast accumulated to the 22% of the running time 
and that testslow accumulated to the 77% of the running time.
    To repeat, I would like a call-graph that says something like this:

    77% testslow
        77% test
    22% testfast
        22% test

    100% test

    100% test

    That way, for a given function, I could know how its real world time 
is spent and hint where I could look first to start optimizing.
    My application does very little computation so its time is spent 
mostly on Cairo, I know I can use Cairo better with a little bit of 
extra work, but I want to know where to start to improve my use of 
Cairo. In other words: I don't need to optimize my application itself 
but the Cairo usage patterns that my application employs.
    How do Cairo users do that analysis?

Ivan Baldo - ibaldo at adinet.com.uy - http://ibaldo.codigolibre.net/
ICQ 10215364 - Phone/FAX (598) (2) 613 3223.
Caldas 1781, Malvin, Montevideo, Uruguay, South America.
We believe that we are free, but in reality we are not! Are we?
Alternatives: ibaldo at codigolibre.net - http://go.to/ibaldo

-------------- next part --------------
A non-text attachment was scrubbed...
Name: cairoprofiletest.c
Type: text/x-csrc
Size: 3691 bytes
Desc: not available
Url : http://lists.cairographics.org/archives/cairo/attachments/20071019/4da5f803/attachment.c 

More information about the cairo mailing list