Re: Cairo + GTK animation - high Xorg load

"David J. Herzfeld" <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
On Thu, Oct 27, 2016 at 6:56 AM, Stefan Salewski <[email protected]> 
wrote:
> I think that drawing 1000 lines with 60 Hz in fullscreen mode is 
> indeed
> a high load for Cairo.

Actually, it's only 1000 points on a single line, not 1000 lines. So, I 
figures this is pretty simplistic, and should have a relatively low 
load.

I timed out the draw function <http://pastebin.com/0m0PF9Xc>. On my 
system, fullscreen, draw takes only 0.50ms (so a theoretical maximum 
frame rate of ~2kHz). So very low execution time in my written 
function, but Xorg still uses 30% of the CPU. I have a feeling it's not 
my drawing, but the interaction Cairo with the backend after draw() 
returns.

> 
> What you can do is of course: Shift the already drawn curve to the 
> left
> and draw only the new part. Cairo offers fast routines for copying
> areas, so for that case cpu load should be really low. For the trivial
> case of a plain sine wave, you can even draw the size extended curve 
> to
> a backup area and then just copy the desired area to your window, so 
> no
> drawing is necessary at all. That is what I did for my schematics
> editor for the background grid. (Of course complete redraw is easier,
> and when copying areas there is a minimal risk that you can get
> artefacts at the borders of old and new area.)

I agree completely. There's many strategies that I could use to speed 
the actual draw call up. What I actually do in my program is draw to a 
buffer, and then in the draw function, just call 
cairo_set_source_surface().

I've updated the example again, to use exactly this model 
<http://pastebin.com/apaFiGyd>. Here, the Xorg load is decreased 
somewhat (at the expense of increased load for the actual application), 
but Xorg load is still ~15% and scales with the size of the window. I 
don't understand this - I've already done all of the necessary drawing 
work in the thread. I could understand if the thread load increased 
with the size of the surface (which it does not appear to), but why 
should Xorg's? Essentially I want to say - here is this pixel buffer - 
just display it as is. Perhaps this is too simplistic an understanding 
of how Cairo is interacting with the display system.

Any pointers would be appreciated.

> 
> Other backends: As far as I know there is no hope for much speedup 
> when
> using the not well supported opengl backend

Thanks! I figured it was worth asking.

Thanks again for all of your help!

-- 
cairo mailing list
[email protected]
https://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.