Composite redraw speedup?

Egil Möller egil at innovationgarage.no
Sat Feb 8 14:46:36 UTC 2020


Hi!

I have for a time now been working on a new composing window manager to try
out a few UX ideas (https://redhog.github.io/InfiniteGlass videos: https://www.youtube.com/watch?v=vbt7qtwiLiM https://www.youtube.com/watch?v=E8f2KwgvxK4).

However, I'm having a performance problem in my redraw loop: When a lot is going on, e.g. during continuous stream of mouse events and/or PropertyNotify events + property gets, DamageNotify events for windows are often queued up and e.g. animations or video appear choppy.

To solve that, I start a redraw loop with a certain framerate when the first damage event comes in, to run for a set time. During this redraw loop, any window that has had DamageNotify events also on every frame reloads their contents to their textures, using glXCreatePixmap() / glXBindTexImageEXT(). This works fairly well, but when windows are large, this does mean that my renderer process starts eating a lot of CPU. Worse, it does this for a short amount of time _after_ all window changes have ceased.

Is there a way around this? Is the real solution to not use the X protocol (or properties) for e.g. controlling animations?

Would it help to have multiple connections to the X server, and subscribe only to damage events on one of them?

I know that damages are not for the whole window but for a certain region, but I don't think there's a way to update parts of a texture in OpenGL?

Thanks in advance,
Egil


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://lists.x.org/archives/xorg-devel/attachments/20200208/4eb6f245/attachment.sig>


More information about the xorg-devel mailing list