diff options
author | Grazvydas Ignotas <[email protected]> | 2017-03-19 00:46:39 +0200 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-03-20 08:14:31 +1100 |
commit | bd93cea69124b91ec278069f2095b4cbfb44cc2f (patch) | |
tree | d92405ef754530099a0efb54e03e7aed20254951 | |
parent | 663e7c25f5ea6a3933de804d47503e3569debc01 (diff) |
util/disk_cache: fix stored_keys index
It seems there is a bug because:
- 20 bytes are compared, but only 1 byte stored_keys step is used
- entries can overlap each other by 19 bytes
- index_mmap is ~1.3M in size, but only first 64K is used
With this fix for Deus Ex:
- startup time (from launch to Feral logo): ~38s -> ~16s
- disk_cache_has_key() hit rate: ~50% -> ~96%
Signed-off-by: Grazvydas Ignotas <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>
-rw-r--r-- | src/util/disk_cache.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c index 6c91f23ffbb..79ec63080ca 100644 --- a/src/util/disk_cache.c +++ b/src/util/disk_cache.c @@ -1033,7 +1033,7 @@ disk_cache_put_key(struct disk_cache *cache, const cache_key key) int i = *key_chunk & CACHE_INDEX_KEY_MASK; unsigned char *entry; - entry = &cache->stored_keys[i + CACHE_KEY_SIZE]; + entry = &cache->stored_keys[i * CACHE_KEY_SIZE]; memcpy(entry, key, CACHE_KEY_SIZE); } @@ -1052,7 +1052,7 @@ disk_cache_has_key(struct disk_cache *cache, const cache_key key) int i = *key_chunk & CACHE_INDEX_KEY_MASK; unsigned char *entry; - entry = &cache->stored_keys[i + CACHE_KEY_SIZE]; + entry = &cache->stored_keys[i * CACHE_KEY_SIZE]; return memcmp(entry, key, CACHE_KEY_SIZE) == 0; } |