We’ve build our game so far with ARMv7 on Huawei Mate 20 Pro and the FPS is solid 60FPS.
After that we’ve tested to create a build with ARM64 architecture and the FPS drops from 60 to 25 FPS.
It’s not fixed 25 it’s playing/spiking from 60FPS to 25FPS.
version: Unity 2017.4.20
Anyone knows what is the issue with that? In Unity blog posts it says that ARM64 will boost the performance not huge decrease it.
Did you check what is eating up the FPS with the profiler?
Is it CPU or GPU?
Try to use a lower resolution (using Screen.SetResolution or “Player settings” => “Resolution Scaling Mode” with a low FixedDPI, something like 180) and check if that boost your FPS, if so then probably the GPU is working hard.
If it doesn’t boost the FPS it sometimes means that the CPU is working hard and you should check if some code should be optimized (memory allocation in Update method maybe?) or some plugin is causing the problem.
If you’re able to reproduce that it runs slow on ARMv64, but fast on ARMv7, could you please submit a bug-report as described in this document:
It’s important that you report these issues together with a reproduction project if you want them to get fixed. If you don’t do it, it might be a long time until someone else reports them or until Unity Technologies find them.
After you submitted the bug-report, you receive a confirmation email with a bug-report Case number. Please post the Case number (number only, not the link) in this forum thread for Unity staff to pick up.
Hello, we are experiencing the same issue. We made the arm64 build for our 2 games (2D and 3D). The game get super slow only on 64 bit devices.
And we have just found that these devices have 64 bit chip but running 32 bit OS (not sure for all of them).
I had the similar problem and the reason was Debug.Log. This doesn’t to affect performance much for the ARM7, but for the ARM64 the impact is just huge.
I’m experiencing an slowdown in 64bit build compared to the same 32bit build, and my devices are also Huawei (tested both on Huawei P10 lite with a kirin CPU and a G8 huawei with Snapdragon CPU)
I tried profiling the 32bit and 64bit builds and comparing them using profile analyzer.
I see about 40 miliseconds spent on Semaphore.WaitForSignal every single frame in the 64bit build, while the 32bit build spends nothing on it.
This happens on the dispatcher thread.
Any solution?
I have a similar problem: I use Unity 2019.2.6, it works well with Mono build, but laggy with IL2CPP 64-bit build(ARMv7 and ARM64). Then I found that IL2CPP 64-bit lag happens on some devices, the other work fine.
I used Firebase Test Lab to test my IL2CPP 64-bit apk, and I got the following result:
Samsung Galaxy S3(API level 18): Laggy
Pixel 2(API level 28): Normal
Razer Phone(API level 25): Normal
It is also laggy on my old phone Samsung Galaxy S2 with IL2CPP, the game almost freezed with 64-bit while it had roughly 40 FPS with 32-bit running. I don’t think the problem is from the optimization of my game, because it couldn’t explain why it runs well with 32-bit build and has huge lag with 64-bit build on the same phone.
Still, I can’t make a conclusion saying that latest devices do not have this issue, because I borrowed a Nvidia tablet with Android 7.0 to test, it had less than 15 FPS, completely unplayable. Hopefully I will find the reason after testing more devices.
Check if you’re printing any logs during your game, there’s a known issue that stacktrace resolving is much slower on ARM64 than ARMv7 (stacktrace resolving happens when you print something to log), you can disable stacktrace resolving in Player Settings under Stacktrace Logging
Hi Tomas1856, I already did that since the beginning of the development. I knew that it will produce extra overhead, no matter which ARM is. I turned it off on both Android and iOS. The lag issue still exists. The apk I tested is a release version, so I won’t put console log anywhere.
Also I did another Firebase testing, I got the following result:
Pixel 3(API level 28): Very smooth
LG G3(API level 19): Normal
HTC U11(API level 26): Normal
I still have no clue, this time all these 3 devices run smoothly. Some devices have this issue, some don’t have. I have never seen this lag with Mono build, but for IL2CPP 64-bit build, it probably happens, depending on which device.
And I’d like to describe the lag a little more: It doesn’t look like the lag of unoptimized rendering, it is laggy even when I turn the camera facing to an empty place(no 3d objects except for a flat plane, and a skybox).
I continue testing different devices using Firebase Test Lab:
Nexus 7 2013(API level 19): Normal
Samsung Galaxy S3(API level 18): Frame rates are fine, but the graphics look like in X-ray
Galaxy S7 edge(API level 23): Normal
Galaxy Note 9 USA(API level 27): Normal
Huawei Mate 9(API level 24): Normal
Moto X(API level 19): Didn’t reach 60 FPS, but basically worked fine
LG K4(API level 23): Supper laggy
Nexus 5(API level 21): A little bit laggy
Galaxy Note 3 Duos(API level 19): Abnormally flashing, including UI and 3D objects
I would say that this problem isn’t related to API level. A high API level cannot guarantee it is error-free. I believe that IL2CPP 64-bit build is still not as stable as Mono build.