Add Commander as optional dependency and make the profiler use Commander
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
## Notes: Frames that work for me
|
||||
## SavedVariables: OmicronFramesDB
|
||||
## Version: 0.1.0-alpha
|
||||
## OptionalDeps: Commander
|
||||
|
||||
main.lua
|
||||
|
||||
|
135
src/profiler.lua
135
src/profiler.lua
@@ -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)
|
||||
})
|
||||
|
Reference in New Issue
Block a user