Game process (ARAM Hexgate: 84 -> 127 FPS average, slowest stretches ~110):
- Local pthread mutexes, condition variables and Mach semaphores are on by
default in the game process only, with /tmp/rclol-no-local-* opt-outs.
The main thread's darlingserver waits fell from 1.36 to 0.10 ms per frame.
- Local semaphores: the count and the slot generation change in one
compare-exchange, a destroy leaves a negative marker, the table is reset
after fork, and names the table did not create go to the server.
- Metal: drop identical re-binds (keyed on the Indium object, depth-stencil
retained), pass blit resources by reference, and stop resetting vertex
descriptors twice.
- Core isolation of the main thread is opt-in (/tmp/rclol-core-isolation);
it lowered FPS in its only match.
- Optimized libc/libc++/Foundation overlays, AVX2 string primitives, real CPU
topology and their installers and offline checks.
Tools and docs:
- tools/riot-match-capture: passive /proc sampler, user-space IP profiler and
reports, plus a comparison against the game's netstats.
- tools/riot-lsem-model and tools/riot-metal-bind-model: host models that
extract the shipped code and check it.
- tools/install-riot-metal-pair.sh installs Metal and Indium together.
- Status, setup, testing and troubleshooting docs updated with the measured
matches and the switch table; manifest file counts match the patches.
Co-Authored-By: Claude Opus 5.5 <[email protected]>