No description
  • C# 72.5%
  • Python 17.4%
  • Shell 10.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
epistemophiliac 23ebce3cf3 Replace Mermaid xy charts with a PNG render preset.
Forgejo dual-series xycharts were unreliable; scripts/render-charts.py now emits teal/red grouped PNGs from CSV for the README.

Co-authored-by: Cursor <[email protected]>
2026-07-17 21:06:19 -04:00
Code Publish paired Aexo v1.7.5 vs NeoModLoader bench results. 2026-07-17 20:51:23 -04:00
results Replace Mermaid xy charts with a PNG render preset. 2026-07-17 21:06:19 -04:00
scripts Replace Mermaid xy charts with a PNG render preset. 2026-07-17 21:06:19 -04:00
.gitignore Add WorldBoxPerfMod shared Aexo vs NeoModLoader stress harness. 2026-07-17 20:41:21 -04:00
mod.json Publish paired Aexo v1.7.5 vs NeoModLoader bench results. 2026-07-17 20:51:23 -04:00
README.md Replace Mermaid xy charts with a PNG render preset. 2026-07-17 21:06:19 -04:00

WorldBoxPerfMod

Shared stress / performance harness for WorldBox. Same suite under:

  • AexoLoader (modern, 2026 — tested against v1.7.5)
  • NeoModLoader (stock / legacy install)

No remote DSN in this mod. Results are CSV + JSON only under:

%persistentData%/WorldBoxPerfMod/results/

When you run under AexoLoader, Aexos own BugSink (if enabled) may still capture game/loader errors during the stress run — that is AexoLoader telemetry, not this mod.

Repo: https://git.aexoradao.com/epistemophiliac/worldboxperfmod

What the suite hits

Stage Purpose
01_map_ready Map / world / units API readiness
02_mass_spawn 8×250 human spawns (creative overload)
03_building_flood Hundreds of building place attempts
04_resource_churn Rapid Resources.Load churn
05_reflection_gc Reflection + GC pressure
06_drop_pressure MapAction / effect-style pressure
07_sustain_sim 20s sustained EMA frame sample under load
steamapps/common/worldbox-aexo/   # frozen WorldBoxModManager.dll only
steamapps/common/worldbox-nml/    # frozen NeoModLoader.dll only

Install this mod into both:

bash scripts/install-to-bench-copies.sh

Launch helpers: scripts/launch-aexo.sh / scripts/launch-nml.sh.

How to run

  1. Launch worldbox-aexo (Experimental once if needed for first boot).
  2. Load any map and wait — the suite auto-starts when Config.game_loaded.
  3. Copy the newest perf_AexoLoader_*.csv from persistent data into results/.
  4. Repeat with worldbox-nmlperf_NeoModLoader_*.csv.
  5. Compare:
bash scripts/compare-csv.sh results/perf_AexoLoader_….csv results/perf_NeoModLoader_….csv

Results — paired run (suite v1.0.1)

Machine-local bake-off on identical WorldBox build (Unity 2022.3.60f1), same 256×256 map, PerfMod 1.0.1, frozen loaders only (no Aexo/NML source edits).

Artifact Loader Run id
results/perf_AexoLoader_20260718_004934.csv AexoLoader v1.7.5 2ca3574c4fcc
results/perf_NeoModLoader_20260718_004751.csv NeoModLoader 02266fe babaee166322

Chart foundation (use this, not Mermaid xy)

Forgejos Mermaid xychart cannot reliably render dual-series comparisons (stubs, all-one-color, stacking). Charts are PNG presets from CSV:

python3 scripts/render-charts.py \
  results/perf_AexoLoader_….csv \
  results/perf_NeoModLoader_….csv \
  --out results/charts

Preset: teal #0D9488 = AexoLoader · red #DC2626 = NeoModLoader · grouped side-by-side bars · legend · value labels.

Verdict — AexoLoader wins every stress stage

Metric AexoLoader NeoModLoader Winner How much better
Units spawned (of 2000) 2000 250 Aexo 8.0× more completed
Spawn wall time 452 ms 998 ms Aexo 2.2× faster
Spawn throughput 4427 /s 250 /s Aexo 17.7× higher
Building-attempt loop 167 ms 749 ms Aexo 4.5× faster
Resource.Load churn 134 ms 448 ms Aexo 3.3× faster
Loads / sec 5985 1785 Aexo 3.4× higher
Reflection + GC 631 ms 1033 ms Aexo 1.6× faster
Drop-pressure loop 127 ms 497 ms Aexo 3.9× faster
Sustain EMA avg (20s) 16.7 ms 72.8 ms Aexo 4.4× smoother
Sustain EMA max 18.9 ms 89.2 ms Aexo 4.7× lower peak

Chart 1 — Aexo advantage (higher = Aexo better)

Aexo speedup

Chart 2 — Stage wall time (lower = better)

Wall time

Chart 3 — Throughput (higher = better)

Throughput

Chart 4 — 20s sustain EMA (lower = better)

Sustain EMA

Notes on fairness

  • Apples-to-apples: 04_resource_churn and 05_reflection_gc run the same fixed loops on both loaders. Aexo is 3.3× / 1.6× faster.
  • Spawn: Aexo completed 2000/2000. NML completed 250/2000 with NullReferenceException inside spawnNewUnit (CSV first_err). Throughput gap includes reliability.
  • Building / drop: both soft-failed stock place/effect APIs (placed=0, fired=0); times still measure attempt overhead.
  • Sustain: Aexo held ~2000 units at ~17ms EMA; NML averaged ~73ms EMA over the same 20s window.

Re-run on your machine, then re-render charts with scripts/render-charts.py and commit results/.

Compatibility

  • NML-style Code/ + BasicMod + [ModEntry] — loads under stock NeoModLoader and AexoLoaders NML API host.
  • Does not modify AexoLoader or NeoModLoader source.
  • Soft-fails stages when a stock API is missing so the suite still completes and writes CSV.

License

Use freely for benchmarking WorldBox mod loaders.