- Hardened oUF player-only element enable checks in
Libraries/oUF/elements/powerprediction.luaandLibraries/oUF/elements/restingindicator.luaby routingunitIsUnitthrough a secret-value-safe wrapper - Hardened movement-speed reads in
Modules/UI/DataSystems.luaso run, swim, flight, glide, and base-speed values fall back cleanly when Retail APIs return protected or non-numeric results
- Prevent
PowerPredictionandRestingIndicatorfrom misbehaving when WoW Retail returns secret values during player-unit comparisons - Fix datatext movement speed numeric conversion failures caused by protected speed values
- Fix Custom Trackers loss-of-control cooldown substitution in
Modules/System/CustomTrackers.luaby reusing a centralized positive cooldown-window check before falling back to LOC timing - Reduce duplicated cooldown-state checks in Custom Trackers so cooldown visibility stays consistent when normal cooldown data is missing
- This is a focused runtime-compatibility and cooldown-correctness pass for Retail edge cases rather than a feature release
- DataText expansion and polish release:
- 7-slot layout support (
outerLeft,farLeft,left,center,right,farRight,outerRight) - Per-slot LDB display modes (
AUTO,TEXT,ICON,ICON_TEXT) - Spec and LootSpec datatext providers with corrected specialization resolution
- Enhanced
CurrenciesandReputationproviders with databar parity, friendship/renown/paragon support, and improved tooltips
- 7-slot layout support (
- Low-risk non-unit coalescer pilot:
- shared
SPELL_UPDATE_COOLDOWN+SPELL_UPDATE_CHARGESbucket - debounced
BAG_UPDATEbucket /suf coalescerand/suf coalescer resetdiagnostics
- shared
- DataText panel defaults and controls:
- default panel height increased to
40 - panel width can now scale to full screen width with runtime clamping
- DataText source controls moved higher in both OptionsV2 and legacy options
- default panel height increased to
- DataText LDB behavior:
- improved fallback text composition for icon/label/value brokers
- added tooltip fallback rendering, hover refresh, and click dispatch parity with common LDB displays
- Prevent stale or duplicated datatext tooltip content by clearing
GameTooltipbefore rebuild - Constrain datatext label rendering within slot width to reduce bleed/overlap in dense layouts
- Fix Spec/LootSpec provider crashes by avoiding missing
C_SpecializationInfo.GetSpecializationInfoByIDcalls and resolving active spec via specialization index APIs
- DataText Step 3, Step 5, Step 5b, and Step 5c all passed in-game validation
- Low-risk coalescer pilot validated in dungeon gameplay:
SPELL_UPDATE_COOLDOWN+SPELL_UPDATE_CHARGES 6002 -> 2700(~55.0% reduction)BAG_UPDATE 38 -> 21(~44.7% reduction)
- Major Phase 4 Update - Castbar For All Units, OptionsV2 Sidebar, Profile Migration System (
edab41b)
- Remove outdated release notes for v1.29.0 (
5fb9529)
- Task 3.1: Implement Pixel-Perfect Scaling System for clean frame rendering at all UI scales (
b1e0894)
- Add ProfileValidator module for validating import trees and enhancing data integrity (
8c7f3f7)
- Implement SmartRegisterUnitEvent kernel-level event filtering for 30-50% performance gain (
86f2088)
- Update CHANGELOG.md for v1.29.0 (
bdcbf67)
- Implement SmartRegisterUnitEvent kernel-level event filtering for 30-50% performance gain (
86f2088)
- Stop (
- Enabl) - P99: 19.00ms (
- Frame) - P99: 20.00ms (
- Frame) - P99: 18.00ms ✅ (
- Frame)
- Implement SafeReload system to prevent errors during combat (
9ea43d4) - Update release infrastructure for v1.26.0 and enhance automation scripts (
06b00b6)
- Sync: merge recent upstream connection updates and fix solo party visibility (
864db87)
- Release Infrastructure: v1.26.0 Build & Publish Automation (
db007c5)
All notable changes to SimpleUnitFrames will be documented in this file.
- DirtyFlagManager Integration — Intelligent frame update batching for 20-30% frame time variance reduction
- Priority-based frame scheduling (player CRITICAL → target HIGH → party MEDIUM → raid LOW)
- Automatic batch processing respecting frame time budget
- 105 frame batches per gameplay session (vs single-pass processing)
- Event Coalescing Expansion — 14 new events configured (13 UNIT_SPELLCAST_* + UNIT_AURA)
- UNIT_SPELLCAST_START/STOP/CHANNEL_/EMPOWER_ events now batched
- UNIT_AURA coalescing for buff/debuff efficiency
- Result: 69.6% coalescing efficiency (1,963 of 2,816 events batched)
- Interactive TestPanel — New
/suf testcommand with 6 validation buttons- Phase 1: Initialization checks (addon, PerformanceLib, frames)
- Phase 2-3: Profiler setup and scenario testing
- Phase 3c: Edge case validation
- Stats: Real-time metrics display
- Manual Event Registration System — Player castbar visible during casting
- Fixed castbar element not receiving events from oUF
- Custom event dispatcher for castbar updates
- All 13 UNIT_SPELLCAST_* events manually registered
- Updated EventCoalescer priority assignments for casting events
- START events remain HIGH priority (2) for cast bar responsiveness
- STOP/UPDATE/FAILED events moved to LOW priority (4) for batching efficiency
- Delays tuned: 0.05-0.12s based on event frequency
- Enhanced UpdateAllFrames and UpdateFramesByUnitType to use DirtyFlagManager batching
- Graceful fallback to synchronous updates when PerformanceLib unavailable
- Configurable batch size (default: 15 frames)
- Invalid event name PLAYER_LEADER_CHANGED removed (correct: PARTY_LEADER_CHANGED)
- TestPanel slash command registration (now uses RegisterChatCommand instead of non-existent RegisterSlashCommands)
- Missing UNIT_AURA in EVENT_COALESCE_CONFIG (now properly batched)
- Event routing priority parameter passing (eventName → priority in all call sites)
- Frame time stable at 16.66ms average (60 FPS)
- Frame time P99 = 28ms (excellent consistency)
- Event coalescing: 69.6% efficiency
- UNIT_HEALTH: 78% reduction (695→124 dispatched, 571 saved)
- UNIT_POWER_UPDATE: 72% reduction (335→94 batched, 241 saved)
- UNIT_AURA: 54% reduction (457→211 batched, 246 saved)
- DirtyFlagManager: 229 frames processed in 105 batches per session
- Dropped frames: 0 (perfect stability)
- Zero regressions in existing frame update logic
Files Modified:
- SimpleUnitFrames.lua (4 new helper functions, 3 modified methods, 1 system init)
- Lines 4113-4213: DirtyFlagManager helper functions
- Lines 6910-6943: UpdateAllFrames batching
- Lines 7683-7725: UpdateFramesByUnitType batching
- Lines 2725-2744: DirtyFlagManager initialization
- Lines 730-785: EVENT_COALESCE_CONFIG expanded
- Lines 705-728: PERF_EVENT_PRIORITY updated
- Lines 3209-3343: HandleCoalescedUnitEvent priority routing
- Modules/UI/TestPanel.lua: 450+ lines of test infrastructure
- Modules/System/Commands.lua:
/suf testcommand integration - SimpleUnitFrames.toc: Version bump to 1.26.0
Documentation:
- docs/PHASE4_SESSION_SUMMARY.md — Session timeline and profiling logs
- docs/PHASE4_TASK2_IMPLEMENTATION_PLAN.md — Design and implementation strategy
- docs/PHASE4_TASK2_IMPLEMENTATION_COMPLETE.md — What was built and how to use
- ✅ Phase 1: Addon load test (no errors, PerformanceLib initialized)
- ✅ Phase 2: Solo play test (all frames updating correctly)
- ✅ Phase 3: Profiler baseline (60 FPS stable, P99 28ms)
- ✅ Phase 4: Event routing (1,963 events coalesced)
- ✅ Phase 5: Priority tuning (emergency flushes 743→594, 20% reduction)
- ✅ 82.6 seconds gameplay profile validating all metrics
- All DirtyFlagManager features wrapped in PerformanceLib availability checks
- Graceful fallback to synchronous updates when PerformanceLib not loaded
- No breaking changes to existing APIs or configuration
- Compatible with WoW 12.0.0+ secret value restrictions
- Version number consistency in system automation
- LibQTip Integration (Phases 1-3) — Full CustomTooltip system for frame stats and aura details
- Phase 1: Frame stats (health, power, position, memory)
- Phase 2: PerformanceLib metrics (frame time, batch count, GC pressure)
- Phase 3: Enhanced aura tooltips with 2-column layout (name, type, stacks, duration, description)
- Aura Tooltip Infrastructure — LibQTipHelper, AuraTooltipHelper, AuraTooltipManager
- GameTooltip fallback for restricted zones (instances)
- Frame strata management for tooltip visibility
- Click-away tooltip cleanup
- Aura container strata elevated to HIGH (above Blizzard MEDIUM frames)
- Debug window button tooltips now use LibQTip for consistent formatting
- Tooltip rendering optimized via LibQTip pooling
- Minimal overhead during gameplay (tooltips only shown on hover)
- ColorCurve Integration — Secret-safe smooth health bar color gradients
- Three-color gradient customization (critical/warning/healthy)
- C++ engine evaluation for WoW 12.0.0+ secret value safety
- Color picker controls in Bars tab
- Optional smooth gradient toggle per unit type
- Moved "Smooth Health Gradient" UI option from Auras tab to Bars tab
- Health color priority: colorSmooth takes precedence when enabled (disables class/reaction coloring)
- Health.colorSmooth now evaluated via ColorCurve (vs Lua interpolation)
- Variable shadowing bug in Style() function (unit → unitConfig)
- ApplyHealthCurve timing (called after frame.Health assignment)
- Health.values calculator initialization for gradient evaluation
- Removed 40+ debug print statements from SimpleUnitFrames.lua and oUF health.lua
- Frame time budget: 16.68ms (60 FPS baseline) validated
- ColorCurve evaluation neutral to slight improvement (C++ optimization)
- WoW 12.0.0+ secret value safety 100% compliant
- Phase 2 SmartRegisterUnitEvent Migration (Partial - 21% complete)
- Converted 5 oUF elements to RegisterUnitEvent (power, threatindicator, alternativepower)
- Per-unit event registration reduces overhead 30-50%
- Preliminary event storm reduction from SmartRegisterUnitEvent adoption
- Remaining 18 elements queued for Phase 2 continuation
- Phase 3 LibQTip Planning — Foundation for custom tooltip system
- Phase 4 Roadmap — DirtyFlagManager integration and element pooling optimization
- Bug 4 Fix: Player Castbar Visibility — Manual event registration system
- Player castbar now visible during spell casting
- All 13 UNIT_SPELLCAST_* events manually registered
- Custom OnEvent dispatcher for castbars
- Player castbar not receiving casting events during oUF initialization
- Castbar element Enable callback timing issue
- Cast progression UI now matches target/boss frame behavior
- Phase 3 Planning & Research — ColorCurve integration design
- Frame Lifecycle Analysis — oUF party/raid frame investigation
- PerformanceLib Integration — Event coalescing, dirty flag batching, frame time budgeting
- Performance Dashboard —
/sufperfcommand for real-time metrics - Performance Profiler —
/SUFprofiletimeline recordings and analysis - Debug Panel Enhancement — Perf button for event metrics
- Event coalescing system operational (basis for Phase 4 DirtyFlagManager)
- Baseline frame profiling infrastructure in place
- Initial SimpleUnitFrames addon release
- Core unit frame system (Player, Target, Pet, Focus, ToT, Party, Raid, Boss)
- oUF integration and customization
- Ace3 configuration framework
- Basic performance monitoring