From 84e4444bac64068013e3a1bd82c3ff7045ac7bfa Mon Sep 17 00:00:00 2001 From: Josh Worden Date: Sat, 15 Oct 2022 22:14:47 -0500 Subject: [PATCH] Initial commit --- .editorconfig | 8 + .github/workflows/deploy-packager.yml | 21 + .pkgmeta | 1 + PerformanceMonitor.lua | 174 ++ PerformanceMonitor.png | Bin 0 -> 32495 bytes PerformanceMonitor.tga | Bin 0 -> 4114 bytes PerformanceMonitor.toc | 17 + README.md | 5 +- config.lua | 64 + embeds.xml | 13 + i18n/enUS.lua | 52 + vendor/AceConfig-3.0/AceConfig-3.0.lua | 58 + vendor/AceConfig-3.0/AceConfig-3.0.xml | 8 + .../AceConfigCmd-3.0/AceConfigCmd-3.0.lua | 794 +++++++ .../AceConfigCmd-3.0/AceConfigCmd-3.0.xml | 4 + .../AceConfigDialog-3.0.lua | 2015 +++++++++++++++++ .../AceConfigDialog-3.0.xml | 4 + .../AceConfigRegistry-3.0.lua | 371 +++ .../AceConfigRegistry-3.0.xml | 4 + vendor/AceGUI-3.0/AceGUI-3.0.lua | 1003 ++++++++ vendor/AceGUI-3.0/AceGUI-3.0.xml | 28 + .../AceGUIContainer-BlizOptionsGroup.lua | 138 ++ .../widgets/AceGUIContainer-DropDownGroup.lua | 157 ++ .../widgets/AceGUIContainer-Frame.lua | 316 +++ .../widgets/AceGUIContainer-InlineGroup.lua | 103 + .../widgets/AceGUIContainer-ScrollFrame.lua | 215 ++ .../widgets/AceGUIContainer-SimpleGroup.lua | 69 + .../widgets/AceGUIContainer-TabGroup.lua | 349 +++ .../widgets/AceGUIContainer-TreeGroup.lua | 718 ++++++ .../widgets/AceGUIContainer-Window.lua | 336 +++ .../widgets/AceGUIWidget-Button.lua | 103 + .../widgets/AceGUIWidget-CheckBox.lua | 296 +++ .../widgets/AceGUIWidget-ColorPicker.lua | 190 ++ .../widgets/AceGUIWidget-DropDown-Items.lua | 471 ++++ .../widgets/AceGUIWidget-DropDown.lua | 745 ++++++ .../widgets/AceGUIWidget-EditBox.lua | 263 +++ .../widgets/AceGUIWidget-Heading.lua | 78 + .../AceGUI-3.0/widgets/AceGUIWidget-Icon.lua | 140 ++ .../widgets/AceGUIWidget-InteractiveLabel.lua | 94 + .../widgets/AceGUIWidget-Keybinding.lua | 249 ++ .../AceGUI-3.0/widgets/AceGUIWidget-Label.lua | 178 ++ .../widgets/AceGUIWidget-MultiLineEditBox.lua | 366 +++ .../widgets/AceGUIWidget-Slider.lua | 284 +++ vendor/AceTimer-3.0/AceTimer-3.0.lua | 278 +++ vendor/AceTimer-3.0/AceTimer-3.0.xml | 4 + vendor/LibDBIcon-1.0/LibDBIcon-1.0.lua | 470 ++++ .../LibDataBroker-1.1/LibDataBroker-1.1.lua | 90 + vendor/LibStub/LibStub.lua | 51 + 48 files changed, 11394 insertions(+), 1 deletion(-) create mode 100644 .editorconfig create mode 100644 .github/workflows/deploy-packager.yml create mode 100644 .pkgmeta create mode 100644 PerformanceMonitor.lua create mode 100644 PerformanceMonitor.png create mode 100644 PerformanceMonitor.tga create mode 100644 PerformanceMonitor.toc create mode 100644 config.lua create mode 100644 embeds.xml create mode 100644 i18n/enUS.lua create mode 100644 vendor/AceConfig-3.0/AceConfig-3.0.lua create mode 100644 vendor/AceConfig-3.0/AceConfig-3.0.xml create mode 100644 vendor/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua create mode 100644 vendor/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.xml create mode 100644 vendor/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua create mode 100644 vendor/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.xml create mode 100644 vendor/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua create mode 100644 vendor/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.xml create mode 100644 vendor/AceGUI-3.0/AceGUI-3.0.lua create mode 100644 vendor/AceGUI-3.0/AceGUI-3.0.xml create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIContainer-SimpleGroup.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIContainer-Window.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-Button.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-Label.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua create mode 100644 vendor/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua create mode 100644 vendor/AceTimer-3.0/AceTimer-3.0.lua create mode 100644 vendor/AceTimer-3.0/AceTimer-3.0.xml create mode 100644 vendor/LibDBIcon-1.0/LibDBIcon-1.0.lua create mode 100644 vendor/LibDataBroker-1.1/LibDataBroker-1.1.lua create mode 100644 vendor/LibStub/LibStub.lua diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3274ec3 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true \ No newline at end of file diff --git a/.github/workflows/deploy-packager.yml b/.github/workflows/deploy-packager.yml new file mode 100644 index 0000000..a690f28 --- /dev/null +++ b/.github/workflows/deploy-packager.yml @@ -0,0 +1,21 @@ +name: Deploy via BigWigs Packager + +on: + push: + branches: + - main + tags: + - "*" + +jobs: + build: + runs-on: ubuntu-latest + env: + CF_API_KEY: ${{ secrets.CF_API_KEY }} + WAGO_API_TOKEN: ${{ secrets.WAGO_API_TOKEN }} + GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Check out code + uses: actions/checkout@v2 + - name: Package and Release + uses: BigWigsMods/packager@master diff --git a/.pkgmeta b/.pkgmeta new file mode 100644 index 0000000..f31f29c --- /dev/null +++ b/.pkgmeta @@ -0,0 +1 @@ +package-as: PerformanceMonitor diff --git a/PerformanceMonitor.lua b/PerformanceMonitor.lua new file mode 100644 index 0000000..77cae34 --- /dev/null +++ b/PerformanceMonitor.lua @@ -0,0 +1,174 @@ +local addonName, addon = ... +local L = addon.L +local ldb = LibStub:GetLibrary("LibDataBroker-1.1") +local ldbi = LibStub:GetLibrary('LibDBIcon-1.0') +local AceTimer = LibStub("AceTimer-3.0") +local timer = nil; + +local function showConfig() + InterfaceOptionsFrame_OpenToCategory(addonName) + InterfaceOptionsFrame_OpenToCategory(addonName) +end + +local function normal(text) + if not text then return "" end + return NORMAL_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE; +end + +local function red(text) + if not text then return "" end + return RED_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE; +end + +local function yellow(text) + if not text then return "" end + return YELLOW_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE; +end + +local function green(text) + if not text then return "" end + return GREEN_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE; +end + +local function highlight(text) + if not text then return "" end + return HIGHLIGHT_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE; +end + +local function muted(text) + if not text then return "" end + return DISABLED_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE; +end + + +-- Init & config panel +do + local eventFrame = CreateFrame("Frame", nil, InterfaceOptionsFramePanelContainer) + eventFrame:SetScript("OnEvent", function(self, event, loadedAddon) + if loadedAddon ~= addonName then return end + self:UnregisterEvent("ADDON_LOADED") + + if type(PerformanceMonitorSettings) ~= "table" then PerformanceMonitorSettings = {currencies={},minimap={hide=false}} end + local sv = PerformanceMonitorSettings + if type(sv.minimap) ~= "table" then sv.minimap = {hide=false} end + if type(sv.showFPS) ~= "boolean" then sv.showFPS = true end + if type(sv.showLatency) ~= "boolean" then sv.showLatency = true end + if type(sv.showLatencyWorld) ~= "boolean" then sv.showLatencyWorld = false end + if type(sv.showMem) ~= "boolean" then sv.showMem = true end + addon.db = sv + + ldbi:Register(addonName, addon.dataobj, addon.db.minimap) + self:SetScript("OnEvent", nil) + end) + eventFrame:RegisterEvent("ADDON_LOADED") + addon.frame = eventFrame +end + +-- data text +do + local f = CreateFrame("frame") + local text = "..loading.." + local tooltip = "" + local dataobj = ldb:NewDataObject("PerformanceMonitor", { + type = "data source", + icon = "Interface\\AddOns\\PerformanceMonitor\\PerformanceMonitor", + text = text, + OnEnter = function(frame) + GameTooltip:SetOwner(frame, "ANCHOR_NONE") + GameTooltip:SetPoint("TOPLEFT", frame, "BOTTOMLEFT") + GameTooltip:ClearLines() + addon:updateTooltip(frame) + GameTooltip:Show() + end, + OnLeave = function() + GameTooltip:Hide() + end, + OnClick = function(self, button) + showConfig() + end, + }) + + addon.dataobj = dataobj + + local function fmtLabel(text) + if not text then return "" end + text = normal(text); + return " "..normal(text)..": "; + end + + local function updateText() + local fps = GetFramerate(); + local _, _, latencyHome, latencyWorld = GetNetStats(); + local memory, gcThreshold = gcinfo(); + + local function getFPS() + local function color(v) + if (v >= 60) then + return green(format('%2.1f', v)) + elseif (v >= 30) then + return yellow(format('%2.1f', v)) + end + return red(format('%2.1f', v)) + end + return fmtLabel(L.labelFPS)..color(fps) + end + + local function getLatency() + local t = fmtLabel(L.labelLatency) + local function color(v) + if (v <= 300) then + return green(format('%d', v)..'ms') + elseif (v <= 600) then + return yellow(format('%d', v)..'ms') + end + return red(format('%d', v)..'ms') + end + if (addon.db.showLatency) then + t = t..color(latencyHome) + end + if (addon.db.showLatency and addon.db.showLatencyWorld) then + t = t.." " + end + if (addon.db.showLatencyWorld) then + t = t..color(latencyWorld) + end + return t + end + local function getMemoryUsage() + local function color(v) + -- @todo thresholds? + return highlight(format('%.3f', v / 1024).." MB") + end + return fmtLabel(L.labelMem)..color(memory) + end + + + local text = ""; + if (addon.db.showFPS) then text = text..getFPS() end + if (addon.db.showLatency or addon.db.showLatencyWorld) then + text = text..getLatency() + end + if (addon.db.showMem) then text = text..getMemoryUsage() end + + dataobj.text = text; + end + + function addon:updateTooltip() + + GameTooltip:AddLine(L["PerformanceMonitor"].."\n") + + end + + function addon:setDB(key, value) + addon.db[key] = value + updateText() + end + + f:RegisterEvent("PLAYER_ENTERING_WORLD"); + f:SetScript("OnEvent", function(self, event) + if not timer then + -- @todo should this only run when the datatext is displayed? + timer = AceTimer.ScheduleRepeatingTimer("PerformanceMonitor", updateText, 1.5 ) + end + end) +end diff --git a/PerformanceMonitor.png b/PerformanceMonitor.png new file mode 100644 index 0000000000000000000000000000000000000000..08dc5d18ce1ab71ded2249601bc5318fa21f5b3c GIT binary patch literal 32495 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

