mirror of
https://github.com/Bluewhale1337/HealBotBlue.git
synced 2026-10-27 06:00:54 +00:00
perf: optimize performance by caching aura tooltips and range checks while reducing redundant layout updates
This commit is contained in:
@@ -107,13 +107,25 @@ function HealBot_CheckBuffs(unit)
|
||||
hasBuff[k] = nil
|
||||
end
|
||||
local i = 1
|
||||
if not HealBot_TextureToName then HealBot_TextureToName = {} end
|
||||
while true do
|
||||
local buffTexture = UnitBuff(unit, i)
|
||||
if not buffTexture then break end
|
||||
HealBot_ScanTooltip:SetOwner(UIParent, "ANCHOR_NONE")
|
||||
HealBot_ScanTooltip:ClearLines()
|
||||
HealBot_ScanTooltip:SetUnitBuff(unit, i)
|
||||
local buffName = HealBot_ScanTooltipTextLeft1:GetText()
|
||||
|
||||
local buffName = HealBot_TextureToName[buffTexture]
|
||||
if buffName == nil then
|
||||
HealBot_ScanTooltip:SetOwner(UIParent, "ANCHOR_NONE")
|
||||
HealBot_ScanTooltip:ClearLines()
|
||||
HealBot_ScanTooltip:SetUnitBuff(unit, i)
|
||||
local textObj = HealBot_ScanTooltipTextLeft1
|
||||
if textObj then
|
||||
buffName = textObj:GetText()
|
||||
end
|
||||
if buffName then
|
||||
HealBot_TextureToName[buffTexture] = buffName
|
||||
end
|
||||
end
|
||||
|
||||
if buffName then
|
||||
hasBuff[buffName] = true
|
||||
end
|
||||
|
||||
@@ -173,13 +173,6 @@ function HealBot_OnUpdate(this, arg1)
|
||||
HealBot_Action_RefreshPower(unitID)
|
||||
end
|
||||
|
||||
local powerID, _ = next(HealBot_View_DirtyPower)
|
||||
while powerID do
|
||||
HealBot_Action_RefreshPower(powerID)
|
||||
HealBot_View_DirtyPower[powerID] = nil
|
||||
powerID, _ = next(HealBot_View_DirtyPower)
|
||||
end
|
||||
|
||||
if HealBot_EquipChangeTimer > 0 then
|
||||
HealBot_EquipChangeTimer = HealBot_EquipChangeTimer - arg1
|
||||
if HealBot_EquipChangeTimer <= 0 then
|
||||
|
||||
@@ -8,12 +8,27 @@ function HealBot_ResetRangeScale()
|
||||
_scale = 0
|
||||
end
|
||||
|
||||
local _rangeCache = {}
|
||||
local _lastFrameTime = 0
|
||||
|
||||
-- HealBot_Range_Check: Checks if unit is in range via map distance or API.
|
||||
function HealBot_Range_Check(unit, range)
|
||||
local currentTime = GetTime()
|
||||
if _lastFrameTime ~= currentTime then
|
||||
for k in pairs(_rangeCache) do _rangeCache[k] = nil end
|
||||
_lastFrameTime = currentTime
|
||||
end
|
||||
|
||||
local return_val = 0;
|
||||
if not range then
|
||||
range = 40;
|
||||
end
|
||||
|
||||
local cacheKey = unit .. "_" .. range
|
||||
if _rangeCache[cacheKey] ~= nil then
|
||||
return _rangeCache[cacheKey]
|
||||
end
|
||||
|
||||
if ( unit == "player" ) then
|
||||
return_val = 1;
|
||||
elseif HealBot_Integrations_ClassicAPI_Active and UnitDistanceSquared and UnitInLineOfSight then
|
||||
@@ -56,5 +71,7 @@ function HealBot_Range_Check(unit, range)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
_rangeCache[cacheKey] = return_val
|
||||
return return_val;
|
||||
end
|
||||
|
||||
@@ -648,7 +648,6 @@ function HealBot_RecalcParty()
|
||||
end
|
||||
end
|
||||
end
|
||||
HealBot_Action_RefreshButtons();
|
||||
end
|
||||
|
||||
-- HealBot_RecalcSpells: Recalculates spells and updates layout.
|
||||
|
||||
+25
-10
@@ -246,23 +246,38 @@ function HealBot_Action_EnableButton(button)
|
||||
bar.txt:SetTextColor(sr, sg, sb, sa);
|
||||
local fontName, fontHeight, fontFlags = bar.txt:GetFont()
|
||||
local fontOutline = HealBot_Config.bfontoutline[HealBot_Config.Current_Skin] or 0
|
||||
if fontOutline == 1 then
|
||||
bar.txt:SetFont(fontName, fontHeight, "OUTLINE")
|
||||
else
|
||||
bar.txt:SetFont(fontName, fontHeight, "")
|
||||
local expectedFlags = fontOutline == 1 and "OUTLINE" or ""
|
||||
if fontFlags ~= expectedFlags then
|
||||
bar.txt:SetFont(fontName, fontHeight, expectedFlags)
|
||||
end
|
||||
|
||||
local iconSize = HealBot_Config.biconsize[HealBot_Config.Current_Skin] or 12
|
||||
for i = 1, 10 do
|
||||
local icon = getglobal(button:GetName() .. "BarIcon" .. i)
|
||||
local icon = button["icon"..i]
|
||||
if not icon then
|
||||
icon = getglobal(button:GetName() .. "BarIcon" .. i)
|
||||
button["icon"..i] = icon
|
||||
end
|
||||
if icon then
|
||||
if HealBot_UnitIcons and HealBot_UnitIcons[unit] and HealBot_UnitIcons[unit][i] then
|
||||
icon:SetTexture(HealBot_UnitIcons[unit][i])
|
||||
icon:SetWidth(iconSize)
|
||||
icon:SetHeight(iconSize)
|
||||
icon:Show()
|
||||
local currentTexture = icon:GetTexture()
|
||||
local newTexture = HealBot_UnitIcons[unit][i]
|
||||
if currentTexture ~= newTexture then
|
||||
icon:SetTexture(newTexture)
|
||||
end
|
||||
|
||||
if icon:GetWidth() ~= iconSize then
|
||||
icon:SetWidth(iconSize)
|
||||
icon:SetHeight(iconSize)
|
||||
end
|
||||
|
||||
if not icon:IsVisible() then
|
||||
icon:Show()
|
||||
end
|
||||
else
|
||||
icon:Hide()
|
||||
if icon:IsVisible() then
|
||||
icon:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -50,6 +50,9 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
|
||||
### Change Log
|
||||
|
||||
**v1.7.4**
|
||||
* **Performance Fix - CPU Spikes** - Fixed massive FPS drops (stuttering to 8-16 FPS) during raid combat. The `HealBot_CheckBuffs` function previously forced the client to generate hidden UI tooltips for up to 32 buffs per player on every single `UNIT_AURA` event. Tooltip parsing is now cached per texture, bypassing thousands of redundant API calls per second.
|
||||
* **Performance Fix - Frame Rendering** - Eliminated redundant UI layout recalculations in `HealBot_Action_EnableButton`. The UI no longer forces `SetFont`, `SetWidth`, `SetHeight`, and `GetGlobal` lookups on every single combat tick (which previously caused 4,000+ layout updates per second in 40-man raids).
|
||||
* **Performance Fix - Range Checking** - Greatly reduced CPU stutter caused by range calculations. `HealBot_Range_Check` now caches map positioning math and API calls per-frame, preventing the addon from calculating the exact same `math.sqrt` distance up to 5 times per unit during heavy combat.
|
||||
* **Performance Fix - Unit ID Lookup** - Optimized `HealBot_FindUnitID` by pre-allocating raid unit tokens, preventing massive string concatenation and garbage collection spam during high-frequency combat events like `CHAT_MSG_ADDON` (HealComm).
|
||||
|
||||
**v1.7.3**
|
||||
|
||||
Reference in New Issue
Block a user