- Your game is running at or above 60FPS, but has "hitches" or "hiccup" frames that drop down to 30 frames-per-second (FPS).
- When profiling a poor performing frame, you notice that WaitForPresent and/or Overhead is needlessly eating up time in your frame.
- If you are calculating your own FPS and you notice it dropping wildly on some frames or averaging out at 45FPS.
Android and iOS devices use vertical synchronization to update the screen contents at a fixed interval. This means that screen's contents will not be changed half-way through a frame and any rendering updates will only occur between two screen refreshes. This prevents the screen tearing effect.
Vertical synchronization has another effect: if your game cannot prepare a frame buffer for display before the display needs to show another frame then the device renders the old frame buffer again, which essentially skips a frame. Unity then has to prepare the frame buffer within the next frame duration. If this cycle continues the result is a frame rate of 30 fps, as the frame buffer is updated only for every other screen refresh cycle.
This means the only frame rates possible on an mobile device are frame rates resulting from integer numbers divided by the screen refresh rate (60 Hz).