SuperSwingTimer v0.2.4
What's new
v0.2.4 - 2026-09-21
Added
- Headless CLI Test Runner (
run_tests.lua):- Built a standalone test execution harness with a complete mock WoW Classic/TBC environment.
- Compatible with standard
lua(5.1-5.5) andluajit, executing all 7 test groups (68 total tests) headlessly in ~0.013s with ANSI color reporting. - Expanded test suite in
SuperSwingTimer_Tests.luacovering DB migrations through v64, zero-allocation helpers (HasActiveTimers,HasActiveBuffIcons), haste calculations, and latency caching.
- Complete SoD Spell Matrices (
SuperSwingTimer_SoD.lua):- Added Season of Discovery rune tracking matrices for WARLOCK (Metamorphosis, Chaos Bolt, Haunt), MAGE (Living Bomb, Rewind Time, Fingers of Frost), and PRIEST (Penance, Circle of Healing, Shadow Word: Death) to
ns.SOD_TRACKED_SPELLS.
- Added Season of Discovery rune tracking matrices for WARLOCK (Metamorphosis, Chaos Bolt, Haunt), MAGE (Living Bomb, Rewind Time, Fingers of Frost), and PRIEST (Penance, Circle of Healing, Shadow Word: Death) to
Performance
- C-Level Unit Event Filtering (
SuperSwingTimer.lua):- Implemented
RegisterUnitEventSafehelper that delegates toframe:RegisterUnitEvent(...)when supported. - Filtered
UNIT_AURAto"player"and"target",UNIT_ATTACK_SPEEDto"player"and"target", andUNIT_POWER_*/UNIT_SPELLCAST_*/UNIT_INVENTORY_CHANGED/UNIT_RANGEDDAMAGEto"player". Eliminates 95%+ of raid combat event churn at the C engine level. - Cached
POWER_CLASSEStable at file scope inSuperSwingTimer.luaandSuperSwingTimer_State.lua, removing runtime table allocations.
- Implemented
- Idle OnUpdate Sleeping (
SuperSwingTimer.lua,SuperSwingTimer_ClassMods.lua):- Implemented
ns.HasActiveBuffIcons()and wiredns.activeBuffIconCounttracking across all 6 physical class modules. SuperSwingTimer.luanow sleeps theOnUpdateloop out-of-combat whenever no timers and no buff/cooldown icons are actively running, reducing idle out-of-combat CPU usage to 0%.
- Implemented
- Hotpath Render Allocation & Layout Deduplication (
SuperSwingTimer_UI.lua,SuperSwingTimer_ClassMods.lua,SuperSwingTimer_State.lua):- Unrolled timer table checks in
HasActiveTimers(), eliminatingpairs()iterator closures and GC allocations on every frame. - Cached string values (
_lastCurPower,_lastMaxPower,_lastPowerType) inUpdatePlayerPowerBar(), eliminating string garbage generation and redundant font layout passes when resources are static. - De-duplicated spark frame re-anchoring in
UpdateSparkPosition()by tracking_lastSparkPosand_lastSparkAnchor, bypassing redundant C++ layout dirtying when pixel offsets remain unchanged. - Cached label text rendering in
SyncBarLabelText(), skippingSetText()when string content is identical. - Cached tenth-of-second intervals in
UpdateMeleeBar(),UpdateRangedBar(), andUpdateHunterCastBar(), eliminating 93%+ ofstring.format("%.1f", remaining)allocations during swings.
- Unrolled timer table checks in
- Weaving Engine Latency & Haste Optimization (
SuperSwingTimer_Weaving.lua):- Streamlined
GetLatencySeconds()to prioritizens.cachedLatencywith fallback toGetNetStats(). - Unified Bloodlust/Heroism and Berserking haste scans in
GetLiveSpellHasteMultiplier()into a single-pass 40-slot aura scan with early break on detection.
- Streamlined
Changed
- Version Bump & DB Migration v64 (
SuperSwingTimer.toc,SuperSwingTimer.lua):- TOC version bumped to
v0.2.4. ns.DB_CURRENT_VERSIONupdated to64. Added Migration 64 ensuring default dimensions (Hunter Auto Shot 15px, Power Bar 10px) and class power bar colors.- Fixed
MigrateDB(targetDb)to cleanly support isolated test tables without mutating globalSuperSwingTimerDB.
- TOC version bumped to
- Warrior Execute Indicator Glow Pulse (
SuperSwingTimer_ClassMods.lua):- Added smooth sine-wave alpha pulsing (
math.sin(nowSec * 6)) to the Execute alert glow texture when target HP is <= 20%.
- Added smooth sine-wave alpha pulsing (
This mod has no additional files

