Quick answer: Average frame time over a short window of unscaled real frames and display the smoothed rate, computed from unscaled delta so pausing or slow-mo does not skew it.
Your overlay's FPS number flickers between 12 and 900 and reads garbage when you pause. The cause is dividing one by a single noisy frame delta and using scaled time, which collapses to nonsense during pause or slow-motion.
How to fix it
1. Average over a window
Accumulate frame times over the last ~0.5 seconds or N frames and compute the rate from the average. A single-frame 1/dt is far too noisy to read.
2. Use unscaled delta time
Compute FPS from unscaled real-time delta, not game time. Otherwise a paused or slow-mo game (time scale 0 or 0.1) makes the counter read zero or absurdly high.
3. Guard against zero and spikes
Clamp or skip frames with a zero or enormous delta (e.g. after a load) so one hitch does not produce an infinite or wild reading.
4. Show frame time too
Display milliseconds per frame alongside FPS. Frame time is linear and far more useful for spotting hitches than the reciprocal FPS number.
Catching the ones you can't reproduce
The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.
Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.
This is where a tool like Bugnet earns its place. Its SDK captures every error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.
The errors you never hear about are the ones quietly costing you players. Visibility turns them into a worklist.