Add Commander as optional dependency and make the profiler use Commander

This commit is contained in:
2023-04-01 17:20:56 +02:00
parent 464fcbb1df
commit 09e94ca72f
2 changed files with 54 additions and 82 deletions

View File

@@ -3,6 +3,7 @@
## Notes: Frames that work for me ## Notes: Frames that work for me
## SavedVariables: OmicronFramesDB ## SavedVariables: OmicronFramesDB
## Version: 0.1.0-alpha ## Version: 0.1.0-alpha
## OptionalDeps: Commander
main.lua main.lua

View File

@@ -16,95 +16,66 @@
-- Omicron Frames. If not, see <https://www.gnu.org/licenses/>. -- Omicron Frames. If not, see <https://www.gnu.org/licenses/>.
local addonName, omi = ... local addonName, omi = ...
local public = omi.GetModule("public") -- Profiler is only active if the optional Commander dependency is included
if not Commander then
return
end
local PrintLn = Commander.PrintLn
local Printf = Commander.Printf
local types = omi.GetModule("types") local types = omi.GetModule("types")
local data = {} local data = {}
function public.StartProfiler() Commander.RegisterCommand("omi-pstart", {
local profiler = C_CVar.GetCVar("scriptProfile") description="Start/reset the OmicronFrames profiler",
if profiler ~= "1" then command=function()
print("scriptProfiler is off", profiler) local profiler = C_CVar.GetCVar("scriptProfile")
print("set it to on with `/console scriptProfile 1`, then reload the UI.") if profiler ~= "1" then
return PrintLn("scriptProfiler is off")
PrintLn("set it to on with `/console scriptProfile 1`, then reload the UI.")
return
end
PrintLn("OmicronFrames: start profiling")
ResetCPUUsage()
end end
print("OmicronFrames: start profiling") })
ResetCPUUsage()
end
function public.StopProfiler() Commander.RegisterCommand("omi-pstop", {
print("OmicronFrames: stop profiling") description="Stop the OmicronFrames profiler",
UpdateAddOnCPUUsage() command=function()
local total = GetAddOnCPUUsage(addonName) PrintLn("OmicronFrames: stop profiling")
data = {{ UpdateAddOnCPUUsage()
name = "Total OmicronFrames time", local total = GetAddOnCPUUsage(addonName)
time = total, data = {{
pct = 1.0 name = "Total OmicronFrames time",
}} time = total,
pct = 1.0
}}
for typeName, T in pairs(types) do for typeName, T in pairs(types) do
if type(T) == "table" then if type(T) == "table" then
for fnName, fn in pairs(T) do for fnName, fn in pairs(T) do
if type(fn) == "function" then if type(fn) == "function" then
local time = GetFunctionCPUUsage(fn, true) local time = GetFunctionCPUUsage(fn, true)
table.insert(data, { table.insert(data, {
name = string.format("%s:%s", typeName, fnName), name = string.format("%s:%s", typeName, fnName),
time = time, time = time,
pct = time/total pct = time/total
}) })
end
end end
end end
end end
table.sort(data, function(a, b) return a.time > b.time end)
end,
})
Commander.RegisterCommand("omi-pprint", {
description="Print the collected OmicronFrames profiling data",
command=function()
for _, item in ipairs(data) do
Printf("% 5.1f%% % 5fms %s\n", item.pct*100, item.time, item.name)
end
end end
table.sort(data, function(a, b) return a.time > b.time end) })
end
local profileFrame
local profileText
function public.PrintProfilerData()
profileFrame:Show()
profileText:SetText("")
for _, item in ipairs(data) do
local line = string.format("% 5.1f%% % 5fms %s\n", item.pct*100, item.time, item.name)
profileText:Insert(line)
end
profileText:SetFocus()
end
local function CreateProfileFrame()
profileFrame = CreateFrame("Frame", nil, UIParent, "BackdropTemplate")
local frame = profileFrame
frame.backdropInfo = {
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true,
tileEdge = true,
tileSize = 8,
edgeSize = 8,
insets = { left = 1, right = 1, top = 1, bottom = 1 },
}
-- Output wrap
frame:ApplyBackdrop()
frame:SetBackdropColor(0, 0, 0, 1)
frame:SetSize(640, 480)
frame:SetPoint("TOPRIGHT")
frame:SetFrameStrata("DIALOG")
frame:Hide()
local scrollFrame = CreateFrame("ScrollFrame", nil, frame, "UIPanelScrollFrameTemplate")
scrollFrame:SetSize(640-16-20, 480-16)
scrollFrame:SetPoint("TOPLEFT", frame, "TOPLEFT", 8, -8)
profileText = CreateFrame("EditBox", nil, scrollFrame)
profileText:SetFontObject(ChatFontNormal)
profileText:SetWidth(640-16-20)
profileText:SetMultiLine(true)
profileText:SetAutoFocus(false)
scrollFrame:SetScrollChild(profileText)
profileText:SetScript("OnEscapePressed", function(self)
frame:Hide()
end)
end
omi.SetEventHandler("OMICRON_LOADING", CreateProfileFrame)