CADisplayLink wrongly capping at 90hz on iPhone 15 Pro

I have a game for iOS where I use CADisplayLink to animate a simulation, and for some reason the animation is not getting the full 120hz on capable devices (like iPhone 15 Pro). When I enable a 120hz refresh target, the animation is capped at only 90hz. This looks terrible because the animation works best when doubled (30, 60, 120, 240, etc).

The really bizarre thing is that when I turn on Screen Recording, my frame rate instantly jumps to 120, and everything looks perfectly smooth. My game has never looked better on iPhone! When recording is stopped, the animation drops back down to 90 fps. What in the world is going on?

[displayLink setPreferredFrameRateRange:CAFrameRateRangeMake(100,240,120)]; //Min. Max, Preferred [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

(Also, CADisableMinimumFrameDurationOnPhone is set to True in info.plist)

Answered by DTS Engineer in 807512022

Acknowledging the accurate reply above and suggesting this article with additional details Optimizing ProMotion refresh rates for iPhone 13 Pro and iPad Pro to consolidate understanding.

As the documentation states, the system takes into account various factors when deciding which framerate to use. Your game must be prepared to render at any framerate in the range you provide.

Acknowledging the accurate reply above and suggesting this article with additional details Optimizing ProMotion refresh rates for iPhone 13 Pro and iPad Pro to consolidate understanding.

CADisplayLink wrongly capping at 90hz on iPhone 15 Pro
 
 
Q