gogs

gogs

# Engine Benchmarking for Journey and TinyTS

GOGS runs each engine one at a time, captures raw frame data, and compares behavior under controlled browser workloads. The default goal is to show which engine holds up better under load on this hardware.

## Compare

Use shared workloads for particle, rendering, and simulation pressure.

## Validate

Import or export raw JSON so a run can be inspected again later.

## Diagnose

Use feature probes only after the core comparison looks trustworthy.

# Tests

The Benchmark exposes a suite of performance tests that can be run to compare the engines.

## Smoke Test

Fast harness check. Confirms automation, import/export, and charts. Not a performance verdict.

## Standard Test

Main comparison mode. Use this first when asking which engine performs better under load. Automatically selects the best backend.

## Full Test

Diagnostic mode. Runs extra probes for deeper investigation after Standard looks sane.

Running Benchmarks...
0%
Journey Mean FPS
-
TinyTS Mean FPS
-
Journey P99 Latency
-
TinyTS P99 Latency
-
FPS Curve vs Entity Count Higher is better
Latency Percentiles vs Entity Count Lower is better (Overlaid)
Frame Time - Rolling 120 Frames Frame pacing
Frame Time Distribution (Histogram) Tight cluster = smoother frame delivery
JS Host Heap Over Time Heap samples only
Rendering Workloads: Mean Frame Time (ms) Missing bars mean the profile did not run that probe
TinyTS Renderer Draw Call / Batch Flush Analysis Quadratic rendering efficiency
Bloom Cost Overhead Rect baseline vs bloom probe where available
Audio Voice Stress TinyTS playSound vs Journey Resonance DSP loop
Sequencer Ticking Overhead 8k particles plus sequencer update
Verlet Ropes Simulation TinyTS helper vs Journey-side equivalent algorithm
Verlet Point Mass Integration TinyTS helper vs Journey-side equivalent algorithm
TinyTS Registry ECS Subsystem Profile TinyTS-only CPU and view-query probes
Engine Design Philosophy

Journey (Rust/WASM) is built on top of WASM linear memory. It compiles down to a binary payload of ~3MB (raw) and ~1.2MB (brotli). The current JS heap chart still includes host wrapper, metric collection, and JS/WASM boundary effects, so WASM linear memory must be read separately before making allocation claims.

TinyTS (TypeScript) is extremely lightweight in transfer size (~32KB brotli), which makes it quick to transfer. It runs on JavaScript's standard runtime heap, so heap sawtooth patterns should be interpreted alongside frame pacing, work-duration timing, and after-stop memory checkpoints.

Total Asset Transfer Sizes
Initial Engine Load Timeline
V8 Heap / WASM Memory Checkpoints
gogs Sequential Benchmark