Aux no longer consumes resources when not in use
Aux would perform unnecessary tasks every frame even when not in use. This has been solved by only running those tasks when Aux is actually doing things.
This commit is contained in:
+20
-12
@@ -15,13 +15,6 @@ function wipe(t)
|
||||
end
|
||||
M.wipe = wipe
|
||||
|
||||
CreateFrame'Frame':SetScript('OnUpdate', function()
|
||||
for t in auto_release do
|
||||
release(t)
|
||||
end
|
||||
wipe(auto_release)
|
||||
end)
|
||||
|
||||
function acquire()
|
||||
if pool_size > 0 then
|
||||
pool_size = pool_size - 1
|
||||
@@ -36,6 +29,19 @@ function acquire()
|
||||
end
|
||||
M.acquire = acquire
|
||||
|
||||
local f = CreateFrame('Frame', 'AuxGCFrame')
|
||||
local function AuxGCFrame_OnUpdate()
|
||||
for t in auto_release do
|
||||
release(t)
|
||||
end
|
||||
wipe(auto_release)
|
||||
this:SetScript("OnUpdate", nil) -- Remove the script, it will be set back if anything is added to auto_release
|
||||
end
|
||||
local function autoRelease(t)
|
||||
auto_release[t] = true
|
||||
f:SetScript("OnUpdate", AuxGCFrame_OnUpdate)
|
||||
end
|
||||
|
||||
function release(t)
|
||||
wipe(t)
|
||||
auto_release[t] = nil
|
||||
@@ -51,7 +57,7 @@ M.release = release
|
||||
do
|
||||
local function f(_, v)
|
||||
if v then
|
||||
auto_release[v] = true
|
||||
autoRelease(v)
|
||||
return v
|
||||
end
|
||||
end
|
||||
@@ -85,7 +91,7 @@ do
|
||||
local MAXPARAMS = 100
|
||||
|
||||
local code = [[
|
||||
local f, setn, acquire, auto_release = f, setn, acquire, auto_release
|
||||
local f, setn, acquire, autoRelease = f, setn, acquire, autoRelease
|
||||
return function(
|
||||
]]
|
||||
for i = 1, MAXPARAMS - 1 do
|
||||
@@ -103,7 +109,7 @@ do
|
||||
code = code .. [[
|
||||
until true
|
||||
local t = acquire()
|
||||
auto_release[t] = true
|
||||
autoRelease(t)
|
||||
setn(t, n)
|
||||
repeat
|
||||
]]
|
||||
@@ -116,9 +122,11 @@ do
|
||||
end
|
||||
]]
|
||||
|
||||
local chunk = loadstring(code)
|
||||
local chunkEnv = {setn=setn, acquire=acquire, auto_release=auto_release, autoRelease=autoRelease}
|
||||
setfenv(chunk, chunkEnv)
|
||||
function vararg(f)
|
||||
local chunk = loadstring(code)
|
||||
setfenv(chunk, {f=f, setn=setn, acquire=acquire, auto_release=auto_release})
|
||||
chunkEnv.f = f
|
||||
return chunk()
|
||||
end
|
||||
M.vararg = setmetatable({}, {
|
||||
|
||||
Reference in New Issue
Block a user