Talos docs

GET /perf

Since 0.6
Plain text

Response

Response: PerfSample

One frame's cost, as the agent sees it.

FieldTypePresentDescription
presentationPresentationSamplesometimes
frameintegeralwaysThe frame these numbers describe.
frame_msnumberalwaysLegacy host frame cost; the app reports simulation-step cost here, not presentation cadence.
physics_msnumberalwaysTime inside the physics step.
script_msnumberalwaysTime inside behavior update and event dispatch.
render_msnumberalwaysTime inside render submission.
p95_frame_msnumberalways95th percentile of frame_ms over the last 120 frames.
draw_callsintegeralwaysDraw calls submitted for the last frame, every pass counted.
instancesintegeralwaysInstances submitted in the opaque pass.
trianglesintegeralwaysTriangles submitted in the opaque pass.
heap_mbnumberalwaysResident heap in mebibytes, or 0 when the host does not measure it.
entitiesintegeralwaysLive entities.
bodiesintegeralwaysRigid bodies in the physics world.
agentsintegeralwaysCrowd agents on the navmesh.
time_scalenumberalwaysSimulation time scale in effect (0 while paused).
pausedbooleanalwaysWhether the simulation is paused.
nonfinite_scrubbedintegeralwaysNon-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.
unwiredUnwiredCallsalwaysBehavior 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.
ui_msnumbersometimesWall time of the game UI's tick and draw-list mapping, in milliseconds. 0 with no UI. GET /ui/stats breaks it down by screen.
ui_draw_callsintegersometimesDraw calls the UI pass issued last frame (quad rounds plus text rounds). Part of draw_calls; 0 headless.
terrain_loadTerrainLoadTimessometimesThe scene load's terrain time by stage; all-zero with no terrain.

Response: PresentationSample

FieldTypePresentDescription
presented_framesintegeralways
skipped_framesintegeralways
samplesintegeralways
fpsnumberalways
mean_interval_msnumberalways
p95_interval_msnumberalways
cpu_work_msnumberalways
present_wait_msnumberalways
physics_msnumberalways
script_msnumberalways
render_submit_msnumberalways
render_widthintegeralways
render_heightintegeralways
window_widthintegeralways
window_heightintegeralways
vsyncbooleanalways

Response: TerrainLoadTimes

Where the scene load's terrain time went, by stage, in wall-clock milliseconds.

FieldTypePresentDescription
prewarm_msnumbersometimesStarting the renderer's terrain pipeline early (a read of the layers' material files).
decode_msnumbersometimesReading and parsing the terrain file, and (drawn) decoding the layers' textures.
cache_read_msnumbersometimesReading and decompressing the project's terrain cache, hits and misses alike.
evaluate_msnumbersometimesThe evaluation apart from its cache reads (the stack's images and sculpt tiles, and the cells the cache did not have), plus bringing the ground to the roads, the water data and the collision query.
mesh_msnumbersometimesBuilding the cells' render meshes on the CPU (every level).
upload_msnumbersometimesHanding the layers, the cells' maps and the meshes to the renderer (GPU uploads).
collider_msnumbersometimesThe cell entities, their colliders and the ground's material lookup.
total_msnumbersometimesThe whole terrain attach, start to end.
disk_hitsintegersometimesCell results read back from the cache on disk: 0 on a cold load.
cells_evaluatedintegersometimesCell results computed during the load: 0 on a warm one.

Response: UnwiredCalls

Calls a behavior made that the engine recorded but could not act on.

FieldTypePresentDescription
audio_playintegeralwaysctx.audio.play for an asset with no registered sound.
particles_emitintegeralwaysctx.particles.emit with a preset name outside the eight the contract defines.
hud_setintegeralwaysctx.hud.set for a field nothing draws.
nav_speed_overrideintegeralwaysctx.nav.goTo(target, speed) with a speed: the crowd has no per-agent speed setter.
audio_busintegeralwaysctx.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_snapshotintegeralwaysctx.audio.snapshot(name) with no such snapshot in meta.audio.snapshots.
audio_musicintegeralwaysctx.audio.music.play(layer) with no such layer in meta.audio.music.layers.
body_pushintegersometimesA 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_ignoredintegersometimesA ctx.joint setMotor, stopMotor or setLimits on a fixed joint, or through a handle whose joint has gone. Nothing changed.
vehicle_ignoredintegersometimesA 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.