Use clutter_stage_set_sync_delay()

Using a "sync delay" where we wait for 2 ms after the vblank before
starting to draw the next frame provides for much more predictable
latency for applications. An application can know that if it completes
a frame any time between 8ms before the vblank to the vblank,
it will reliably be drawn on the following vblank period, rather than
having an unpredictable latency depending on whether the compositor
is currently busy drawing a frame or not.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
This commit is contained in:
Owen W. Taylor 2012-11-12 13:39:59 -05:00
parent b07aea467e
commit d8696c17be

View File

@ -552,6 +552,9 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
g_signal_connect_after (info->stage, "paint", g_signal_connect_after (info->stage, "paint",
G_CALLBACK (after_stage_paint), info); G_CALLBACK (after_stage_paint), info);
/* Wait 2ms after vblank before starting to draw next frame */
clutter_stage_set_sync_delay (CLUTTER_STAGE (info->stage), 2);
meta_screen_get_size (screen, &width, &height); meta_screen_get_size (screen, &width, &height);
clutter_actor_realize (info->stage); clutter_actor_realize (info->stage);