Optimize dixLookupPrivate for repeated lookups of the same private.
This gives me a 20% speedup for EXA text rendering, though I still seem to burn quite a lot of cycles in here...
This commit is contained in:
parent
886af8f384
commit
9b30cc5248
|
@ -46,13 +46,20 @@ dixAllocatePrivate(PrivateRec **privates, const DevPrivateKey key);
|
|||
static _X_INLINE pointer
|
||||
dixLookupPrivate(PrivateRec **privates, const DevPrivateKey key)
|
||||
{
|
||||
PrivateRec *rec = *privates;
|
||||
PrivateRec *rec, *prev;
|
||||
pointer *ptr;
|
||||
|
||||
while (rec) {
|
||||
if (rec->key == key)
|
||||
for (rec = *privates, prev = NULL; rec; prev = rec, rec = rec->next) {
|
||||
if (rec->key != key)
|
||||
continue;
|
||||
|
||||
if (prev) {
|
||||
prev->next = rec->next;
|
||||
rec->next = *privates;
|
||||
*privates = rec;
|
||||
}
|
||||
|
||||
return rec->value;
|
||||
rec = rec->next;
|
||||
}
|
||||
|
||||
ptr = dixAllocatePrivate(privates, key);
|
||||
|
|
Loading…
Reference in New Issue