So recently I’ve been doing some research on the slightly dated redraw lag problem. I found some bug reports 1, and also some discussion threads here 3. The suggested (and applied) solution is to use X sync fence and GL_EXT_x11_sync_object. And the stated reason seems to be that it is a “typical race condition that occurs with composite managers that don’t properly synchronize their rendering with the X server” 4 (I’m not 100% sure if that thread is related).
My understanding of the problem is that, the compositor updated the screen with out-dated content of the window, and doesn’t redraw until the next update event is received. Is that correct?
However, I don’t quite how this could happen. I think it should be safe to assume that when the compositor received the DamageNotify event, the content of the drawable associated with the damage should have already been updated. Is it not the case? I am also not entirely clear how sync fence work to solve this problem.
It will be really nice if someone with the knowledge could clarify it for me.