Skip to content

Commit

Permalink
Move Registering of Events from Add to Load
Browse files Browse the repository at this point in the history
No need to register for events that eagerly for auras that might never
load. That's probably not a big win for performance, but should help.

Github-Issue: 461
  • Loading branch information
InfusOnWoW authored and Stanzilla committed Jun 22, 2018
1 parent 75931db commit 6fa7c90
Showing 1 changed file with 32 additions and 27 deletions.
59 changes: 32 additions & 27 deletions WeakAuras/GenericTrigger.lua
Original file line number Diff line number Diff line change
Expand Up @@ -707,6 +707,7 @@ end
function GenericTrigger.UnloadAll()
wipe(loaded_auras);
wipe(loaded_events);
WeakAuras.UnregisterAllEveryFrameUpdate();
end

function GenericTrigger.UnloadDisplay(id)
Expand All @@ -720,6 +721,7 @@ function GenericTrigger.UnloadDisplay(id)
events[id] = nil;
end
end
WeakAuras.UnregisterEveryFrameUpdate(id);
end

local frame = CreateFrame("FRAME");
Expand Down Expand Up @@ -769,14 +771,31 @@ function LoadEvent(id, triggernum, data)
end

function GenericTrigger.LoadDisplay(id)
local register_for_frame_updates = false;
if(events[id]) then
loaded_auras[id] = true;
for triggernum, data in pairs(events[id]) do
if(events[id] and events[id][triggernum]) then
LoadEvent(id, triggernum, data);
for index, event in pairs(data.events) do
if (event == "COMBAT_LOG_EVENT_UNFILTERED_CUSTOM") then
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");
elseif (event == "FRAME_UPDATE") then
register_for_frame_updates = true;
else
frame:RegisterEvent(event);
aceEvents:RegisterMessage(event, HandleEvent, frame)
end
end

LoadEvent(id, triggernum, data);
end
end

if(register_for_frame_updates) then
WeakAuras.RegisterEveryFrameUpdate(id);
else
WeakAuras.UnregisterEveryFrameUpdate(id);
end

end

local function trueFunction()
Expand All @@ -791,8 +810,6 @@ function GenericTrigger.Add(data, region)
events[id] = nil;
WeakAuras.forceable_events[id] = {};

local register_for_frame_updates = false;

for triggernum=0,(data.numTriggers or 9) do
local trigger, untrigger;
if(triggernum == 0) then
Expand Down Expand Up @@ -873,15 +890,6 @@ function GenericTrigger.Add(data, region)
if (type(trigger_events) == "function") then
trigger_events = trigger_events(trigger, untrigger);
end

for index, event in ipairs(trigger_events) do
if (event == "FRAME_UPDATE") then
register_for_frame_updates = true;
else
frame:RegisterEvent(event);
aceEvents:RegisterMessage(event, HandleEvent, frame)
end
end
end
end
else
Expand Down Expand Up @@ -919,7 +927,6 @@ function GenericTrigger.Add(data, region)
end

if((trigger.custom_type == "status" or trigger.custom_type == "stateupdate") and trigger.check == "update") then
register_for_frame_updates = true;
trigger_events = {"FRAME_UPDATE"};
else
trigger_events = WeakAuras.split(trigger.events);
Expand All @@ -930,14 +937,6 @@ function GenericTrigger.Add(data, region)
-- COMBAT_LOG_EVENT_UNFILTERED, this hack renames the event to COMBAT_LOG_EVENT_UNFILTERED_CUSTOM to circumvent the COMBAT_LOG_EVENT_UNFILTERED checks
-- that are already in place. Replacing all those checks would be a pain in the ass.
trigger_events[index] = "COMBAT_LOG_EVENT_UNFILTERED_CUSTOM";
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");
else
if (event == "FRAME_UPDATE") then
register_for_frame_updates = true;
else
frame:RegisterEvent(event);
aceEvents:RegisterMessage(event, HandleEvent, frame)
end
end
force_events = trigger.custom_type == "status";
end
Expand Down Expand Up @@ -1003,11 +1002,7 @@ function GenericTrigger.Add(data, region)
end
end

if(register_for_frame_updates) then
WeakAuras.RegisterEveryFrameUpdate(id);
else
WeakAuras.UnregisterEveryFrameUpdate(id);
end

end

do
Expand Down Expand Up @@ -1050,6 +1045,16 @@ do
updating = false;
end
end

function WeakAuras.UnregisterAllEveryFrameUpdate()
if (not update_frame) then
return;
end
wipe(update_clients);
update_clients_num = 0;
update_frame:SetScript("OnUpdate", nil);
updating = false;
end
end

local combatLogUpgrade = {
Expand Down

0 comments on commit 6fa7c90

Please sign in to comment.