From 8f9bdfd293ad8e45755efe8d764b4dcc2a724f51 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Tue, 13 Dec 2011 21:23:12 -0500 Subject: [PATCH] dix: Tune dixLookupDrawable for success The vast vast vast majority of resource lookups are successful. Move some work to the error paths so we don't punish success. Before: 40000000 trep @ 0.0009 msec (1109091.3/sec): PutImage 10x10 square 60000000 trep @ 0.0005 msec (2072652.2/sec): ShmPutImage 10x10 square After: 40000000 trep @ 0.0009 msec (1148346.9/sec): PutImage 10x10 square 60000000 trep @ 0.0005 msec (2091666.1/sec): ShmPutImage 10x10 square Reviewed-by: Alan Coopersmith Signed-off-by: Adam Jackson --- dix/dixutils.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dix/dixutils.c b/dix/dixutils.c index 00bbde67c..2b5391f2d 100644 --- a/dix/dixutils.c +++ b/dix/dixutils.c @@ -202,13 +202,12 @@ dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client, int rc; *pDraw = NULL; - client->errorValue = id; - - if (id == INVALID) - return BadDrawable; rc = dixLookupResourceByClass((pointer *)&pTmp, id, RC_DRAWABLE, client, access); + if (rc != Success) + client->errorValue = id; + if (rc == BadValue) return BadDrawable; if (rc != Success)