Changelog
[3.7.0]
Added
-
Rosetta 2 support for macOS (WoWSilicon)
- Full compatibility via
ROSETTA_X87_DISABLE_CACHE=1 - Safe Lua fast paths avoiding Rosetta crashes
- Wine/CrossOver JIT cache disable
- Inline-patched
SetThreadIdealProcessor
- Full compatibility via
-
Multithreaded systems for major performance bottlenecks
- Combat log parser with 4-worker thread pool (auto-disables in raids)
- Addon dispatcher with 4-worker thread pool
- Spell prefetching with async loading
- MPQ prefetching with zone transition prediction
- Sound prefetching based on spell casts and zone transitions
- Async quest/achievement data loading
- Multithreaded nameplate renderer (reduces CPU load in 25-man raids)
-
27 Lua fast paths with direct C calls
- string.format: high fast path hit rate
- All common math and string operations optimized
- Phase 2 hooks: math.random, math.sqrt, string.rep, string.find (plain mode)
-
Advanced memory management with mimalloc
- Faster Lua operations
- Low Fragmentation Heap for all allocations
- Lua string table pre-sizing to reduce hash resize spikes
-
High-precision timing system
- QPC-based microsecond precision
- High cache hit rate
- Adaptive timer resolution
- Hardcoded FPS cap raised from 200 to 999
Changed
-
Network stack optimizations
- TCP_NODELAY for reduced latency
- TCP_QUICKACK for faster acknowledgments
- Optimized buffer sizes
- Low-delay TOS
- Fast keepalive settings
-
File I/O improvements
- MPQ memory mapping for instant reads
- Adaptive 64KB/256KB caching
- Sequential-scan hints for MPQ access
- Skip FlushFileBuffers for tracked MPQ handles
-
System call optimizations
- 512-slot GetModuleHandle cache
- Fast ASCII string operations
- 38 kernel-call caches across 8 batches
- IsBadReadPtr/WritePtr fast path
- Thread affinity for optimal core pinning
- Swap present hook for glFinish skip
-
CRT SSE2 fast paths
- strlen/strcmp/memcmp/memcpy/memset with page-boundary guards
- memchr/strchr with SEH protection
- pow() integer fast-path (x^2=x*x, sqrt, etc.)
- strstr Boyer-Moore-Horspool algorithm
Fixed
- Alt-tab crash in fullscreen mode (SEH guard implementation)
- UI scaling issues after alt-tab
- Window resize handling
- Keyboard layout switching
- Hardware cursor stability - identified and disabled problematic caches (GetSystemMetrics, Asset path resolver)
Performance
- Frame time: Smoother frametimes in addon-heavy gameplay
- CPU usage: Noticeable reduction in raids
- Lua operations: Faster with mimalloc allocator
- Timing cache: High QPC cache hit rate
- String formatting: High fast path hit rate
- Zone transitions: Reduced loading stutters
- Spell cast lag: Reduced via predictive prefetching
Disabled (Stability Issues)
- GetSystemMetrics cache - breaks hardware cursor with RTSSHooks.dll (found via bisection)
- Asset path cache - stale mimalloc pointers crash teardown/logout (found via bisection)
- Unit API fast paths - returns 0 HP
- GetSpellInfo cache - icon corruption + relog crash
- Phase 2 writes (rawset/insert/remove/next) - direct RawTValue* hangs
- Phase 2 reads (rawget/concat/unpack) - direct RawTValue* hangs
- ipairs factory hook - closure creation crashes (architectural mismatch)
- Deferred field updates - UI/texture flickering (immediate-mode rendering)
- GetModuleFileName cache - conflicts with OBS hook chain
- CRT mem fastpaths - VA exhaustion (dungeon finder crash at 2.4GB)
- Object visibility cache - stale object pointers, no synchronization
- table.sort fast path - Lua table corruption (0x851E01 AV)
- string.gsub fast path - Lua string corruption
- Lua bytecode cache - WoW modified bytecode incompatible
- Frame throttle - MoveAnything position corruption (race conditions)
- Async texture loading - loading screen regression
- Model async workers - loading screen regression
Testing Credits
Massive thanks to the stability testing team:
Morbent, Billy Hoyle, tuan, NoGoodLife, feh_dois, David (_oldq), UNOB, DarkRockDemon, Raymond, Vandal, Mantork, Falcon, Muus
Every crash report, every bisection test, every "hey this broke my addon" message directly shaped this release.
[3.6.1] - Previous Release
See GitHub releases for full history.