Implement move-to-front array for banks (perf regression reported by Ronny

V. Vindenes).
This commit is contained in:
Patrick Lam 2005-10-05 18:41:55 +00:00
parent 55c8fa4f08
commit 751932ddb1
2 changed files with 25 additions and 10 deletions

View File

@ -1,3 +1,9 @@
2005-10-05 Patrick Lam <plam@mit.edu>
* src/fccache.c (FcCacheHaveBank):
Implement move-to-front array for banks (perf regression
reported by Ronny V. Vindenes).
2005-10-04 Patrick Lam <plam@mit.edu>
* src/fccache.c (FcDirCacheValid, FcDirCacheUnlink,
FcDirCacheHasCurrentArch):

View File

@ -949,7 +949,7 @@ FcCacheMachineSignature ()
}
static int banks_ptr = 0, banks_alloc = 0;
static int * bankId = 0;
static int * bankId = 0, * bankIdx = 0;
static FcBool
FcCacheHaveBank (int bank)
@ -969,28 +969,37 @@ FcCacheHaveBank (int bank)
int
FcCacheBankToIndex (int bank)
{
static int lastBank = FC_BANK_DYNAMIC, lastIndex = -1;
int i;
int * b;
if (bank == lastBank)
return lastIndex;
int i, j;
for (i = 0; i < banks_ptr; i++)
if (bankId[i] == bank)
return i;
if (bankId[bankIdx[i]] == bank)
{
int t = bankIdx[i];
for (j = i; j > 0; j--)
bankIdx[j] = bankIdx[j-1];
bankIdx[0] = t;
return t;
}
if (banks_ptr >= banks_alloc)
{
int * b, * bidx;
b = realloc (bankId, (banks_alloc + 4) * sizeof(int));
if (!b)
return -1;
bankId = b;
bidx = realloc (bankIdx, (banks_alloc + 4) * sizeof(int));
if (!bidx)
return -1;
bankIdx = bidx;
banks_alloc += 4;
}
i = banks_ptr++;
bankId[i] = bank;
bankIdx[i] = i;
return i;
}