local locstart, locduration = GetActionLossOfControlCooldown(slot);
local start, duration, enable, modrate = GetActionCooldown(slot);
local charges, maxcharges, chargestart, chargeduration, chargemodrate = GetActionCharges(slot);
+ -- avoid as many updates as possible by checking if there's changes first
+ if button.prev and
+ button.prev[1] == locstart and button.prev[2] == locduration and
+ button.prev[3] == start and button.prev[4] == duration and
+ button.prev[5] == enable and button.prev[6] == modrate and
+ button.prev[7] == charges and button.prev[8] == maxcharges and
+ button.prev[9] == chargestart and button.prev[10] == chargeduration and
+ button.prev[11] == chargemodrate then
+ return;
+ end
+ button.prev = { locstart, locduration, start, duration, enable, modrate,
+ charges, maxcharges, chargestart, chargeduration, chargemodrate };
if (locstart + locduration) > (start + duration) then
if button.cd.currentCooldownType ~= COOLDOWN_TYPE_LOSS_OF_CONTROL then
button.cd:SetEdgeTexture(locCDTexture);
end
local mounted = false;
--- throttleCD 3-state, nil -> false -> true -> nil
--- this way there's not double update each time the first
--- update event comes, instead the extra throttled update comes
--- if there are >2 ACTIONBAR_UPDATE_COOLDOWN events in one frame
-local throttleCD = nil;
-local function throttleCDDone()
- -- update CD once more to confirm newest CD change is taken in even with some throttling
- for _, button in pairs(activeButtons) do
- updateCooldown(button, button.slot);
- end
-end
-local function throttleCDReset()
- throttleCD = nil;
-end
local events = {
["ACTIONBAR_UPDATE_COOLDOWN"] = function()
- if not throttleCD then -- only update at most once/frame
- throttleCD = throttleCD == false and true or false;
- if throttleCD then
- CTimerAfter(0.01, throttleCDDone); -- wait one frame
- else
- for _, button in pairs(activeButtons) do
- updateCooldown(button, button.slot);
- end
- CTimerAfter(0.01, throttleCDReset); -- wait one frame
- end
+ for _, button in pairs(activeButtons) do
+ updateCooldown(button, button.slot);
end
end,
["SPELL_UPDATE_CHARGES"] = function()