Before: 40000000 trep @ 0.0009 msec (1148346.9/sec): PutImage 10x10 square 60000000 trep @ 0.0005 msec (2091666.1/sec): ShmPutImage 10x10 square
After: 40000000 trep @ 0.0008 msec (1191807.5/sec): PutImage 10x10 square 60000000 trep @ 0.0005 msec (2180983.0/sec): ShmPutImage 10x10 square v2: Bump drawable serial number on damage register/unregister to trigger ValidateGC, otherwise a Damage created after the GC was validated would never be called, and a Damage destroyed on a validated GC would probably crash the next GC draw. Spotted by Aaron Plattner. v2.1: Actually include the above change. Reviewed-by: Eric Anholt <e...@anholt.net> Signed-off-by: Adam Jackson <a...@redhat.com> --- miext/damage/damage.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/miext/damage/damage.c b/miext/damage/damage.c index d791211..37599dd 100644 --- a/miext/damage/damage.c +++ b/miext/damage/damage.c @@ -437,9 +437,13 @@ damageValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable) { + drawableDamage(pDrawable); DAMAGE_GC_FUNC_PROLOGUE (pGC); (*pGC->funcs->ValidateGC)(pGC, changes, pDrawable); - pGCPriv->ops = pGC->ops; /* just so it's not NULL */ + if (pDamage) + pGCPriv->ops = pGC->ops; /* just so it's not NULL */ + else + pGCPriv->ops = NULL; DAMAGE_GC_FUNC_EPILOGUE (pGC); } @@ -1766,12 +1770,15 @@ void miDamageCreate (DamagePtr pDamage) { } +/* Bump serial on register/unregister to trigger ValidateGC */ void miDamageRegister (DrawablePtr pDrawable, DamagePtr pDamage) { + pDrawable->serialNumber++; } void miDamageUnregister (DrawablePtr pDrawable, DamagePtr pDamage) { + pDrawable->serialNumber++; } void miDamageDestroy (DamagePtr pDamage) -- 1.7.7.4 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel