[Android] Massive Performance Issues on Android with Input Field and Native Keyboard.
Hi! This is my first official question here in Unity Answers. I'll try to be as clear and as concise as possible with my issue. Thanks in advance to anyone who's willing to help!
I'm in charge of porting a PC game to a mobile game (Android and iOS) in Unity 2019.4.23f. I'm using an old and weak device to see how the game performs. Here are the details:
Multilaser M7S Plus
Model: ML-JI02-M7SQC_PLUS-KIDPAD
Processor: QuadCore-A64
Android Version: 7.1.1
RAM: 1GB
I'm currently stuck on an issue that I've never had before. The app runs with low FPS if I don't do anything (I'd say around 20FPS), but when I select an Input Field, the app basically freezes. Sometimes I can type, sometimes I have to force shutdown the device. This is what the profiler shows:
Since it's hard to see, I'll write the details here.
First Frame: Input Process takes up 63.5% of CPU. 14.5% goes to PostLateUpdate.FinishFrameRendering (because of Render Camera);
Second and Third Frames: roughly 83% of CPU goes to EventSystem.Update() (Self - 2 Calls);
Deep profilling was almost impossible to record due to the overhead. I'm not sure this frame was caused by the Input Field (as you can see, 50% of the time was due to Frame Rendering), but here's the info on the highest peak:
This is what I could find on the Internet about the issue that I've already tried:
Building the Android player using IL2CPP;
"Poking" the Event System before selecting Input Field;
Opening the device's native keyboard via script;
Using TMP.
Do you have any suggestions? Is this a limitation of the engine? Is there any workaround? Some way to not use an Input Field.