diff -up mutter-3.14.4/src/backends/x11/meta-backend-x11.c.threaded-swap-wait mutter-3.14.4/src/backends/x11/meta-backend-x11.c --- mutter-3.14.4/src/backends/x11/meta-backend-x11.c.threaded-swap-wait 2016-06-29 15:25:56.267633457 -0400 +++ mutter-3.14.4/src/backends/x11/meta-backend-x11.c 2016-06-29 15:26:35.800269586 -0400 @@ -696,6 +696,15 @@ meta_backend_x11_class_init (MetaBackend static void meta_backend_x11_init (MetaBackendX11 *x11) { + /* Set up things so that if the INTEL_swap_event extension is not present, + * but the driver is known to have good thread support, we use an extra + * thread and call glXWaitVideoSync() in the thread. This allows idles + * to work properly, even when Mutter is constantly redrawing new frames; + * otherwise, without INTEL_swap_event, we'll just block in glXSwapBuffers(). + */ + XInitThreads(); + clutter_x11_enable_threaded_swap_wait (); + clutter_x11_request_reset_on_video_memory_purge (); /* We do X11 event retrieval ourselves */