Performance testing for a mobile game: 7 metrics that actually matter
“The game lags” is too abstract for a ticket. To make a performance problem reproducible, measurable and trackable — you need concrete numbers. Here are 7 metrics worth checking every release.
— FPS and frame time. 60 FPS doesn’t mean “smooth”. A single 100 ms spike between regular 16 ms frames is visible as micro-stutter. Look at frame time, not average FPS. Target: 95% of frames < 16.7 ms on target devices. Tools: Unity Profiler → Frame Debugger, Xcode Instruments → Time Profiler.
— Memory footprint. On iOS, the crash limit depends on the model — about 1.4 GB on iPhone SE/8, around 5 GB on iPhone 15 Pro. Measure Resident Memory during a session, not just peak. Leaks show as monotonic growth between levels.
— Draw calls and SetPass calls. On budget Android (Adreno 510), each SetPass call is ~0.3 ms. 200 calls = 60 ms = less than 16 FPS. Target for casual mobile: <100 SetPass calls per frame.
— GC pressure. In Unity, the garbage collector creates stop-the-world pauses. If allocations >1KB/frame — you’ll see spikes. Target: 0 KB/frame in hot path. Profiler → Memory → GC Allocations in Frame.
— Battery drain. On iOS via Xcode → Energy Impact: should be “Low” during normal gameplay. If “High” — consider capping FPS in menus (often effects run at 120 fps for no reason) and throttling fixed-update.
— Thermal state. After 10 minutes of active play, the device starts throttling. Symptom: FPS dropped from 60 to 30, you didn’t change anything. On iOS — ProcessInfo.thermalState, on Android — PowerManager.getCurrentThermalStatus(). Verify after a 15-minute session.
— Cold start to first gameplay frame. Critical UX metric. Target: <3 seconds on target device, <5 on low-end. Measure via startup hooks and capture the moment when the player can tap.
What to embed in the QA process
✅ Per release — a report on these 7 metrics across 2-3 target devices (low / mid / high).
✅ Performance budget: “never more than N MB memory peak, never more than N draw calls”. Regression above — blocks release.
✅ 15-minute stress session before release — mandatory. Thermal throttling and memory leaks only show up here.
More: Unity Profiler Manual, Apple — Measuring App Performance.