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.
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:
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.freedeskt op.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); set_color_ rgba (cr, &temp, 0.5);
murrine_
cairo_stroke (cr);
.. you mentioned "pango_ cairo_layout_ path (cr, layout);
is slow". Is that definite, or could it be cairo_stroke(cr);
Thanks!