Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Debug dialog

From Resonite Wiki

For the component that manages this dialog see EngineDebugDialog.

The Debug dialog is a very simple text dump of internal engine metrics and is planned to be reworked to improve usability. Use caution when interpreting these metrics as not all of them are straightforward or functional, and may change between releases.

The Debug dialog is an advanced view that shows various internal measurements and timings that can be used to help locate performance bottlenecks or debug issues within a given subsystem in Resonite.

Note that many of these timings are taken at different and sometimes interleaving points in the engine flow and so cannot necessarily be directly summed together.

Gather Jobs

  • Total Speed

Worlds

This tab shows overall timing and performance information for FrooxEngine, the renderer, the shared memory managers used for IPC, and the audio engine.

  • Framerate - Averaged and raw engine framerate.
  • Engine Update Time - How long it takes for the engine to update in total between engine ticks. Not all this time is processing and may include e.g. waiting for the renderer.
  • Render Time - (Only in VR) How long it took Unity to render the scene. Unity only reports this while in VR mode.
  • Engine Frame Start Wait Time - (Measured from FrooxEngine) All FrooxEngine work is done, time that FrooxEngine spends waiting on renderer to be ready for another frame. This will be high if the renderer's performance is constrained.
    • Frame start bytes - Size of last message received from renderer with input data and other information.
  • Engine Start To Submit Time - (Measured from FrooxEngine) Renderer is ready for a new frame. Time between FrooxEngine running an update, generating a new frame update, and submitting to the renderer.
  • Renderer Start To Submit Time - (Measured from renderer) The time from the renderer starting a new tick and requesting a new frame from FrooxEngine to receiving a new frame.
  • Frame Processed To Next Begin Time - (Measured from renderer) When renderer finishes processing frame data sent by FrooxEngine, to when the next engine tick starts. Includes rendering time and any additional work the renderer/SteamVR does before the next step of the FrooxEngine update loop.
  • Asset Integration Time - After the renderer sends its "ready for next frame" message, the renderer performs processing of assets (texture uploads, material uploads, etc) to better utilize renderer idle time, if any are pending. This can include idle waiting if there is nothing to process.
    • Particle Extra time - Particles are given a small amount of additional update time during asset integration to run more smoothly.
    • Processed Tasks - Number of processing tasks
    • HandleWaits - Number of times renderer has slept with nothing additional to process.
    • Remaining tasks - Unprocessed tasks left in queue before receiving a new frame
    • HighPriority - Number of high priority tasks. Will normally be low.
    • Render - Number of render tasks
    • Particle - Number of particle tasks
  • Frame Update Handle Time - How long the renderer side takes to process the frame update, scene updates, includes updates, reflection proves, spherical harmonic computation
  • Shared Memory Managers - Shared memory managers are used in the engine-renderer IPC connection. These allocate large blocks of memory from which smaller blocks can be allocated and freed as needed. Typically blocks are allocated in 16MB chunks at minimum and freed up if unneeded.
    • in use - How many Shared Memory Managers are currently in use. Generally at least one is reserved to avoid repeated allocation and de-allocation.
    • pruning - True if memory managers are being cleaned up, if unused for long enough they will be de-allocated to free up memory.
    • Used - Shared memory currently in use.
    • Free - Available capacity from current Shared Memory Managers.
    • Capacity - Current capacity determined by the count of Shared Memory Managers and their combined allocation capacity.

The following are timings for various FrooxEngine stages.

  • UpdateBegin
  • FrameStart - Time FrooxEngine waits on the renderer to be ready for a new frame.
  • InputUpdate
  • GlobalCoroutinesUpdate
  • WorldUpdate - Time it takes to update the world.
  • RenderSubmit
  • AssetUpdate
  • Finished

The audio engine runs in parallel and asynchronously from the rest of FrooxEngine.

  • Audio Update Time - Time the audio engine takes to perform processing. If this number is too high (above e.g. 5ms) this may lead to audio issues.
    • Active Spaces
    • Dropped Frames
    • Listeners - Number of active audio listeners. These are heavy and can be a culprit for audio issues in a world.
    • Outputs - Number of active audio outputs.
    • DSP Effects - Number of active DSP effects, such as reverb.
    • Available Samples - Number of available audio samples in the audio buffer. If this reaches 0, it will cause a pop/crackle as the buffer underruns.
      • (Streaming) - Number of available audio samples in the streaming audio buffer. Will be -1 if not streaming audio.
    • Underruns - Number of times the audio buffer has underrun.
      • (Streaming) - Number of times the streaming audio buffer has underrun.
    • Output Sample Rate - The output samplerate of the audio engine, nominally 48kHz.
    • Avg Read Rate - Average rate of audio buffer reads. If this is not close to the output sample rate, it may imply audio issues.
    • Avg Write Rate - Average rate of audio buffer writes. If this is not close to the output sample rate, it may imply audio issues.
  • Audio Reads
    • Empty

