My game's FPS drops to 30 - 8 FPS on any 64 bit Android device but is at 59 - 60 FPS on an even lesser 32 bit Android device.

I've tried unchecking Development Build on Build settings and I've tried disabling debug calls on my game by using:

void Update ()
    Debug.unityLogger.logEnabled = true;
    Debug.unityLogger.logEnabled = false;

But there wasn't any change. And I tried setting all Stack Trace Log type to None(Edit > Project Settings > Player). Also no change.

PS: I used that update call because there are other imported assets that call the Debug class and I wouldn't want to mess around with their classes.

EDIT: As you can see in the screenshots below, the device that runs the game at less than 30 FPS(every 64 bit device) has Gfx.WaitForPresentOnGfxThread take 71.6% of the frames and RenderPipelineManager.DoRenderLoop_Internal() takes up 51.1%. While the device that ran the game at 60FPS(every 32 bit device) has RenderPipelineManager.DoRenderLoop_Internal() take up the most frames with 35.7% of the frame. How should I fix the frame rate drop on the 64 bit device?

60 FPS device screenshot on profiler Less than 30FPS device screenshot on profiler

EDIT: The 32 bit Android device is an Infinix Hot 4, 2GB RAM, 1.3GHz quad-core MediaTek MT6580 CPU, OpenGLES2, Android 7.0, 1280x720. - This reaches a maximum of 62FPS(Average 59FPS).

The 64 bit Android devices are:

  1. Cubot X19 - 4GB RAM, [8 core CPU: 4x 2.3 GHz ARM Cortex-A53, 4x 1.65 GHz ARM Cortex-A53], OpenGLES3, Vulkan supported, Android 9.0, 2160x1080. - This reaches a maximum of 30 FPS(Average 25FPS).
  2. Qubo P19 - 3GB RAM, 1.5GHz Quad-Core MT6739WA CPU, OpenGLES2, OpenGLES3 supported, Android 9.0, 1280x640. - This reaches a maximum of 25FPS(Average 19FPS).

I'm using Unity 2019.3.1f for my project.

  • \$\begingroup\$ What profiling have you done so far? What does it reveal about where your game is spending the bulk of its time? Are there major differences in the profile of the 64 bit version versus the 32? \$\endgroup\$
    – DMGregory
    Sep 24, 2020 at 11:17
  • \$\begingroup\$ Sorry for the late reply, I had to get a 32 bit Android device that would connect to my computer. \$\endgroup\$ Sep 25, 2020 at 6:42
  • \$\begingroup\$ Next, start expanding out the worst offenders to see if you can isolate where each one is spending most of its time. It would also help to share the specs of these two devices — their resolution, processor, etc. \$\endgroup\$
    – DMGregory
    Sep 25, 2020 at 12:07
  • \$\begingroup\$ Thank you for your response, I have added the specs. And, I'm not really sure how the rendering section of the profiler is displayed, for example, I don't know what RenderPipelineManager.DoRenderLoopInternal() really means. \$\endgroup\$ Sep 25, 2020 at 12:47
  • \$\begingroup\$ Then click the arrow beside it and find out. \$\endgroup\$
    – DMGregory
    Sep 25, 2020 at 12:52

1 Answer 1


Since the GPU was obviously handling too much work on the 64 bit devices, I decided to allow my project to use only the OpenGLES2 API instead of including OpenGLES3 and Vulkan also since the 32 bit device I tested with supported only OpenGLES2. I didn't change anything else and I've got 70 - 60FPS on the 64 bit devices.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .