Argus

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

FieldTypeDescription
iduuidServer-assigned at insert. Stable; safe to deep-link.
eventNamestringThe KIND of thing happening (e.g. Order.Complete, Window.ChatPresenter). Set at the call site.
eventUniqueIdstring \| nullPer-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.
sessionNamestringThe test-session label that wraps this capture. Auto-tagged {ProductName}_{Date} if you didn't set one in Argus Control.
environmentstring \| nullSet in Argus Control's Test Session card. One of Development / Staging / Production / Testing / Custom.
createdAttimestampISO-8601 server-side ingest time. Not the in-game capture wall-clock — for that, use startTime.

Frame timing

FieldUnitDescription
frameCountframesHow many frames the capture sampled. Bound by ArgusConfig.maxFrameBuffer (default 300).
totalTimesecondsWall-clock duration of the capture window.
averageFpsfpsMean FPS across frameCount samples. Computed from 1000 / avgFrameTime.
avgFrameTimemillisecondsMean per-frame delta time. The headline regression metric.
minFrameTime / maxFrameTimemillisecondsBest / 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.

FieldTypeDescription
frameIndexintIndex into the capture's frame array. Useful for cross-referencing with raw frameTimes.
deltaMsmillisecondsThe spike magnitude (this frame's deltaTime).
regionstring \| nullActive Argus.BeginRegion("…") at the spike moment. Null when no region wrapped the code path — the dashboard then falls back to scene + dominant alone.
scenestring \| nullActive scene name (SceneManager.GetActiveScene().name) at the spike moment.
dominantstring \| nullHeaviest 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

FieldUnitDescription
totalReservedMemoryMBTotal memory reserved by Unity (used + headroom).
totalAllocatedMemoryMBMemory currently in use by Unity allocations.
monoHeapSizeMBMono managed heap size. Monitor for slow growth across captures — that's a leak signal.
monoUsedSizeMBMono managed memory in active use. The headline managed- memory metric.
gcTimemillisecondsTime spent in GC during the capture.
frameData.gcAllocPerFrameBytesbytes[]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

FieldUnitDescription
drawCallscountLast-frame draw calls. Single most actionable GPU metric.
batchescountLast-frame batches. Batches < draw calls means SRP/URP static + dynamic batching is working.
trianglescountTriangles rendered last frame.
verticescountVertices rendered last frame.
renderingTimemillisecondsTime 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.

FieldUnitProfiler category
scriptsTimemsScripts (every MonoBehaviour Update + game logic)
animationTimemsAnimation (Animator updates, clip evaluation)
physicsTimemsPhysics (rigidbody simulation, collision detection)
uiTimemsGUI (Canvas rebuild, UI batching)
audioTimemsAudio (mixer, voice processing)

Audio & physics state

FieldTypeDescription
audioChannelsUsedintFrom AudioSettings.GetConfiguration().numRealVoices.
audioPlayingVoicesintActive AudioSources with isPlaying.
audioLoadPercentage0–100Playing voices / max-real voices, as percent.
activeRigidbodiesintSum of Rigidbody + Rigidbody2D instances in the active scene.
totalCollidersintSum of Collider + Collider2D instances in the active scene.

Device fingerprint

FieldSource
deviceModelSystemInfo.deviceModel — the most reliable field for grouping captures by device.
operatingSystemSystemInfo.operatingSystem
processorTypeSystemInfo.processorType
systemMemorySizeSystemInfo.systemMemorySize in MB
graphicsDeviceNameSystemInfo.graphicsDeviceName
graphicsMemorySizeSystemInfo.graphicsMemorySize in MB
unityVersionApplication.unityVersion
appVersionApplication.version from PlayerSettings → Other Settings → Version. Lets you correlate regressions to a specific build.
targetFrameRateApplication.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.

FieldTypeDescription
frameTimesfloat[]Per-frame deltaTime in milliseconds.
frameTimesCPUfloat[]Per-frame main-thread time in ms.
frameTimesGPUfloat[]Per-frame render-thread time in ms.
topSpikesSpikeRecord[]Hoisted from the raw payload to top-level for easy access. Same shape as the per-spike attribution above.
rawobjectThe 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.