Recent Topics

Ads

[Addon] PerfMon

Share, discuss, and get help with addons for Return of Reckoning.
For most available addons, visit Idrinth's Addons site.
Forum rules
Before posting in this forum, please read the Terms of Use and visit Idrinth's Addons site for most available addons.
User avatar
Caffeine
Posts: 613

[Addon] PerfMon

Post#1 » Fri Nov 21, 2025 9:01 pm

PerfMon

Image

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:
Holy **** does the core ui do a lot of chat parsing.

Code: Select all

-- (64/73 spikes - 88%) ChatManager.OnChatText()
-- (64/73 spikes - 88%) (Queue Queuer): QueueQueuer.OnChat()
-- (64/73 spikes - 88%) (Enemy): Enemy.OnChatTextArrived()
-- (64/73 spikes - 88%) (EA_ChatWindow): EventDebug_CHAT_TEXT_ARRIVED()
-- (64/73 spikes - 88%) "CHAT_TEXT_ARRIVED:"
-- (62/73 spikes - 85%) (EA_ChatWindow): EA_ChatWindow.OnTextLogUpdated( 0.0000, 65.0000 )
-- (62/73 spikes - 85%) (ror_PacketHandling): ror_PacketHandling.OnChatLogUpdated( 0.0000, 65.0000 )
-- (62/73 spikes - 85%) (Statdoll Remix): Statdoll.Getstats.onUpdate( 0.0000, 65.0000 )
-- (62/73 spikes - 85%) (RoR_ScenarioExtendedStats): RoR_ScenarioExtendedStats.OnChatLogUpdated( 0.0000, 65.0000 )
-- (62/73 spikes - 85%) (RoR_MatchMakingRaiting): RoR_MatchMakingRaiting.OnChatLogUpdated( 0.0000, 65.0000 )
-- (62/73 spikes - 85%) (RoR_MultiSpec): MultiSpec.OnChatLogUpdated( 0.0000, 65.0000 )
-- (62/73 spikes - 85%) (RoR_RankedLeaderboard): RoR_RankedLeaderboard.OnChatLogUpdated( 0.0000, 65.0000 )
-- (62/73 spikes - 85%) (RoR_ScenarioSurrenderWindow): RoR_Window_ScenarioSurrender.TextUpdate( 0.0000, 65.0000 )
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.
VinyUI | FPS Guide | Scenario Alert | Image Caffeine Image Decaf Image Vermont Image Nevada

Ads

Who is online

Users browsing this forum: kpihuss and 2 guests