Captured data fields
Reference for every metric a capture carries. Useful when looking at a dashboard row and wondering "what does that column actually mean?", or when integrating with the raw payload via webhook.
The schema is a flat-ish object delivered as JSON. Field names use camelCase on the wire; the dashboard's session-detail page labels them with their human equivalents.
Identity
| Field | Type | Description |
|---|
id | uuid | Server-assigned at insert. Stable; safe to deep-link. |
eventName | string | The KIND of thing happening (e.g. Order.Complete, Window.ChatPresenter). Set at the call site. |
eventUniqueId | string \| null | Per-instance dedup label — the SUBJECT of this specific event (e.g. "Tutorial Order"). Null when the call site didn't supply one. See event semantics. |
sessionName | string | The test-session label that wraps this capture. Auto-tagged {ProductName}_{Date} if you didn't set one in Argus Control. |
environment | string \| null | Set in Argus Control's Test Session card. One of Development / Staging / Production / Testing / Custom. |
createdAt | timestamp | ISO-8601 server-side ingest time. Not the in-game capture wall-clock — for that, use startTime. |
Frame timing
| Field | Unit | Description |
|---|
frameCount | frames | How many frames the capture sampled. Bound by ArgusConfig.maxFrameBuffer (default 300). |
totalTime | seconds | Wall-clock duration of the capture window. |
averageFps | fps | Mean FPS across frameCount samples. Computed from 1000 / avgFrameTime. |
avgFrameTime | milliseconds | Mean per-frame delta time. The headline regression metric. |
minFrameTime / maxFrameTime | milliseconds | Best / worst single frame in the capture window. |
Per-spike attribution (frameSpikes)
Top-10 frame-time outliers, each annotated with code-attribution context. Spike threshold is 2× rolling average.
| Field | Type | Description |
|---|
frameIndex | int | Index into the capture's frame array. Useful for cross-referencing with raw frameTimes. |
deltaMs | milliseconds | The spike magnitude (this frame's deltaTime). |
region | string \| null | Active Argus.BeginRegion("…") at the spike moment. Null when no region wrapped the code path — the dashboard then falls back to scene + dominant alone. |
scene | string \| null | Active scene name (SceneManager.GetActiveScene().name) at the spike moment. |
dominant | string \| null | Heaviest subsystem this frame: one of scripts, render, gc, or null when nothing clearly dominated. |
See code-region attribution in the Unity guide for how to wrap regions in your code.
Memory
| Field | Unit | Description |
|---|
totalReservedMemory | MB | Total memory reserved by Unity (used + headroom). |
totalAllocatedMemory | MB | Memory currently in use by Unity allocations. |
monoHeapSize | MB | Mono managed heap size. Monitor for slow growth across captures — that's a leak signal. |
monoUsedSize | MB | Mono managed memory in active use. The headline managed- memory metric. |
gcTime | milliseconds | Time spent in GC during the capture. |
frameData.gcAllocPerFrameBytes | bytes[] | Per-frame GC allocations. Big spikes here are the most common source of dropped frames in Unity. The Claude latest skill ranks the top 5 GC frames in its report. |
GPU / Rendering
| Field | Unit | Description |
|---|
drawCalls | count | Last-frame draw calls. Single most actionable GPU metric. |
batches | count | Last-frame batches. Batches < draw calls means SRP/URP static + dynamic batching is working. |
triangles | count | Triangles rendered last frame. |
vertices | count | Vertices rendered last frame. |
renderingTime | milliseconds | Time spent in the Unity Rendering profiler category. Sums draw calls, GPU sync, post-processing. |
Subsystem breakdown
Per-Unity-profiler-category timing for the last frame of the capture. Compare these against avgFrameTime to see which subsystem ate the budget.
| Field | Unit | Profiler category |
|---|
scriptsTime | ms | Scripts (every MonoBehaviour Update + game logic) |
animationTime | ms | Animation (Animator updates, clip evaluation) |
physicsTime | ms | Physics (rigidbody simulation, collision detection) |
uiTime | ms | GUI (Canvas rebuild, UI batching) |
audioTime | ms | Audio (mixer, voice processing) |
Audio & physics state
| Field | Type | Description |
|---|
audioChannelsUsed | int | From AudioSettings.GetConfiguration().numRealVoices. |
audioPlayingVoices | int | Active AudioSources with isPlaying. |
audioLoadPercentage | 0–100 | Playing voices / max-real voices, as percent. |
activeRigidbodies | int | Sum of Rigidbody + Rigidbody2D instances in the active scene. |
totalColliders | int | Sum of Collider + Collider2D instances in the active scene. |
Device fingerprint
| Field | Source |
|---|
deviceModel | SystemInfo.deviceModel — the most reliable field for grouping captures by device. |
operatingSystem | SystemInfo.operatingSystem |
processorType | SystemInfo.processorType |
systemMemorySize | SystemInfo.systemMemorySize in MB |
graphicsDeviceName | SystemInfo.graphicsDeviceName |
graphicsMemorySize | SystemInfo.graphicsMemorySize in MB |
unityVersion | Application.unityVersion |
appVersion | Application.version from PlayerSettings → Other Settings → Version. Lets you correlate regressions to a specific build. |
targetFrameRate | Application.targetFrameRate |
Per-frame arrays (frameData)
Held under the frameData jsonb column for cases when you need frame-level detail beyond the summary scalars. The dashboard shows these in a collapsible JSON viewer on the session-detail page.
| Field | Type | Description |
|---|
frameTimes | float[] | Per-frame deltaTime in milliseconds. |
frameTimesCPU | float[] | Per-frame main-thread time in ms. |
frameTimesGPU | float[] | Per-frame render-thread time in ms. |
topSpikes | SpikeRecord[] | Hoisted from the raw payload to top-level for easy access. Same shape as the per-spike attribution above. |
raw | object | The original Unity payload, kept for debugging. JSONB compresses well so the storage cost is small. |
Old captures & missing fields
Captures from before any given field landed render as null / — on the dashboard. Specifically:
appVersion, eventUniqueId, the newSpikeRecord shape, regionsObserved — require Unity tool from May 2026 or later. Older captures show legacy frameSpikes (bare float array) in the Top spikes panel.- The dashboard tolerates both shapes — no errors, just less attribution context for old data. Re-export the Unity tool and new captures populate everything.