Lately I was investigating a “laggy scroll” problem in the main menu of our game (Android platform) made with Unity. Initially, I thought the UI system and layouts were to blame. I opened the profiler and observed a few noticeable spikes, caused by layouts and some of our scripts. But these spikes where less frequent than reported “lags”. However, I decided to optimize them since they were already noticeable. Having successfully optimized these points, I thought that this task was completed, but the feedback I got proved me wrong. With no evidence in the profiler, I requested a more detailed description of the problem. It turned out that small but frequent stutters were the main problem. And those stutters were more noticeable when scrolling relatively slow.
After that feedback, I double-checked the Unity Profiler. I used the Android GPU Profiler to get and analyze a system trace. I disabled almost all elements in the main menu. No luck. Those stutters wheren’t visible in any profiler, but I and other people could see them in the game. What was also interesting to me, that in other games from the Store, which I was sure were made with Unity, I could also spot the same problem if I looked closely. So, there is at least some problem which affects not only our game. And then, while talking to a collegue about this issue, we noticed a strange thing. Those stutters were only present during scroll dragging. As soon as you let it go, even if it has enertia and keeps moving, the problem will disappear. This gave me an idea: performance isn’t the problem, an input system is.
So I decided to create a new minimalistic project to reproduce and test this problem. In this project, I wrote a script to log frame delta time, touch delta time and OnDrag delta time. And tested following configurations:
- Unity 2021.3.23, Old Input System
- Unity 2022.3.7, Old Input System
- Unity 2022.3.7, New Input System
- Unity 2022.3.7, New Input System and pollingFrequency = 120
- Unity 2022.3.7, New Input System and pollingFrequency = 240
Using these devices:
- Samsung Galaxy A70 (Android 11)
- Samsung Galaxy S10 with Exynos SoC (Android 11)
Scroll stutters were observed in all of them. And I got some confirmations of my hypothesis about an input system. While frame delta time was pretty consistent at around 16.7 ms, touch and OnDrag delta weren’t. Since I didn’t know the root cause of this issue other than “it’s something on an input system side”, I decided to make this post. But before that, I retested this problem to structure the results a bit and to visualize them. Unfortunately, I didn’t have a lot of time to properly retest all of those configurations on multiple devices. So I retested only two of them:
- Unity 2022.3.7, Old Input System
- Unity 2022.3.7, New Input System
Using only one device:
- Samsung Galaxy S22 with Snapdragon SoC (Android 13, Screen refresh rate set to 60 Hz)
So here are a few graphs of results, each of which represents a separate swipe:
The New Input System seems to handles this problem better, but still not good enough. Here is a link to a Git repository with the project, builds, logs, screen recordings and graphs of those last two tests.
So I am curious to know:
- Am I missing something?
- What is the root cause of this problem? Is it the platform’s input system, or Unity’s input systems, or some combination of both?
- Could we, app developers using Unity, somehow fix or minimize this problem?
- Could you, Unity/Input System developers, fix or minimize this problem?
P.S. Those stutters more visible on something contrast, like a cell title in the project.
P.P.S. Several times during those tests, I have observed some strange input behaviour in Android debug overlay:

























