I made days of research about this Device.Present problem. This is a weird one really, it is around for 10 years, I found post from 2010 and 2017 people still having same problem, and this need to be solved.
TEST ENVIRONMENT:
Unity: 5.6.3p3 build
Devices: iPhone 5, iPhone 6s, iPad 2017 (9 inch) ,Samsung Tab S2 ( SM-T713 ), Samsung Galaxy S2, Samsung Galaxy S4 Mini
Game: A Racing game
Quality settings: Minimized, Vsync of, targetframe = 60
PROBLEM:
All devices shows same problem, however I will take iPhone 6s as explanation
Game starts as solid 60 fps, after 2-3 minutes later drops to 30-35 fps, sometimes goes back to 60 fps
Profiler shows huge spikes of “Device.Present”, it is like 1 second 0.01 ms and 3 seoncds later 10-11 ms
ANALYSIS:
My scene and scripts greatly optimised
Combined meshes, almost all atlas based textures, very few materials, mostly mobile shaders, carefully designed NGUI panels, my profiling stats are great, very high number of saved batches.
TEST 01
My only expensive shader is “Standard” shader on my player vehicle’s body mesh. I even convert this to “Mobile Diffuse”. My “Device.Present” spikes changed, they became less and milliseconds down from 10-11 to 6-7 ms. However still mostly 30-35 FPS running
TEST 02
I put SECTR occ culling scripts, image effects ( Beautify from asset store ), etc… I give CPU much more job to handle, and this gave me solid 45-50 fps, spikes were so few and insignificant
RESULT
It seems that iPhone 6S CPU does everything very fast, and waits for GPU, and this cause “Device.Present” spikes
ANY IDEAS ?
I am out of ideas on this issue, any one else have this problem and find solution ?
Regards to ALL.