mirror of
https://github.com/SK8-ENGINE/skate-3-rust-engine.git
synced 2026-10-26 19:47:44 +00:00
- The interim cue tables and their opt-outs are gone; the native runtime is the only audio path. Old
settings/audio.json files still load ("interim" / "native" ignored). Missing native data logs an error
instead of falling back.
- Water splash from retail's mechanism (SFXObj_OffBoard start / update): Skate_Collisions 1187 / 1197 once
per water stay, 1198 when the board is in water.
- The random interim riding bed is removed; riding collision and cloth sounds compared with the recomp
(doc 11). Native output otherwise byte-identical (13 scenarios + 5 sessions).
- Published tools under tools/ (one folder per tool with a README; the recomp ones labelled for use with the
research hooks), doc 14 and PR plan bucket L.
- Docs: doc 11 (retirement, bail density measured against the recomp, collision posts), doc 13 (usage guide).
3.0 KiB
3.0 KiB
Audio bench
Tools for speeding up the native audio without changing what it does: measure first, prove the output
is identical, then compare timings. Built on the headless e2e render (see tools/audio-e2e).
| Script | What it does |
|---|---|
e2e_bench.sh |
Renders every scenario (and optional real-play sessions) headless with timing on, in one or more host modes (row: one call per 60 Hz row; fpsN: the game's host at N fps), and writes SHA-256 hashes of every output plus the timing log under a label. Uses its own cargo target folder so it never invalidates your main build. |
compare_runs.sh |
Compares two labels: output hashes (must be IDENTICAL) and the timing summaries side by side. Exit 1 on any difference. |
timing_summary.py |
Pools the per-frame (game thread) and per-block (render) times of one or more runs: p50 / p90 / p99 / p99.9 / max and total. |
audio_timing_summary.py |
Summarises the AUDIO_TIMING lines a real play session logs with SKATE_AUDIO_TIMING=1: per audio system, the average, the per-second maximum (median / p90 / worst) and calls per second. |
emitter_bank_memory.py |
Resident memory of the world emitter banks per .ems emitter file (or per group of files, e.g. a map's), from the install's audio manifest. |
prefetch_memory_sim.py |
Simulates a distance prefetch of emitter banks over a play session's audio state log and reports loaded and prefetched memory peaks. |
Inputs
BENCH_DIR(default.local/audio-bench):scen/*.tsvfromtools/audio-e2e/scenarios.py BENCH_DIR/scen, optionalreal/*.tsvfromscenarios.py --from-log LOG --cut r0-999999 NAME BENCH_DIR/real.- An installation with the native audio data (setup group
audio). - Game logs (
logs/game-*.stderr.log) from a session run withSKATE_AUDIO_TIMING=1. - Audio state logs from a session run with
SKATE_AUDIO_STATE_LOG=<path>.
Usage
bash tools/audio-bench/e2e_bench.sh base # before the change (keeps the renders)
bash tools/audio-bench/e2e_bench.sh new row fps30 fps300
bash tools/audio-bench/compare_runs.sh base new
py -3.13 tools/audio-bench/audio_timing_summary.py logs/game-20260101-120000.stderr.log
py -3.13 tools/audio-bench/emitter_bank_memory.py --group University=sfx_university,music_university
py -3.13 tools/audio-bench/prefetch_memory_sim.py my_state_log.tsv sfx_university --ahead 60 --evict 90
KEEP=1 keeps the .f32 renders of a non-base run; CARGO_TARGET_DIR overrides the bench target folder.
Example output
compare_runs.sh (made-up timings):
scen-row: IDENTICAL (26 files)
scen-fps300: IDENTICAL (26 files)
scen-row block:
base: n 41000 p50 210.0 p90 260.0 p99 340.0 p99.9 520.0 max 900.0 sum 8610.0 ms
new: n 41000 p50 130.0 p90 170.0 p99 230.0 p99.9 400.0 max 700.0 sum 5330.0 ms
Requirements
- Git Bash (
sha256sum,diff), the Rust toolchain. - Python 3.13 (standard library).
compare_runs.shcallspython(setPYTHONto change it).