From 531869448d07e00ae241120b59f3aaaa5709d59c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Fri, 6 May 2011 18:18:15 +0300 Subject: [PATCH] dri2: Don't send so many needless invalidate events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Only send invalidate events for drawables if some client has requested some buffers. Signed-off-by: Ville Syrjälä Reviewed-by: Michel Dänzer Signed-off-by: Keith Packard --- hw/xfree86/dri2/dri2.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 5c42a51df..bf7ebb9f8 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -83,6 +83,7 @@ typedef struct _DRI2Drawable { CARD64 last_swap_ust; /* ust at completion of most recent swap */ int swap_limit; /* for N-buffering */ unsigned long serialNumber; + Bool needInvalidate; } DRI2DrawableRec, *DRI2DrawablePtr; typedef struct _DRI2Screen { @@ -497,6 +498,8 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, DRI2BufferFrontLeft); } + pPriv->needInvalidate = TRUE; + return pPriv->buffers; err_out: @@ -540,9 +543,11 @@ DRI2InvalidateDrawable(DrawablePtr pDraw) DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw); DRI2DrawableRefPtr ref; - if (!pPriv) + if (!pPriv || !pPriv->needInvalidate) return; + pPriv->needInvalidate = FALSE; + list_for_each_entry(ref, &pPriv->reference_list, link) ref->invalidate(pDraw, ref->priv); }