GNOME Bugzilla – Bug 774923
Native backend multi monitor fixes
Last modified: 2016-11-23 17:59:56 UTC
These patches fixes regressions introduced by the EGLDevice branch merge. I can now again connect my monitor and VT switch back and forth without ever (so far) getting stuck. The reason for getting stuck was that ClutterStageCogl never got its update counter back to 0 (i.e. it didn't receive frame callbacks from the flips correctly).
Created attachment 340606 [details] [review] MetaRendererNative: Let the closure handle queuing flip notification The queuing that was removed in this commit would be done in the clean up function of the closure anyway.
Created attachment 340607 [details] [review] MetaRendererNative: Wait for the last flip callback before flipping We might still end up in swap-buffer without the previous flip callback having been invoked. This can happen if there are two monitors, and we manage to draw before having all monitor flip callbacks invoked.
Created attachment 340608 [details] [review] MetaRendererNative: Don't requeue flush-swap-notify When flush-swap-notify is already queued, we might end up trying to requeue it, for example when handling flip callbacks inside swap-buffers. Actually queuing it there is harmless, since old frames will be discarded anyway.
Review of attachment 340606 [details] [review]: right
Review of attachment 340607 [details] [review]: yep, this is the problem I was seeing. lgtm
Review of attachment 340608 [details] [review]: looks good, we could leak onscreens in this case
Pushing, to be sure these make it into 3.23.2 Attachment 340606 [details] pushed as 77384ff - MetaRendererNative: Let the closure handle queuing flip notification Attachment 340607 [details] pushed as 227187f - MetaRendererNative: Wait for the last flip callback before flipping Attachment 340608 [details] pushed as d9a9844 - MetaRendererNative: Don't requeue flush-swap-notify