Skip to content

🧪 Health — Diagnostics (Performance Smoke)

This folder contains diagnostic utilities for the Health system.

These are developer-facing tools, not gameplay systems.


📦 What This Folder Is

Diagnostics are:

  • Debug / profiling helpers
  • Stress or sanity-check scripts
  • Tools for investigating behaviour (performance, allocations, flow)

Diagnostics are NOT:

  • Part of the supported runtime API
  • Required for any system to function
  • Production-ready gameplay code
  • Benchmarks you should treat as scientific truth

⚙️ Included Tools

HealthPerfSmoke

A brutal, no-frills stress harness for the Health system.

It:

  • Spawns a large number of HealthSystem instances
  • Repeatedly calls ApplyDamage(...)
  • Logs rough timing and allocation deltas
  • Lets you hammer either:

  • a single instance (hot-path focus)

  • or many instances (broader load)

HealthRulePerfSmoke

A rule-chain diagnostics tool used to measure how cost scales with increasing rule count.

It:

  • Spawns buckets of targets with 0 → N rules attached
  • Runs both PreviewDamage and ApplyDamage
  • Measures:

  • total time

  • per-call cost (μs)
  • allocation deltas
  • Lets you compare:

  • no rules vs many rules

  • preview vs apply
  • spread vs single-target load

🧠 What These Are Actually Useful For

Use these to:

  • sanity check performance after changes
  • confirm no GC allocations in hot paths
  • measure relative cost changes (before vs after)
  • understand where cost actually comes from
  • stress the system without building a full game

🔍 What We’ve Proven (From These Tests)

From HealthRulePerfSmoke:

  • Rule-chain depth (0 → 20 rules) has minimal overhead
  • Core cost sits in the HealthSystem pipeline, not empty rule traversal
  • PreviewDamage is extremely cheap (~sub-microsecond per call)
  • ApplyDamage is stable and predictable (~~5 μs per call range)
  • 0 allocations across all tests

👉 Translation:

The framework itself is not doing stupid shit.


❗ Where Cost Actually Comes From (Real Talk)

If your game is slow, it’s usually NOT this system.

It’s:

  • ❌ Too many rules (design issue)
  • ❌ Expensive logic inside custom rules
  • ❌ Per-frame UI updates (biggest offender)
  • ❌ Bad usage patterns (spam, polling, unnecessary calls)

👉 These diagnostics help prove that.


❌ What This Is NOT

Let’s be crystal clear:

  • ❌ Not a benchmark
  • ❌ Not representative of real gameplay
  • ❌ Not proof your game will perform well
  • ❌ Not comparable across different projects or hardware

If you treat this like a benchmark, you’re lying to yourself.


🕹️ How to Use

  1. Create an empty scene
  2. Add a diagnostics script (HealthPerfSmoke or HealthRulePerfSmoke)
  3. Press Play
  4. Open the Profiler (CPU + Timeline + GC)
  5. Adjust:

  6. instance count

  7. calls per burst
  8. rule counts (rule test only)
  9. spread vs single target
  10. burst mode

Watch for:

  • CPU spikes
  • GC allocations
  • frame time stability

⚠️ Practical Advice

  • Start small before going stupid high
  • Use BurstOncePerSecond for readable profiling
  • Always test in isolation first
  • Then test inside your real game

👉 If it’s fast here but slow in your game:

your game is the problem — not the system


🧩 Support Boundary

These scripts:

  • may change or be removed at any time
  • are not covered by compatibility guarantees
  • are provided "as-is" for investigation purposes

✅ Key Takeaway

These are smoke tests, not benchmarks.

They tell you if something is obviously wrong.

They do NOT tell you everything is right.


💬 Final Reality Check

If you can hammer:

  • tens of thousands of calls
  • across hundreds of instances
  • with multiple rules
  • at zero allocations

…and it still behaves?

👉 The core system is solid.

Anything that breaks after that is on usage — not the framework.