From: Pauli Nieminen <[email protected]>

There is no need to have damage handler registered when there isn't any
pointer in the screen. This avoids some overhead from damage handling
which takes tens of microseconds on arm.

Signed-off-by: Pauli Nieminen <[email protected]>
---
 mi/misprite.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/mi/misprite.c b/mi/misprite.c
index a8e4d4e..3106c99 100644
--- a/mi/misprite.c
+++ b/mi/misprite.c
@@ -96,6 +96,7 @@ typedef struct {
     VisualPtr      pVisual;
     DamagePtr      pDamage;            /* damage tracking structure */
     Bool            damageRegistered;
+    int             numberOfCursors;
 } miSpriteScreenRec, *miSpriteScreenPtr;
 
 #define SOURCE_COLOR   0
@@ -346,6 +347,7 @@ miSpriteInitialize (ScreenPtr               pScreen,
     pScreenPriv->colors[MASK_COLOR].green = 0;
     pScreenPriv->colors[MASK_COLOR].blue = 0;
     pScreenPriv->damageRegistered = 0;
+    pScreenPriv->numberOfCursors = 0;
 
     dixSetPrivate(&pScreen->devPrivates, miSpriteScreenKey, pScreenPriv);
 
@@ -773,21 +775,29 @@ static void
 miSpriteSetCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
                    CursorPtr pCursor, int x, int y)
 {
-    miCursorInfoPtr pPointer;
+    miCursorInfoPtr     pPointer;
+    miSpriteScreenPtr   pScreenPriv;
 
     if (!IsMaster(pDev) && !pDev->u.master)
         return;
 
     pPointer = MISPRITE(pDev);
+    pScreenPriv = GetSpriteScreen(pScreen);
 
     if (!pCursor)
     {
+       if (pPointer->shouldBeUp)
+           --pScreenPriv->numberOfCursors;
        pPointer->shouldBeUp = FALSE;
        if (pPointer->isUp)
            miSpriteRemoveCursor (pDev, pScreen);
+       if (pScreenPriv->numberOfCursors == 0)
+           miSpriteDisableDamage(pScreen, pScreenPriv);
        pPointer->pCursor = 0;
        return;
     }
+    if (!pPointer->shouldBeUp)
+       pScreenPriv->numberOfCursors++;
     pPointer->shouldBeUp = TRUE;
     if (pPointer->x == x &&
        pPointer->y == y &&
-- 
1.7.0.4

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to