chore: flatten Altoholic-Addon/ wrapper + add standard .gitignore/.gitattributes
Each DataStore_* / Altoholic_* addon now lives at the repo root, matching the Exiles fork-layout convention (one folder per addon, no wrapper dir).
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
-- Simple code profiler, inspired by Chapter 1.14 (p120-130) of Game Programming Gems 1
|
||||
-- Ported from C++ to Lua by Thaoky. It will most likely evolve as my needs change.
|
||||
|
||||
local addonName = "Altoholic"
|
||||
local addon = _G[addonName]
|
||||
|
||||
addon.Profiler = {}
|
||||
|
||||
local ns = addon.Profiler -- ns = namespace
|
||||
|
||||
local samples
|
||||
local startProfile
|
||||
local level -- for the code hierarchy, unused for now, but already valid, will be useful when Dumping into a real frame
|
||||
local count -- to sort samples
|
||||
|
||||
function ns:Init()
|
||||
samples = samples or {}
|
||||
wipe(samples)
|
||||
startProfile = GetTime()
|
||||
level = 0
|
||||
count = 0
|
||||
end
|
||||
|
||||
function ns:Begin(name)
|
||||
samples[name] = samples[name] or {}
|
||||
local p = samples[name]
|
||||
|
||||
p.startTime = GetTime()
|
||||
if p.numPasses then -- if numPasses exists, it's an existing entry, update it and exit
|
||||
p.numPasses = p.numPasses + 1
|
||||
return
|
||||
end
|
||||
|
||||
p.accumulator = 0
|
||||
p.duration = 0
|
||||
p.numPasses = 1
|
||||
|
||||
p.level = level
|
||||
level = level + 1
|
||||
count = count + 1
|
||||
p.position = count
|
||||
end
|
||||
|
||||
function ns:End(name)
|
||||
local p = samples[name]
|
||||
if not p then return end
|
||||
|
||||
p.duration = GetTime() - p.startTime
|
||||
p.minTime = p.minTime or p.duration
|
||||
if p.duration < p.minTime then -- new min ?
|
||||
p.minTime = p.duration
|
||||
end
|
||||
|
||||
p.maxTime = p.maxTime or p.duration -- new max ?
|
||||
if p.duration > p.maxTime then
|
||||
p.maxTime = p.duration
|
||||
end
|
||||
|
||||
p.accumulator = p.accumulator + p.duration
|
||||
level = level - 1
|
||||
end
|
||||
|
||||
function ns:Dump()
|
||||
local view = {}
|
||||
|
||||
for k, _ in pairs(samples) do
|
||||
table.insert(view, k)
|
||||
end
|
||||
|
||||
sort(view, function(a, b)
|
||||
return samples[a].position < samples[b].position
|
||||
end)
|
||||
|
||||
addon:Print("Profiler Samples")
|
||||
addon:Print(" Avg | Min | Max | Num | Name")
|
||||
for _, name in ipairs(view) do
|
||||
local v = samples[name]
|
||||
addon:Print(format(" %.1f ms | %.1f ms | %.1f ms | %d | %s",
|
||||
(v.accumulator/v.numPasses)*1000, v.minTime*1000, v.maxTime*1000, v.numPasses, name))
|
||||
end
|
||||
end
|
||||
|
||||
function ns:GetSampleDuration(name)
|
||||
local p = samples[name]
|
||||
return p and p.duration or 0
|
||||
end
|
||||
Reference in New Issue
Block a user