From 1402a910db093340e63ad0291e0b4b22ad0a92f5 Mon Sep 17 00:00:00 2001 From: Lacustat Date: Thu, 29 Oct 2026 13:08:32 +0100 Subject: [PATCH] 0.1.169: Zeitmesser-Haken in FW:Fire und Dispatch Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_016onJCSHLwhs9udhC9ZLzk9 --- Core/Init.lua | 22 ++++++++++++++++++---- Freewood-OctoWoW-Core.toc | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Core/Init.lua b/Core/Init.lua index fd06b42..805cb0f 100644 --- a/Core/Init.lua +++ b/Core/Init.lua @@ -119,6 +119,8 @@ function FW:Off(event, owner) end end +-- Zeitmesser-Haken (setzt das Dev-Modul): FW.ProfEnter(art, ereignis, eintrag) -> Tiefe oder nil, FW.ProfLeave(tiefe, art, ereignis, eintrag). +-- Ohne Dev-Modul kostet das je Aufruf nur eine nil-Pruefung. Die Haken laufen geschuetzt, ein Fehler dort bricht nichts ab. function FW:Fire(event, ...) local list = callbacks[event] if not list then @@ -128,13 +130,20 @@ function FW:Fire(event, ...) for i = 1, #list do snapshot[i] = list[i] end + local enter, leave = FW.ProfEnter, FW.ProfLeave for i = 1, #snapshot do local cb = snapshot[i] + local depth + if enter then + local ok, d = pcall(enter, "fire", event, cb) + if ok then depth = d end + end if cb.owner then SafeCall(cb.fn, cb.owner, ...) else SafeCall(cb.fn, ...) end + if depth then pcall(leave, depth, "fire", event, cb) end end end @@ -211,17 +220,22 @@ local function Dispatch(list, ...) for i = 1, #list do snapshot[i] = list[i] end - -- Zeitmesser (Dev-Reiter): FW.HandlerTimer(event, ms, owner), nur wenn gesetzt - local hook, prof = FW.HandlerTimer, _G.debugprofilestop + -- Zeitmesser (Dev-Modul): siehe FW:Fire + local enter, leave = FW.ProfEnter, FW.ProfLeave + local event = curEvent for i = 1, #snapshot do local h = snapshot[i] - local t0 = hook and prof and prof() + local depth + if enter then + local ok, d = pcall(enter, "event", event, h) + if ok then depth = d end + end if h.owner then SafeCall(h.fn, h.owner, ...) else SafeCall(h.fn, ...) end - if t0 then hook(curEvent, prof() - t0, h.owner) end + if depth then pcall(leave, depth, "event", event, h) end end end diff --git a/Freewood-OctoWoW-Core.toc b/Freewood-OctoWoW-Core.toc index a464b65..18603cc 100644 --- a/Freewood-OctoWoW-Core.toc +++ b/Freewood-OctoWoW-Core.toc @@ -3,7 +3,7 @@ ## Notes: Base addon of the Freewood family: data storage, UI kit, export/import and the main window. ## Notes-deDE: Basis-Addon der Freewood-Familie: Datenspeicher, UI-Bausteine, Export/Import und Hauptfenster. ## Author: Lacustat -## Version: 0.1.168 +## Version: 0.1.169 ## SavedVariables: FreewoodDB ## SavedVariablesPerCharacter: FreewoodCharDB