From 09e94ca72f47ef0c2d064d167fa029d661c4ef43 Mon Sep 17 00:00:00 2001 From: omicron Date: Sat, 1 Apr 2023 17:20:56 +0200 Subject: [PATCH] Add Commander as optional dependency and make the profiler use Commander --- src/OmicronFrames.toc | 1 + src/profiler.lua | 135 +++++++++++++++++------------------------- 2 files changed, 54 insertions(+), 82 deletions(-) diff --git a/src/OmicronFrames.toc b/src/OmicronFrames.toc index 75455b5..3f96062 100644 --- a/src/OmicronFrames.toc +++ b/src/OmicronFrames.toc @@ -3,6 +3,7 @@ ## Notes: Frames that work for me ## SavedVariables: OmicronFramesDB ## Version: 0.1.0-alpha +## OptionalDeps: Commander main.lua diff --git a/src/profiler.lua b/src/profiler.lua index 8f86214..090f0e5 100644 --- a/src/profiler.lua +++ b/src/profiler.lua @@ -16,95 +16,66 @@ -- Omicron Frames. If not, see . 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) +})