5e246fc8db31d49f62174865d84e82eb4e16bf81
Task #53 ruled out TLB capacity as the cause of flatview_translate 4.46% + find_memory_mapping 3.02%. A probe on notdirty_write's own first line found the real reason, and it is a miss in this project's own earlier fix. notdirty_write calls uc->memory_mapping() UNCONDITIONALLY, before testing whether the region is executable - and that result is used only to test one bit. Measured on device, per 3-second window: hits=3478174 exec_region=1 (startup, all in the 0-1MB bucket) hits=1184522 exec_region=0 hits=902501 exec_region=0 (10MB and 11MB buckets = .data/.bss) Over a million calls per 3 seconds where the lookup ran in full and the answer then did not matter. Task #54 removed the tb_invalidate work for non-executable spans but left this lookup standing in front of it, so most of the cost survived that fix. The map is static once CreateConfiguredEngine has mapped its five spans, so a small per-thread direct-mapped page -> MemoryRegion cache removes the lookup for everything but a cold miss. That cache is implemented here but DEFAULTS OFF (UC_MR_CACHE_ENABLED 0) because it could not be measured: - the Pixel 6a stopped being measurable (mScreenState=OFF within seconds despite a 30-minute timeout and svc power stayon true, with NotificationShade holding focus - it needs physical attention) - the Galaxy A9 cannot run this build at all: "failed to attach / start timeout", the engine's startup work exceeds Android's attach deadline on that hardware Shipping it enabled would repeat exactly the mistake this project has been correcting all session. The measurement that motivates it is solid; the fix is not yet evidence. INVARIANT if it is ever enabled: anyone changing mappings or permissions at runtime must clear the cache, or stale permissions will be used. It is per-thread, so no locking is involved. Co-Authored-By: Claude <noreply@anthropic.com>
Description
Мод добавляющий мультиплеер для NFSMW
17 MiB
Languages
C++
48%
Java
46.1%
Kotlin
4.4%
C
1%
Shell
0.3%
Other
0.2%