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
## SavedVariables: OmicronFramesDB
## Version: 0.1.0-alpha
## OptionalDeps: Commander
main.lua

View File

@@ -16,95 +16,66 @@
-- Omicron Frames. If not, see <https://www.gnu.org/licenses/>.
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 data = {}
function public.StartProfiler()
local profiler = C_CVar.GetCVar("scriptProfile")
if profiler ~= "1" then
print("scriptProfiler is off", profiler)
print("set it to on with `/console scriptProfile 1`, then reload the UI.")
return
Commander.RegisterCommand("omi-pstart", {
description="Start/reset the OmicronFrames profiler",
command=function()
local profiler = C_CVar.GetCVar("scriptProfile")
if profiler ~= "1" then
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
print("OmicronFrames: start profiling")
ResetCPUUsage()
end
})
function public.StopProfiler()
print("OmicronFrames: stop profiling")
UpdateAddOnCPUUsage()
local total = GetAddOnCPUUsage(addonName)
data = {{
name = "Total OmicronFrames time",
time = total,
pct = 1.0
}}
Commander.RegisterCommand("omi-pstop", {
description="Stop the OmicronFrames profiler",
command=function()
PrintLn("OmicronFrames: stop profiling")
UpdateAddOnCPUUsage()
local total = GetAddOnCPUUsage(addonName)
data = {{
name = "Total OmicronFrames time",
time = total,
pct = 1.0
}}
for typeName, T in pairs(types) do
if type(T) == "table" then
for fnName, fn in pairs(T) do
if type(fn) == "function" then
local time = GetFunctionCPUUsage(fn, true)
table.insert(data, {
name = string.format("%s:%s", typeName, fnName),
time = time,
pct = time/total
})
for typeName, T in pairs(types) do
if type(T) == "table" then
for fnName, fn in pairs(T) do
if type(fn) == "function" then
local time = GetFunctionCPUUsage(fn, true)
table.insert(data, {
name = string.format("%s:%s", typeName, fnName),
time = time,
pct = time/total
})
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
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)
})