[cairo] xtrace, part the second

Carl Worth cworth at cworth.org
Wed Dec 13 11:04:14 PST 2006


On Wed, 13 Dec 2006 11:31:21 +0200, "Xan Lopez" wrote:
> Assuming a) less X calls = good b) the way xft does things is just
> fine,

There's an implicit goal here of trying to get "new" GTK+ to be no
slower than "old" GTK+. So those assumptions seem quite valid for that
goal.

> just before the actual glyph rendering. So, again. What are we exactly
> doing? Can it be done the way Xft does it?

What's happening here is that given a source pattern, (the description
of the "color" for the text in this case), we're creating from that a
source surface, (a Render picture), to be used by the xlib backend.

So to eliminate that, what we would need is some caching of the
surfaces acquired from patterns. There are a lot of different
approaches that could be used here, with varying levels of difficulty
and benefits. Here are a couple of observations:

* Ideally we'd have a global pattern cache allowing its total size to
  be managed as a single value. (Note: We'd like to have the same
  thing for glyph caches, but currently we have separate per-font
  caches for glyphs. We knew this was not ideal, but we chose this
  approach for reasons of expedience. The same reasons might apply
  here.)

* An easy thing to do is to simply stash any acquired surface in the
  pattern object itself. This will help for repeated use of the same
  pattern object, (for example, set_source_rgb then many show_glyph
  calls). The surface type here would end up being specific to the
  backend being used. It's probably correct to just have a single slot
  and let whichever backend gets there first to use it, (since it's
  much more likely that patterns will be reused with the same backend
  than across multiple backends). This is similar to the situation of
  the surface_private field in cairo_scaled_font_t for example.

* We could implement a small cache of pattern objects, (perhaps
  limited to solid colors), for use when cairo creates its own
  patterns, (inside things like set_source_rgb). This would allow for
  an operation like changing back and forth between two different
  source colors to benefit from a stashed surface inside the pattern
  objects, as described above.

I hope that's helpful,

-Carl
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.freedesktop.org/archives/cairo/attachments/20061213/8f1accdd/attachment.pgp


More information about the cairo mailing list