Comment 42 for bug 655024

Revision history for this message
veldt (veldt) wrote :

It looks like if you could have the cairo stroker use a temporary surface in this case, it would be much faster than direct rendering. The major CPU in this bug is spent in a "tesselating" function. Long story short, it looks like there are ways to avoid activating that function. The function is used when cairo renders to xlib or xcb, which I imagine is what murrine does now. This quote indicates that drawing to a "temporary surface" and copying from there should help a lot (future cairo optimizations may fix this):

.. (T)he rasterization method (new in 1.10) used by the image backend can deal with self-intersecting
polygons just fine, so there's no need for tessellating the outline polygon.

.. from cairo bugzilla on this issue at https://bugs.freedesktop.org/show_bug.cgi?id=31589#c3

I assume that rendering to a temporary surface will use this faster "image" backend (6 or 7 times faster in transmission-gtk+murrine, according to cairo profiling tools I've used.)

Before I dig deeper, can you tell me something about this code:

  pango_cairo_layout_path (cr, layout);
  murrine_set_color_rgba (cr, &temp, 0.5);
  cairo_stroke (cr);

.. you mentioned "pango_cairo_layout_path (cr, layout);
is slow". Is that definite, or could it be cairo_stroke(cr);

Thanks!