GET /perf
Since 0.6
Response
Response: PerfSample
One frame's cost, as the agent sees it.
| Field | Type | Present | Description |
|---|---|---|---|
presentation | PresentationSample | sometimes | |
frame | integer | always | The frame these numbers describe. |
frame_ms | number | always | Legacy host frame cost; the app reports simulation-step cost here, not presentation cadence. |
physics_ms | number | always | Time inside the physics step. |
script_ms | number | always | Time inside behavior update and event dispatch. |
render_ms | number | always | Time inside render submission. |
p95_frame_ms | number | always | 95th percentile of frame_ms over the last 120 frames. |
draw_calls | integer | always | Draw calls submitted for the last frame, every pass counted. |
instances | integer | always | Instances submitted in the opaque pass. |
triangles | integer | always | Triangles submitted in the opaque pass. |
heap_mb | number | always | Resident heap in mebibytes, or 0 when the host does not measure it. |
entities | integer | always | Live entities. |
bodies | integer | always | Rigid bodies in the physics world. |
agents | integer | always | Crowd agents on the navmesh. |
time_scale | number | always | Simulation time scale in effect (0 while paused). |
paused | boolean | always | Whether the simulation is paused. |
nonfinite_scrubbed | integer | always | Non-finite floats scrubbed on the way out since process start. Non-zero means some subsystem produced a NaN or an infinity; see crates/query/src/finite.rs. |
unwired | UnwiredCalls | always | Behavior calls the engine recorded but could not act on, cumulative since load. See UnwiredCalls; all-zero is healthy and is what an empty scene reports. |
Response: PresentationSample
| Field | Type | Present | Description |
|---|---|---|---|
presented_frames | integer | always | |
skipped_frames | integer | always | |
samples | integer | always | |
fps | number | always | |
mean_interval_ms | number | always | |
p95_interval_ms | number | always | |
cpu_work_ms | number | always | |
present_wait_ms | number | always | |
physics_ms | number | always | |
script_ms | number | always | |
render_submit_ms | number | always | |
render_width | integer | always | |
render_height | integer | always | |
window_width | integer | always | |
window_height | integer | always | |
vsync | boolean | always |
Response: UnwiredCalls
Calls a behavior made that the engine recorded but could not act on.
| Field | Type | Present | Description |
|---|---|---|---|
audio_play | integer | always | ctx.audio.play for an asset with no registered sound. |
particles_emit | integer | always | ctx.particles.emit with a preset name outside the eight the contract defines. |
hud_set | integer | always | ctx.hud.set for a field nothing draws. |
nav_speed_override | integer | always | ctx.nav.goTo(target, speed) with a speed: the crowd has no per-agent speed setter. |
audio_bus | integer | always | ctx.audio.play({ bus }) or ctx.audio.bus(name) naming a bus meta.audio does not declare. The cue still plays, on the default bus. |
audio_snapshot | integer | always | ctx.audio.snapshot(name) with no such snapshot in meta.audio.snapshots. |
audio_music | integer | always | ctx.audio.music.play(layer) with no such layer in meta.audio.music.layers. |
body_push | integer | sometimes | A ctx.body force, torque or impulse on a body that is not dynamic (kinematic or static), or through a handle whose body has gone. Nothing moved. |
joint_ignored | integer | sometimes | A ctx.joint setMotor, stopMotor or setLimits on a fixed joint, or through a handle whose joint has gone. Nothing changed. |
vehicle_ignored | integer | sometimes | A ctx.vehicle.drive on a vehicle the engine drives from the input actions (input: "auto"), or a ctx.vehicle call through a handle whose vehicle has gone. Nothing changed. |
Example
curl "http://127.0.0.1:7700/perf"
Start a server with argus run --serve; the port is --port (7700 by default). The request and response fields are in the query API guide.