<2snfPw%eVE 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 G`F{ZS+o+ZR literal 0 HcmV?d00001 diff --git a/PerformanceMonitor.tga b/PerformanceMonitor.tga new file mode 100644 index 0000000000000000000000000000000000000000..215408d34d513ad0b1a81b90191080401e8671b5 GIT binary patch literal 4114 zcmeHJYfKbZ6vkaChZS~+|0Ri zzjMCxx@Yn6k@>ivARqjD$-NtSk7VF~o&g5^o2@V!oA@Bhb;e-qqg4DLr7=2~K(u-H@RgYXahpjoqdH^w<=TT=yTm+wOQ58zqxM>~Mm>A`3+L*%&vDbZBg)6@8lE=1`KX_ptEM2@9ii?WC z&o=Q1jQx86#YF(0_d7sFbHE9fUy*<8bNUcTamwDb?Pbmhi|0c0u6B>@l=D4ct84`S zjD=20$+>E_ZiVVCTY%$v@Sn8^NNrLt^oV%fCFI}I4#t=zU`gEz3~wGle%mvAuu>}S z&VmzrTFpC%z{;*IMW5A@~dI|jP;OM+708=KR_S+9wILIZ+uWPYVM}Jp;F`~{FyD)z}cdJ z7W|!T!02tL$351a8yyvOx4o?m>S}9Yc6vH+9JllFnTj(7)XIebmn<|2Ce3e#wDq?k zp`;sv)Aj+Y4eUi6xl2zxj9RrPV(FX*gx9?i%L|5Rz5aIuTBTr&z2Wuc%Uy*3z5046 zDl7zp!Ei&0LD@zd%>AJ=Dn$O7=)=^aTOdqa2AnCF^rZBmSDZg~sc&k;csbbf~w7%A$i)gPH!CUjjTrKiF~C+^dY6}Hbkxb2^89~PCScn z;~6!7Ci`TA(;fG!tEYihtNQT#X|-Y*hWX?8ks~7i(biV62i`6%C3$_?eGg%H<3LjJ zRndpI;#)8-c?aB#!ys+Yy;j|@w;TcZS2g&QYAv*ULpj9T41G7vfTQfOt(L;CaD=(h}?1e5o`|Do? ziBaU(v?x2<;pQgq2J8Xs2QZt>UrC@+QKrxeeF=q^#T-m2#QPMP2R<^YNU7I+w%|m) zC-y0;UmftJ>2j&ER936imo`;adSWO1`x+ZzLq!F-0}rHFsZ1+X8!bu2B7gjww;;rR z2sER^zNS>l-r^gdd-(OCL8Ol1QeCNx@%Oj3v^>GzdfrZwEPaK zl9xO$B0T)w!TtNepx49PtSrc|+d-$*!rGD&n4OV9YEa{)>}ewPnk| zEC^@4)TCP(rPLH)-M^$%x*|LnB|UtWjB{^SZcYyD#@u7C!$$16Rk^uf2?`SXe|13t z2!e3!S$2kdE|<%5aL$SKUxL5ADwPUw7D8e|0_@nn9p+?af=;J9GFpKhUa6d06$3?iCasHFKV-Gs;ZdAOm!Qm-{ fVct)pANQ0j`%o|%zeO`C!!tFaHIjk +