An editor-only profiler for VRChat Udon. It hooks the SDK’s editor Udon runtime and records every event execution with timing, nesting, caller/callee edges and extern usage, then shows it in a UI Toolkit window. Nothing in this package ships in a world.
Unity’s built-in profiler only shows Udon as a single UdonBehaviour.ManagedUpdate() block. This one answers: which scripts, which events, who calls whom, which externs, per frame.
Drop the package into Packages/ (Unity 2022.3, com.vrchat.worlds >= 3.7). Open Window > Udon Profiler, enter play mode (ClientSim), and it records.
_update, _lateUpdate, _fixedUpdate, _postLateUpdate roots so one-off spikes (_start, player joins) do not dominate the maximum.Harmony patches applied in the editor only:
UdonBehaviour.RunProgram(uint): a prefix and finalizer record one sample per event with a timestamp pair. Nested events (one behaviour calling SendCustomEvent on another) form the call tree.UdonWrapper.GetExternFunctionDelegate: each extern delegate is wrapped once so extern count and time are attributed to the running event, with nested event time subtracted.UdonManager.ScheduleDelayedEvent: delayed events are linked to the event that scheduled them instead of appearing as orphan roots.Recording keeps a 600-frame ring buffer and allocates nothing on the hot path. Overhead while recording is two timestamps per event plus one per extern. Off the main thread (_onAudioFilterRead) nothing is recorded.
Time.frameCount, so they line up with the Unity Profiler.License: MIT.
dev.magmavrc.udonprofiler
Undefined
0.1.0
2022.3 or later
No dependencies
No legacy packages
Undefined