| stat | token | enum | dec | graph | thr | cadence / source | notes |
| TPS | {tps} | TPS | ✓ | ✓ | ✓ | PER_FRAME · fast_metrics / EVENT_PUSHED · tick packet | SP/LAN: derived from live MSPT. Multiplayer: MineTunerDataHolder.tickRate, set by the mixin. |
| MSPT | {mspt} | MSPT | ✓ | ✓ | — | PER_FRAME · singleplayer_mspt | SP/LAN only, hidden on remote servers. Colored using TPS's scale, not its own. |
| FPS | {fps} | FPS | — | ✓ | ✓ | PER_FRAME · client_perf | — |
| Frametime | {frametime} | FRAMETIME | ✓ | ✓ | ✓ | every rendered frame · LevelRenderEvents.START_MAIN, not SamplingDriver | ms between rendered frames. Sampled outside the usual StatSource pipeline so it isn't gated by the overlay/F3/GUI — see architecture doc. 0 until the 2nd frame of the session. |
| Avg FPS | {fps_avg} | FPS_AVG | ✓ | — | — | every rendered frame · fed from FRAMETIME's smoothedFps, same as Min/Max FPS below | Running mean over the whole session (mod load, or last world join/disconnect, to now — see MineTunerDataHolder). No graph/threshold: a running mean moves too slowly to be graph-worthy, and it isn't a live health indicator the way instantaneous FPS is. Colored using FPS's fixed 60/30 bands anyway, just not user-editable. 0 until the 2nd frame of the session. |
| Min FPS | {fps_min} | FPS_MIN | ✓ | — | — | every rendered frame · fed from FRAMETIME's smoothedFps | Lowest per-frame FPS reading observed this session. Same no-graph/no-threshold reasoning as Avg FPS. Resets on world join/disconnect, not on demand. |
| Max FPS | {fps_max} | FPS_MAX | ✓ | — | — | every rendered frame · fed from FRAMETIME's smoothedFps | Highest per-frame FPS reading observed this session. Same no-graph/no-threshold reasoning as Avg FPS. |
| 1% Low | {fps_1low} | FPS_1PCT_LOW | ✓ | ✓ | ✓ | THROTTLED (500ms) · percentile_low_fps | RTSS-style: average FPS of the slowest 1% of raw (unsmoothed) per-frame samples this session, sorted descending by frametime then averaged. Reads its own dedicated raw-frametime ring buffer, NOT FRAMETIME's smoothed history — see architecture doc. Renders nothing below 200 accumulated samples. Unlike Avg/Min/Max FPS above, this graphs and has a real user-editable threshold (defaults to FPS's own 60/30 bands): a percentile low is a live, actionable signal in the same way instantaneous FPS is, not a slowly-drifting aggregate. Resets on world join/disconnect alongside Avg/Min/Max FPS. |
| 0.1% Low | {fps_01low} | FPS_01PCT_LOW | ✓ | ✓ | ✓ | THROTTLED (500ms) · percentile_low_fps | Same computation as 1% Low above, over the slowest 0.1% instead. Needs 10x the samples to represent even one frame, so it renders nothing below 2000 accumulated samples (vs. 1% Low's 200) — in practice, this only turns on once the raw-frametime buffer is completely full for the first time this session. |
| Ping | {ping} | PING | — | ✓ | ✓ | PER_FRAME · ping | From the player-list ping field. |
| Memory | {mem} | MEMORY | — | ✓ | ✓ | PER_FRAME · fast_metrics | JVM heap used/max MB. Graphed as heap-used %, not raw MB. |
| CPU | {cpu} | CPU | ✓ | ✓ | ✓ | THROTTLED (500ms) · slow_metrics | OperatingSystemMXBean, HotSpot/OpenJDK only — "N/A" on other JVM vendors. |
| GC Time | {gc} | GC_TIME | — | — | — | THROTTLED (500ms) · slow_metrics | Cumulative ms, summed across all GC beans. Not a delta. |
| Rendered Sections | {rendered} | RENDERED_SECTIONS | — | — | — | PER_FRAME · rendered_sections | Pulled from LevelRenderer. |
| Players Online | {players} | PLAYERS_ONLINE | — | — | — | PER_FRAME · world_counts | — |
| GPU Temp opt-in | {gpu_temp} | GPU_TEMP | ✓ | ✓ | ✓ | background thread · HardwareSensorPoller | °C via LHM. Default cutoffs <70 green / <85 yellow / ≥85 red. |
| GPU Clock opt-in | {gpu_clock} | GPU_CLOCK | ✓ | ✓ | — | background thread · HardwareSensorPoller | MHz via LHM. No threshold — clock tracks workload/boost. |
| GPU Usage opt-in | {gpu_usage} | GPU_USAGE | ✓ | ✓ | — | background thread · HardwareSensorPoller | % via LHM. No threshold — high usage during gameplay is expected/normal. |
| VRAM Used opt-in | {vram_used} | VRAM_USED | — | ✓ | — | background thread · HardwareSensorPoller | used/total MB. Only renders once both values resolve. |
Cadence/source values above are read off each
StatSource's
id()/
cadence() in
sample/sources/, cross-referenced against which fields
each source writes to
MineTunerDataHolder. If you add or rename a source, this table
does not update itself — see
architecture.html.