[cairo] Compositing benchmarks
jeff at infidigm.net
Sat Mar 3 21:50:20 PST 2007
In my investigation into 'fixing' libpixman cairo's software compositing
code, I built a benchmarking suite for different software and hardware
In theory, it supports the following backend:
- pixman (directly)
- evas_core (compositing routines from enlightenment)
- intel performance primitives
The x and glitz backends might be a little suspect, as I wasn't
completely sure what I was doing.
Here are some results:
The benchmark is compositing solid square images of exponentially
increasing size 100 times in a row. The color of the images are src color
(0xa4045090), dest color (0xe0e01000) (some backends optimize for alpha
of 255 or 0). The benchmarks were performed on a Intel(R) Xeon(TM) CPU
The most interesting:
argb32 OVER argb32
(./test -b oil,pixman,cairo,ipp,evas_core -o OVER --no-mask -s 33 -f ARGB32)
- liboil is the clear winner here. It looks like liboil is memory bound
because there is a sharp drop off where the image's would no longer
fit in cache. Even when we are out of cache liboil is about 4x faster
than cairo. However, the liboil backend that was measured took
advantage of the fact that it could treat the images as a single
contiguous row in memory.
- This shows the same data as above, except the 'cheat' in liboil has
been disabled. It looks pretty much how one would expect. The
zig-zags are likely due to cache-size/image-size interactions.
argb32 ADD argb32
(./test -b oil,pixman,cairo,ipp,evas_core -o ADD --no-mask -s 33 -f ARGB32)
- liboil doesn't do nearly as well here. pixman matches it pretty
closely. ipp takes a small lead as the image sizes get large.
I have put up a preview version of the source code at:
It isn't very clean, or usable so don't expect much.
In addition, there is a mostly self contained x86 binary at:
This should make it easier for people wanting to try it out on different
machines. Note, this binary does not link to the ipp libraries because
of distribution issues.
Currently, the results are stored in a sqlite database and all of the
graphing/report generation is done using python and matlab (the binary
tarball does not contain the report generation source) I realize this is
less than ideal and I'll look into making it easier for people to
generate graphs without matlab. For now, it might be easiest if people
just made their results db (results/data.store) available, and I can
produce graphs on Monday.
More information about the cairo