[cairo] Overhead reduction

Jonathan Morton jonathan.morton at movial.com
Fri May 15 02:27:33 PDT 2009

> > It should be noted that the object pool implementation is not
> > thread-safe - if this is inappropriate, modifications will be required
> > to use atomic_test_and_inc/dec operators.  Leak detectors might also
> > complain about the pools, since they are not drained on shutdown.
> > Suggestions on these matters are welcome.
> At least in pixman thread-safety is necessary. When used by cairo it
> can and will be called from multiple threads. In fact there was an
> image pool in pixman for a brief while, but it caused crashes in
> multi-threaded applications.

Okay, that's useful to know.  An atomic-test-and-inc routine should be
roughly the same speed as a plain i++ on most modern hardware, it just
needs to be implemented properly, which is an utter pain.

> Other than that, an image pool is a good idea, and it would make sense
> to add synchronization primitives to pixman, similar to what is in
> cairo-mutex-*.h already. If we can track down the contributors to that
> file and get them to agree to relicensing to MIT, the code could be
> reused directly.

Shall I leave you to that part?  I can probably fix up the patch to use
the primitives once the licensing is sorted out.

> Can we do this with a fixed-size array on the stack instead? If
> possible, I'd like to avoid alloca() for the reasons listed in the man
> page.

It seems that it's strictly speaking a variable-size array, because it's
handling a general case.  But most compilers probably don't support the
dynamic-sized array syntax that GCC does, which would be the cleaner
alternative to alloca() otherwise.

Perhaps using a fixed allocation on the stack would be appropriate for
the common case(s) which use very low numbers, and falling back to
malloc for the general case.

From: Jonathan Morton
      jonathan.morton at movial.com

More information about the cairo mailing list