rts-performance-smoother

Implements smoothed engine telemetry displays using exponential moving averages and throttled UI refresh intervals.

Updated Jul 13, 2026
One-click install
npx skills add https://github.com/Ohmnia/site-build --skill rts-performance-smoother-ohmnia
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: rts-performance-smoother
Source: https://github.com/Ohmnia/site-build/tree/main/.opencode/skills/rts-performance-smoother
Command: npx skills add https://github.com/Ohmnia/site-build --skill rts-performance-smoother-ohmnia

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Raw engine diagnostic timings contain OS scheduling noise that makes FPS counters, frame-time readouts, and profiler overlays jittery and unreadable when rendered directly every frame. ## Core Features & Use Cases - Decoupled Telemetry Pipeline: Separates raw performance signals from stabilized display values through a raw registry, smoothing engine, and gated HUD update clock. - Exponential Smoothing Rules: Enforces specific smoothing factors (0.02 for network/memory, 0.05 for FPS, 0.08-0.10 for frame/render/physics timings). - Spike Isolation: Routes long-duration spikes like garbage collection pauses to a dedicated warning cache instead of polluting the rolling average. - Use Case: When building an RTS game HUD that shows FPS and subsystem timings, use this Skill to generate a PerformanceMonitor that updates the overlay only every 250ms with smoothed values. ## Quick Start Use the rts-performance-smoother skill to refactor my frame profiler so the HUD updates on a 250ms timer with smoothed FPS values.

Frequently Asked Questions about rts-performance-smoother

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I smooth FPS counter readings in a game HUD?

Apply an exponential moving average with a factor of 0.05 to raw frame rate values before displaying them. Store raw and smoothed values separately, and only update the visible text on a throttled 250ms timer rather than every frame.

How to stop performance overlay text from flickering every frame?

Accumulate delta time and gate all DOM or overlay text updates to a fixed interval, such as every 250ms. Run expensive string formatting like toFixed(1) only inside that throttled refresh block, never in the per-frame loop.

What smoothing factor should I use for frame time vs network ping?

Use 0.08 to 0.10 for high-responsiveness metrics like frameTime, renderTime, and physicsTime. Use 0.05 for standard FPS readouts and 0.02 for chaotic signals like network ping or memory footprint.

Why does a garbage collection spike ruin my average FPS display?

Long-duration spikes distort rolling averages when fed into the same smoothing filter. Route spikes like 40ms GC pauses to a separate spike warning cache that shows a temporary alert while keeping the baseline FPS line stable.

What are common performance mistakes in telemetry overlay code?

The main anti-patterns are allocating objects inside hot loops, running string formatting every frame, and mutating overlay DOM nodes per frame which triggers layout thrashing. Confine all formatting and UI mutation to the throttled update tick.