From: Michel Dänzer <[email protected]> While present_pixmap decrements target_msc by 1 for present_queue_vblank, it leaves the original vblank->target_msc intact. So incrementing the latter for requeueing resulted in the requeued presentation being executed too late.
Also, no need to requeue if the target MSC is already reached. This further reduces stutter when a popup menu appears on top of a flipping fullscreen window. Signed-off-by: Michel Dänzer <[email protected]> --- present/present.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/present/present.c b/present/present.c index 824ca56..1ce16af 100644 --- a/present/present.c +++ b/present/present.c @@ -591,10 +591,8 @@ present_check_flip_window (WindowPtr window) xorg_list_for_each_entry(vblank, &window_priv->vblank, window_list) { if (vblank->queued && vblank->flip && !present_check_flip(vblank->crtc, window, vblank->pixmap, vblank->sync_flip, NULL, 0, 0)) { vblank->flip = FALSE; - if (vblank->sync_flip) { + if (vblank->sync_flip) vblank->requeue = TRUE; - vblank->target_msc++; - } } } } @@ -631,7 +629,8 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc) if (vblank->requeue) { vblank->requeue = FALSE; - if (Success == present_queue_vblank(screen, + if (msc_is_after(vblank->target_msc, crtc_msc) && + Success == present_queue_vblank(screen, vblank->crtc, vblank->event_id, vblank->target_msc)) -- 2.7.0 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
