By calling XSync in _gdk_x11_display_after_process_all_updates we
effectively make gdk rendering sync, which avoids problems with the
client animations running faster than the Xserver rendering, thus
filling up the X rendering pipes and essentially "locking up" the
Xserver (i.e. you can't even close the offending window because the
WM is starved too).
I verified this worked by making GtkSpinner paint multiple times on my
intel driver (which has some issue making this rendering slow atm),
and without this patch i get severe lag where even window dragging
stops for 5 seconds when i drag the mouse around. However, with the
patch everything is smooth.
https://bugzilla.gnome.org/show_bug.cgi?id=684639
void
_gdk_x11_display_after_process_all_updates (GdkDisplay *display)
{
+ /* Sync after all drawing, otherwise the client can get "ahead" of
+ the server rendering during animations, such that we fill up
+ the Xserver pipes with sync rendering ops not letting other
+ clients (including the VM) do anything. */
+ XSync (GDK_DISPLAY_XDISPLAY (display), FALSE);
}
static Bool