These metrics are currently broken.
  • Asset Uploads
    • Tex
      • Slices
    • Mesh
    • Materials
    • Particles

These are aggregate update times for each individual world the user is in.

  • Userspace - Total update time for the Userspace world
  • Local - Total update time for the Local home world
  • Other worlds will be listed, if any.

These metrics are currently broken.
  • Camera Renders
  • Mirror/Portal Renders
  • Blit Renders
  • Desktop Renders
  • Total Gather Jobs
  • Completed Gather Jobs
  • Failed Gather Jobs

  • Object Pools
    • Total Object Count

Focused World

  • RefreshBegin
  • RefreshStages
  • PhysicsSync
  • PhysicsMoved
  • PhysicsUpdate
  • RunningStartups
  • WorldEvents
  • RunningEvents
  • Input
  • Coroutines
  • Updates
  • ProtoFluxRebuild
  • ProtoFluxEvents
  • ProtoFluxUpdates
  • ProtoFluxContinuousChanges
  • ProtoFluxDiscreteChangesPre
  • Changes
  • Destuctions
  • ProtoFluxDiscreteChangesPost
  • PhysicsSchleduleRefine
  • MovedSlots
  • UserPose
  • AudioSystem
  • ParticleSystems
  • MaterialUpdate
  • RenderUpdate
  • ValidatingPermissions
  • Finished
  • SynchronousActions

  • Coroutines
  • Updates
  • Changes
  • Moved Slots
  • Collider Updates
  • Connector Updates
  • Synchronous actions

  • Total Slots - Number of slots in current world
  • Audio Update Time
  • Audio Stream Buffer Underruns
  • Rebuild Node Group
  • Last Dirty Nodes
  • Last Updated Groups
  • Last Continuous Change Groups
  • Last Changed Groups
  • Last Changed Nodes
  • Last Node Events
  • Last Updated Nodes
  • Last Updated Drives

Physics

  • PreUpdate
  • MainUpdateTime
  • HapticWaitTime
  • PostUpdateTime
  • MovedEventTime
  • RemainderWaitTime

Main/Haptics

  • Active Bodies
  • Static Bodies
  • Total Sleeper Island Count
  • Total Constraint Count
  • Total Moved Statics
  • Total Moved Bodies
  • IslandSleeper
  • BodyLayoutOptimizer
  • Awakener
  • SolverBatchCompressor
  • PoserIntegrator
  • BroadPhase
  • BroadPhaseOverlayFinder
  • NarrowPhase
  • Profiler
  • Solver
  • ContactEventManager

Dynamic Bones

  • Total Update Time
  • Prepare
  • Overlaps
  • Simulation
  • Finish
  • Active Bones
  • Active Colliders
  • Scheduled collisions
TODO: Add links to relevant bepu documentation

Background Jobs

  • Currently processing jobs
    • LastProcessedJobs
  • ThreadPool WorkerThreads
    • CompletionPortThreads
    • MaxConcurrencyLevel

Assets

  • Asset Variant Managers
  • Loaded variants
  • FrooxEngine.AudioClip # (# variants)
  • FrooxEngine.Texture2D
  • FrooxEngine.Shader
  • FrooxEngine.LocaleResource
  • FrooxEngine.Font
  • FrooxEngine.Mesh
  • FrooxEngine.Cubemap
  • Total Active Text Pins

Special

This tab has some buttons that can be used to dump additional information or perform specific debugging operations.

  • Copy background thread processing snapshot to clipboard - Will copy the contents of the "Background Jobs" tab to the clipboard.
  • Start Recording Performance Metrics
  • Save Object Pool Stats
  • Force Full Garbage Collection - Will force a garbage collection run immediately.

Sources and more information

Frooxius goes over the various timing metrics in the Debug dialog.