🐛 Critical Bugfix
UI Widget Cache was not working (0% skip rate → 68%+ skip rate)
The UI cache had 10 hooks installed and reported [ OK ] in logs, but every single call was passed through — zero skips. The widget identity function silently returned NULL for all widgets.
Root cause: GetWidgetIdentity() used two approaches that both failed:
- WoW's internal token/object system (
api_getcurrentobject) — tokens were stale or semantically wrong lua_touserdata/lua_topointerfallback — the address used forlua_topointerwas actuallylua_tothread, so it returned NULL for frame tables
Fix: Rewrote widget identity to read directly from the Lua stack:
L->base[0].gc → GCObject* (= Table* for WoW frames)
This pointer is stable, unique per widget, and works for all frame types (FontString, StatusBar, Texture, Region).
Results
| Before | After |
|---|---|
| UI Cache: 0% skip | UI Cache: 68% skip |
| All calls passed through | 2/3 of redundant UI updates eliminated |
What this means for gameplay
- Smoother UI in raids and crowded areas — addons that update health bars, cast bars, nameplates 60x/sec now skip redundant engine calls
- Lower CPU usage from UI rendering — especially with unit frame addons (oUF, Grid2, Pitbull, ElvUI)
- More stable frame times — fewer spikes from redundant
SetText,SetValue,SetStatusBarColorcalls
Other fixes
- Fixed
version.rcsyntax error (ENDd→END) - Removed diagnostic logging from production build
Full Changelog
v2.0.2...v2.0.3