Add MPQ archive file cache: skip redundant chain walks on repeat file opens
Hook File_FindInArchive (0x6549a0) with a direct-mapped filename-verified cache. First open does the full MPQ chain walk (~60K cycles), subsequent opens hit the cache (~300 cycles). 80% hit rate in gameplay testing. Cache design: 16384 entries, FNV-1a hash for slot index, raw filename comparison (128 bytes) for collision safety. Stores outer_archive, inner_archive, and block_entry per file. Negative cache for not-found files. Refcount at +0x38 incremented on all output archives to match original File_FindInArchive behavior (verified via Ghidra: FindAndIncrementResourceReference at 0x650780, DecrementResourceReference at 0x6507e0). Also: default build changed to ReleaseFast (works around Zig fastcall inreg bug in Debug mode), logging gate changed to != ReleaseSmall, file cache integrated as transform44 sub-module with A/B comparison timing in readout.
This commit is contained in:
+1
-1
@@ -267,7 +267,7 @@ const all_prefixes = buildAllPrefixes();
|
||||
var active_prefixes: [all_prefixes.len]*const AddonPrefix = undefined;
|
||||
var active_count: usize = 0;
|
||||
|
||||
fn pruneInactivePrefixes() void {
|
||||
pub fn pruneInactivePrefixes() void {
|
||||
active_count = 0;
|
||||
for (all_prefixes) |*prefix| {
|
||||
const active = if (prefix.module_name) |mod_name| module_active.isActive(mod_name) else true;
|
||||
|
||||
Reference in New Issue
Block a user