Since updating to Unreal 5.5, some Adreno-based Android devices seem to get in a tailspin where Swappy takes longer and longer to release its latch, leading to a 100+ms frame time. Insights isn’t showing much even with RHICommands enabled, I don’t think there is any instrumentation for where this is happening. The main confirmation we have that this is happening in Swappy is that disabling it prevents the issue from happening.
The actual cause of the tailspin is hard to ascertain. We have a company-wide SDK that uses Android primitives (i.e.: android.widget.ImageView, android.widget.TextView, etc.) to draw a little user icon badge on certain menus. If the badge is shown, the tailspin starts happening after transitioning between levels. Commenting out the badge prevents the issue from occurring.
While the device is in this state, it can be nudged back to normal by anything invalidating the swapchain, i.e.: rotating the device or folding/unfolding for a foldable.
Another data point is I was unable to reproduce this on my Pixel 7 until I updated to Android 16. Reverting to Android 14 stops the issue from happening.
Swappy stats when behaving normally:
Swappy Stats - Total Frames: 1877
Idle Frames: [0]=1830 [1]=47 [2]=0 [3]=0 [4]=0 [5]=0
Late Frames: [0]=0 [1]=516 [2]=1298 [3]=63 [4]=0 [5]=0
Offset From Previous: [0]=160 [1]=1461 [2]=248 [3]=8 [4]=0 [5]=0
Latency Frames: [0]=0 [1]=382 [2]=1487 [3]=8 [4]=0 [5]=0
Swappy stats during issue:
Swappy Stats - Total Frames: 243
Idle Frames: [0]=243 [1]=0 [2]=0 [3]=0 [4]=0 [5+]=0
Late Frames: [0]=0 [1]=0 [2]=0 [3]=0 [4]=189 [5+]=54
Offset From Previous: [0]=0 [1]=0 [2]=0 [3]=0 [4]=0 [5+]=243
Latency Frames: [0]=0 [1]=0 [2]=0 [3]=0 [4]=0 [5+]=243
Apologies for the vague report, but this is tricky to narrow down… It might be on Google’s end and I’ll be reaching out to them separately, but I wanted to see if Epic has encountered anything similar internally.