For a while now, the Android game I'm working on has been suffering from random hiccups here and there. I've used all kinds of optimization techniques: Locking the frame rate at 60, turning off VSync, using mobile shaders, using occlusion culling, static batching, light mapping, using low-vertex meshes and GPU instancing. But those hiccups won't go away. For the most part, the gameplay is very smooth (stays at 60 frames per second 98% of the time). The hiccups usually show up around every 1 or 2 minutes. A lot of the time, they're caused by random spikes of Gfx.WaitForPresent (I know, I know, just hear me out). Now a lot of the solutions online simply say that I have to turn off VSync if I want those Gfx spikes to go away. But like I said, I already tried that (by setting it to 'Don't sync' in the quality settings). But even if I did turn it off, the profiler showed that VSync was still there. For example, in the picture above, you can see that there is a lot of VSync and there's also a Gfx.WaitForPresent spike (although in this particular case, it didn't causes any stutter). Now, this is what the profiler window looked like after I set VSync to "Every V Blank" and removed the Application.targetFrameRate code (so it's no longer manually locked at 60 frames per second): The Gfx.WaitForPresent spikes are all over the place. HOWEVER, you can clearly see that there's no more VSync. Furthermore, I even noticed that the game didn't stutter anymore (although I have to run more tests to confirm this). So what's going on here? Why is it that setting VSync to "Don't sync" caused VSync to appear in the profiler and setting it to "Every V Blank" caused it to go away?