Performance
Built-in measurements and custom numeric monitors.
GetMonitor returns the selected measurement in its own units. TimeProcess/TimePhysicsProcess use seconds; this build publishes accumulated maxima roughly once per second. They are not the duration of the current C# method.
AddCustomMonitor registers a Callable under a process-global ID. GetCustomMonitor invokes it synchronously. Return a prepared numeric value; registration does not automatically time an operation. Remove owned monitors before their receiver disappears. Built-in per-method C# profiling hooks are not implemented in the checked source; monitors are not a replacement for that profiler.
Declarations checked against C# SDK 1.0.0. Expand a name to see declarations and documentation.
Properties1
SingletonProperty
public static PerformanceInstance Singleton { get; }Methods9
AddCustomMonitor2 overloads
public static void AddCustomMonitor(StringName id, Callable callable, Reckfell.Collections.Array arguments);Registers a Callable under a process-unique ID. Its callback supplies a prepared numeric value when queried; type defines formatting. Time uses seconds, Memory bytes, Percentage a fraction. Remove the monitor before its receiver disappears.
| Name | Type | Default |
|---|---|---|
id | StringName | — |
callable | Callable | — |
arguments | Reckfell.Collections.Array | — |
public static void AddCustomMonitor(StringName id, Callable callable, Reckfell.Collections.Array arguments = null, Performance.MonitorType type = Performance.MonitorType.Quantity);Registers a Callable under a process-unique ID. Its callback supplies a prepared numeric value when queried; type defines formatting. Time uses seconds, Memory bytes, Percentage a fraction. Remove the monitor before its receiver disappears.
| Name | Type | Default |
|---|---|---|
id | StringName | — |
callable | Callable | — |
arguments | Reckfell.Collections.Array | null |
type | Performance.MonitorType | Performance.MonitorType.Quantity |
GetCustomMonitorVariant
public static Variant GetCustomMonitor(StringName id);Synchronously invokes an existing monitor Callable and returns its Variant. This is not an automatically accumulated history; use HasCustomMonitor for an ID that may have been removed.
| Name | Type | Default |
|---|---|---|
id | StringName | — |
VariantGetCustomMonitorNamesReckfell.Collections.Array<StringName>
public static Reckfell.Collections.Array<StringName> GetCustomMonitorNames();Returns the names of active custom monitors in an Reckfell.Collections.Array.
Reckfell.Collections.Array<StringName>GetCustomMonitorTypesint[]
public static int[] GetCustomMonitorTypes();Returns the Performance.MonitorType values of active custom monitors in an Reckfell.Collections.Array.
int[]GetMonitordouble
public static double GetMonitor(Performance.Monitor monitor);Returns a built-in measurement in its own units. TimeProcess/TimePhysicsProcess are seconds of periodically published maxima, not the current C# callback; multiply by 1000 for milliseconds.
| Name | Type | Default |
|---|---|---|
monitor | Performance.Monitor | — |
doubleGetMonitorModificationTimeulong
public static ulong GetMonitorModificationTime();Returns the last tick in which custom monitor was added/removed (in microseconds since the engine started). This is set to Time.GetTicksUsec when the monitor is updated.
ulongHasCustomMonitorbool
public static bool HasCustomMonitor(StringName id);Checks current ID registration. It does not protect a later access against another thread changing registration; manage monitors on one coordinated thread.
| Name | Type | Default |
|---|---|---|
id | StringName | — |
boolRemoveCustomMonitorvoid
public static void RemoveCustomMonitor(StringName id);Removes an existing ID from the registry. Remove only monitors owned by the component, before releasing a captured Callable receiver.
| Name | Type | Default |
|---|---|---|
id | StringName | — |
Performance.Monitor
| Value | Description |
|---|---|
AudioOutputLatency = 23 | Output latency of the |
MemoryMessageBufferMax = 6 | Largest amount of memory the message queue buffer has used, in bytes. The message queue is used for deferred functions calls and notifications. Lower is better. |
MemoryStatic = 4 | Static memory currently used, in bytes. Not available in release builds. Lower is better. |
MemoryStaticMax = 5 | Available static memory. Not available in release builds. Lower is better. |
MonitorMax = 60 | Represents the size of the |
Navigation2DActiveMaps = 39 | Number of active navigation maps in the |
Navigation2DAgentCount = 41 | Number of active navigation agents processing avoidance in the |
Navigation2DEdgeConnectionCount = 46 | Number of polygon edges that are considered connected by edge proximity |
Navigation2DEdgeCount = 44 | Number of navigation mesh polygon edges in the |
Navigation2DEdgeFreeCount = 47 | Number of navigation mesh polygon edges that could not be merged in the |
Navigation2DEdgeMergeCount = 45 | Number of navigation mesh polygon edges that were merged due to edge key overlap in the |
Navigation2DLinkCount = 42 | Number of active navigation links in the |
Navigation2DObstacleCount = 48 | Number of active navigation obstacles in the |
Navigation2DPolygonCount = 43 | Number of navigation mesh polygons in the |
Navigation2DRegionCount = 40 | Number of active navigation regions in the |
Navigation3DActiveMaps = 49 | Number of active navigation maps in the |
Navigation3DAgentCount = 51 | Number of active navigation agents processing avoidance in the |
Navigation3DEdgeConnectionCount = 56 | Number of polygon edges that are considered connected by edge proximity |
Navigation3DEdgeCount = 54 | Number of navigation mesh polygon edges in the |
Navigation3DEdgeFreeCount = 57 | Number of navigation mesh polygon edges that could not be merged in the |
Navigation3DEdgeMergeCount = 55 | Number of navigation mesh polygon edges that were merged due to edge key overlap in the |
Navigation3DLinkCount = 52 | Number of active navigation links in the |
Navigation3DObstacleCount = 58 | Number of active navigation obstacles in the |
Navigation3DPolygonCount = 53 | Number of navigation mesh polygons in the |
Navigation3DRegionCount = 50 | Number of active navigation regions in the |
NavigationActiveMaps = 24 | Number of active navigation maps in |
NavigationAgentCount = 26 | Number of active navigation agents processing avoidance in |
NavigationEdgeConnectionCount = 31 | Number of polygon edges that are considered connected by edge proximity |
NavigationEdgeCount = 29 | Number of navigation mesh polygon edges in |
NavigationEdgeFreeCount = 32 | Number of navigation mesh polygon edges that could not be merged in |
NavigationEdgeMergeCount = 30 | Number of navigation mesh polygon edges that were merged due to edge key overlap in |
NavigationLinkCount = 27 | Number of active navigation links in |
NavigationObstacleCount = 33 | Number of active navigation obstacles in the |
NavigationPolygonCount = 28 | Number of navigation mesh polygons in |
NavigationRegionCount = 25 | Number of active navigation regions in |
ObjectCount = 7 | Native objects registered in ObjectDB, including Entity instances. This counts objects rather than bytes: a managed C# array adds no ObjectDB object, and an internal buffer can grow without changing the count. Growth alone does not establish a leak. |
ObjectNodeCount = 9 | Entities inside the current EntityTree, including its root. Detached hierarchies are not counted. Returns 0 when the current MainLoop is not an EntityTree. |
ObjectOrphanNodeCount = 10 | With DEBUG_ENABLED in the engine build: total Entity count minus the count inside the current tree. Includes children of detached roots even when those children have a parent. Returns 0 without DEBUG_ENABLED. This is neither a leak count nor a memory size. |
ObjectResourceCount = 8 | Number of resources currently used. Lower is better. |
Physics2DActiveObjects = 17 | Number of active |
Physics2DCollisionPairs = 18 | Number of collision pairs in the 2D physics engine. Lower is better. |
Physics2DIslandCount = 19 | Number of islands in the 2D physics engine. Lower is better. |
Physics3DActiveObjects = 20 | Number of active |
Physics3DCollisionPairs = 21 | Number of collision pairs in the 3D physics engine. Lower is better. |
Physics3DIslandCount = 22 | Number of islands in the 3D physics engine. Lower is better. |
PipelineCompilationsCanvas = 34 | Number of pipeline compilations that were triggered by the 2D canvas renderer. |
PipelineCompilationsDraw = 37 | Number of pipeline compilations that were triggered while drawing the scene. These compilations will show up as stutters during gameplay the first time a user runs the game and the pipeline is required. |
PipelineCompilationsMesh = 35 | Number of pipeline compilations that were triggered by loading meshes. These compilations will show up as longer loading times the first time a user runs the game and the pipeline is required. |
PipelineCompilationsSpecialization = 38 | Number of pipeline compilations that were triggered to optimize the current scene. These compilations are done in the background and should not cause any stutters whatsoever. |
PipelineCompilationsSurface = 36 | Number of pipeline compilations that were triggered by building the surface cache before rendering the scene. These compilations will show up as a stutter when loading a scene the first time a user runs the game and the pipeline is required. |
RenderBufferMemUsed = 16 | The amount of render buffer memory used (in bytes). Lower is better. |
RenderStreamingTextureMemUsed = 59 | The amount of memory used by texture streaming (in bytes). This represents the current VRAM usage of streamed textures at their currently loaded mipmap levels. |
RenderTextureMemUsed = 15 | The amount of texture memory used (in bytes). Lower is better. |
RenderTotalDrawCallsInFrame = 13 | The total number of draw calls performed in the last rendered frame. This metric doesn't include culled objects (either via hiding nodes, frustum culling or occlusion culling), since they do not result in draw calls. Lower is better. |
RenderTotalObjectsInFrame = 11 | The total number of objects in the last rendered frame. This metric doesn't include culled objects (either via hiding nodes, frustum culling or occlusion culling). Lower is better. |
RenderTotalPrimitivesInFrame = 12 | The total number of vertices or indices rendered in the last rendered frame. This metric doesn't include primitives from culled objects (either via hiding nodes, frustum culling or occlusion culling). Due to the depth prepass and shadow passes, the number of primitives is always higher than the actual number of vertices in the scene (typically double or triple the original vertex count). Lower is better. |
RenderVideoMemUsed = 14 | The amount of video memory used (texture and vertex memory combined, in bytes). Since this metric also includes miscellaneous allocations, this value is always greater than the sum of |
TimeFps = 0 | The number of frames rendered in the last second. This metric is only updated once per second, even if queried more often. Higher is better. |
TimeNavigationProcess = 3 | Time it took to complete one navigation step, in seconds. This includes navigation map updates as well as agent avoidance calculations. Lower is better. |
TimePhysicsProcess = 2 | Time it took to complete one physics frame, in seconds. Lower is better. |
TimeProcess = 1 | Time it took to complete one frame, in seconds. Lower is better. |
Performance.MonitorType
| Value | Description |
|---|---|
Memory = 1 | Monitor output is formatted as computer memory. Submitted values should represent a number of bytes. |
Percentage = 3 | Monitor output is formatted as a percentage. Submitted values should represent a fractional value rather than the percentage directly, e.g. |
Quantity = 0 | Monitor output is formatted as an integer value. |
Time = 2 | Monitor output is formatted as time in milliseconds. Submitted values should represent a time in seconds (not milliseconds). |