Fps rate jumps on gameplay

Hello together,

I’m experiencing a weird behavior on my Android device (Samsung Galaxy S24 Ultra). IOS needs to be tested, but i never had this problem before in several playcanvas / web-app projects.

I created a side-scroller project where the tiles are moving continuously. On mobile, I noticed that when I’m not touching the screen, the game runs at 60 FPS. As soon as I interact with the screen (jumping, sliding, UI interaction, etc.), it immediately jumps to 120 FPS.

These FPS changes cause noticeable hiccups/stuttering in the tile movement, which feels really bad during gameplay.

From what I’ve read, this might be related to how the browser handles touch input and refresh rates on mobile devices, but I couldn’t find a proper solution yet.

Things I already tried:

  • setting the device pixel ratio

  • creating a fixed update / fixed timestep movement system

  • avoiding direct dt-based tile movement calculations

Unfortunately, none of these solved the issue.

So now I’m wondering:

  • Is this behavior caused by recent Android/browser updates?

  • Is this a known issue on high refresh rate mobile devices?

  • Is there any reliable way to force a stable refresh rate or avoid these FPS jumps in PlayCanvas/browser games?

Thanks for any ideas or suggestions!

I believe it’s specific to your Samsung device and other similar devices that have variable refresh rate screens.

It’s likely that the device is increasing the frame rate on the screen so that it can render reactions from input faster, so it feels more responsive.

There is no browser API to control this, so you have to do this in other ways and control the render rate from PlayCanvas. This would mean either patching the PlayCanvas engine to have a fixed-rate render loop or having your own system that utilises RenderNextFrame so that you only render the frames that you want at the frame rate you want. Application | Engine API Reference - v2.18.1

Hi @yaustar ,

Thank you very much for your response!

Yeah, I thought this might be very device-specific and that there isn’t really an “out-of-the-box” fix for it at the moment. I was just wondering because I hadn’t noticed this behavior before, but in a side-scroller it definitely has an impact on gameplay.

I’ll take a look at renderNextFrame and see whether there’s any opportunity to maintain a more consistent frame rate.

Thank you again!