diff options
author | Ville Syrjälä <ville.syrjala@nokia.com> | 2011-05-06 18:18:15 +0300 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2011-05-13 14:05:11 -0700 |
commit | 531869448d07e00ae241120b59f3aaaa5709d59c (patch) | |
tree | 40a92a8b054151ae80db5302016c2d3384e748f8 | |
parent | ba5540221f2a46133371b4ff0d527b1a0a1443b1 (diff) |
dri2: Don't send so many needless invalidate events
Only send invalidate events for drawables if some client has requested
some buffers.
Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com>
Reviewed-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | hw/xfree86/dri2/dri2.c | 7 |
1 files changed, 6 insertions, 1 deletions
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); } |