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 */