reckfellENGINE

Performance

Built-in measurements and custom numeric monitors.

On this page
class PerformanceReckfellSharp

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.

Practical guide.

Declarations checked against C# SDK 1.0.0. Expand a name to see declarations and documentation.

Properties1

SingletonProperty
# Singleton
C#
public static PerformanceInstance Singleton { get; }

Methods9

AddCustomMonitor2 overloads
# AddCustomMonitor · 1/2
C#
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.

Parameters
NameTypeDefault
idStringName—
callableCallable—
argumentsReckfell.Collections.Array—
# AddCustomMonitor · 2/2
C#
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.

Parameters
NameTypeDefault
idStringName—
callableCallable—
argumentsReckfell.Collections.Arraynull
typePerformance.MonitorTypePerformance.MonitorType.Quantity
GetCustomMonitorVariant
# GetCustomMonitor
C#
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.

Parameters
NameTypeDefault
idStringName—
Returns Variant
GetCustomMonitorNamesReckfell.Collections.Array<StringName>
# GetCustomMonitorNames
C#
public static Reckfell.Collections.Array<StringName> GetCustomMonitorNames();

Returns the names of active custom monitors in an Reckfell.Collections.Array.

Returns Reckfell.Collections.Array<StringName>
GetCustomMonitorTypesint[]
# GetCustomMonitorTypes
C#
public static int[] GetCustomMonitorTypes();

Returns the Performance.MonitorType values of active custom monitors in an Reckfell.Collections.Array.

Returns int[]
GetMonitordouble
# GetMonitor
C#
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.

Parameters
NameTypeDefault
monitorPerformance.Monitor—
Returns double
GetMonitorModificationTimeulong
# GetMonitorModificationTime
C#
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.

Returns ulong
HasCustomMonitorbool
# HasCustomMonitor
C#
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.

Parameters
NameTypeDefault
idStringName—
Returns bool
RemoveCustomMonitorvoid
# RemoveCustomMonitor
C#
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.

Parameters
NameTypeDefault
idStringName—

Performance.Monitor

ValueDescription
AudioOutputLatency = 23

Output latency of the AudioServer. Equivalent to calling AudioServer.GetOutputLatency, it is not recommended to call this every frame.

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 Performance.Monitor enum.

Navigation2DActiveMaps = 39

Number of active navigation maps in the NavigationServer2D. This also includes the empty default navigation maps created by World2D instances.

Navigation2DAgentCount = 41

Number of active navigation agents processing avoidance in the NavigationServer2D.

Navigation2DEdgeConnectionCount = 46

Number of polygon edges that are considered connected by edge proximity NavigationServer2D.

Navigation2DEdgeCount = 44

Number of navigation mesh polygon edges in the NavigationServer2D.

Navigation2DEdgeFreeCount = 47

Number of navigation mesh polygon edges that could not be merged in the NavigationServer2D. The edges still may be connected by edge proximity or with links.

Navigation2DEdgeMergeCount = 45

Number of navigation mesh polygon edges that were merged due to edge key overlap in the NavigationServer2D.

Navigation2DLinkCount = 42

Number of active navigation links in the NavigationServer2D.

Navigation2DObstacleCount = 48

Number of active navigation obstacles in the NavigationServer2D.

Navigation2DPolygonCount = 43

Number of navigation mesh polygons in the NavigationServer2D.

Navigation2DRegionCount = 40

Number of active navigation regions in the NavigationServer2D.

Navigation3DActiveMaps = 49

Number of active navigation maps in the NavigationServer3D. This also includes the empty default navigation maps created by World3D instances.

Navigation3DAgentCount = 51

Number of active navigation agents processing avoidance in the NavigationServer3D.

Navigation3DEdgeConnectionCount = 56

Number of polygon edges that are considered connected by edge proximity NavigationServer3D.

Navigation3DEdgeCount = 54

Number of navigation mesh polygon edges in the NavigationServer3D.

Navigation3DEdgeFreeCount = 57

Number of navigation mesh polygon edges that could not be merged in the NavigationServer3D. The edges still may be connected by edge proximity or with links.

Navigation3DEdgeMergeCount = 55

Number of navigation mesh polygon edges that were merged due to edge key overlap in the NavigationServer3D.

Navigation3DLinkCount = 52

Number of active navigation links in the NavigationServer3D.

Navigation3DObstacleCount = 58

Number of active navigation obstacles in the NavigationServer3D.

Navigation3DPolygonCount = 53

Number of navigation mesh polygons in the NavigationServer3D.

Navigation3DRegionCount = 50

Number of active navigation regions in the NavigationServer3D.

NavigationActiveMaps = 24

Number of active navigation maps in NavigationServer2D and NavigationServer3D. This also includes the empty default navigation maps created by World2D and World3D instances.

NavigationAgentCount = 26

Number of active navigation agents processing avoidance in NavigationServer2D and NavigationServer3D.

NavigationEdgeConnectionCount = 31

Number of polygon edges that are considered connected by edge proximity NavigationServer2D and NavigationServer3D.

NavigationEdgeCount = 29

Number of navigation mesh polygon edges in NavigationServer2D and NavigationServer3D.

NavigationEdgeFreeCount = 32

Number of navigation mesh polygon edges that could not be merged in NavigationServer2D and NavigationServer3D. The edges still may be connected by edge proximity or with links.

NavigationEdgeMergeCount = 30

Number of navigation mesh polygon edges that were merged due to edge key overlap in NavigationServer2D and NavigationServer3D.

NavigationLinkCount = 27

Number of active navigation links in NavigationServer2D and NavigationServer3D.

NavigationObstacleCount = 33

Number of active navigation obstacles in the NavigationServer2D and NavigationServer3D.

NavigationPolygonCount = 28

Number of navigation mesh polygons in NavigationServer2D and NavigationServer3D.

NavigationRegionCount = 25

Number of active navigation regions in NavigationServer2D and NavigationServer3D.

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 RigidBody2D nodes in the game. Lower is better.

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 RigidBody3D and VehicleBody3D nodes in the game. Lower is better.

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 Performance.Monitor.RenderTextureMemUsed and Performance.Monitor.RenderBufferMemUsed. Lower is better.

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

ValueDescription
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. 0.5 for 50.00%.

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).

Reckfell Engine documentationBack to top ↑
QUICK LINKSGetting startedEntity hierarchyC# & .NET 10Scenes and prefabs
Reckfell guides and full API K
reckfellENGINE
RECKFELL ACCOUNT

Sign in

Sign in to your Reckfell account.

One account for the entire Reckfell platform.