[Addon] PerfMon
Posted: Fri Nov 21, 2025 9:01 pm
PerfMon

Download: PerfMon_41.zip
Description
PerfMon is a tiny watchdog addon that monitors "elapsed" time and mirrors it into a separate timestamped log. "Elapsed" time is the gap in milliseconds between two successive OnUpdate callbacks in the Lua UI layer. Big gaps mean the client spent more time between frames which is bad.
/perfmon on starts recording "elapsed" samples, enables DebugWindow filters and starts core module logging.
/perfmon off stops recording elapsed samples, disables DebugWindow filters and turs off core module logging.
Elapsed samples under 0.2 sec are written to file once per second instead of every tick to keep log file slim while keeping all spikes intact. Log files land in /Interface/logs/ named with a timestamp of when the recording started.
Addon folder includes PerfMon.html - a web based log parser that opens in any browser. It expects two log files:
- a perfmon log like "perfmon_2025_11_03_175617_elapsed.log"
- the matching "uilog.log" full of events, functions and errors
Once both files are provided, four work panes become available:
Data Point Analysis
After clicking a point on the top graph it will show the exact function or event calls that fired on that second.
Note, that the in-game logging timestamps only provide second precision.
Differential Analysis
Type two time ranges, get a lists of lines that appear only during the slow stretch. Handy for weird intermittent freezes.
Correlation Analysis
Set a lower (and optional upper) threshold then look at messages common to every spike inside that band. Useful when you need proof that one addon is present in most heavy frames.
It's possible to add "noisy" functions to an ignore list if you know for sure they have a low performance impact. Some such functions are already added in the source code.
Scope and limitations
PerfMon is a very crude sampler, not a real profiler and definitely not a benchmarking suite. It lives on the Lua side and piggybacks on publicly available data. It can't see juicy stuff like GPU time, draw calls, IO waits, etc. Recorded data is mostly useful for "best-effort" fishing expeditions looking for addons that may cause stuttering.
PerfMon is a very IO intensive addon meaning it writes a lot to disc. For people on a slow HDD this might actually negatively affect performance you are trying to measure. This issue can be solved by moving logs folder to a RAM disc.
A full guide on how to do that is available here: viewtopic.php?p=586739#p586739
Dependencies
PerfMon requires an updated core module EA_UiDebugTools by Github which is inlcuded in the download archive.
License
PerfMon is released under the AGPL-3.0 license. Enjoy, share, improve.

Download: PerfMon_41.zip
Description
PerfMon is a tiny watchdog addon that monitors "elapsed" time and mirrors it into a separate timestamped log. "Elapsed" time is the gap in milliseconds between two successive OnUpdate callbacks in the Lua UI layer. Big gaps mean the client spent more time between frames which is bad.
/perfmon on starts recording "elapsed" samples, enables DebugWindow filters and starts core module logging.
/perfmon off stops recording elapsed samples, disables DebugWindow filters and turs off core module logging.
Elapsed samples under 0.2 sec are written to file once per second instead of every tick to keep log file slim while keeping all spikes intact. Log files land in /Interface/logs/ named with a timestamp of when the recording started.
Addon folder includes PerfMon.html - a web based log parser that opens in any browser. It expects two log files:
- a perfmon log like "perfmon_2025_11_03_175617_elapsed.log"
- the matching "uilog.log" full of events, functions and errors
Once both files are provided, four work panes become available:
Data Point Analysis
After clicking a point on the top graph it will show the exact function or event calls that fired on that second.
Note, that the in-game logging timestamps only provide second precision.
Differential Analysis
Type two time ranges, get a lists of lines that appear only during the slow stretch. Handy for weird intermittent freezes.
Correlation Analysis
Set a lower (and optional upper) threshold then look at messages common to every spike inside that band. Useful when you need proof that one addon is present in most heavy frames.
Spoiler:
Scope and limitations
PerfMon is a very crude sampler, not a real profiler and definitely not a benchmarking suite. It lives on the Lua side and piggybacks on publicly available data. It can't see juicy stuff like GPU time, draw calls, IO waits, etc. Recorded data is mostly useful for "best-effort" fishing expeditions looking for addons that may cause stuttering.
PerfMon is a very IO intensive addon meaning it writes a lot to disc. For people on a slow HDD this might actually negatively affect performance you are trying to measure. This issue can be solved by moving logs folder to a RAM disc.
A full guide on how to do that is available here: viewtopic.php?p=586739#p586739
Dependencies
PerfMon requires an updated core module EA_UiDebugTools by Github which is inlcuded in the download archive.
License
PerfMon is released under the AGPL-3.0 license. Enjoy, share, improve.