我们可以在越狱后给 app 自签名 com.apple.QuartzCore.debug 这个 entitlement 后,再调用如下代码所示的私有 api 即可全局打开这个面板,可以方便的在手机端查看 Render Server 上的实际 FPS。
extern "C" {
int CARenderServerGetDebugOption(mach_port_t port, int key);
int CARenderServerGetDebugValue(mach_port_t port, int key);
void CARenderServerSetDebugOption(mach_port_t port, int key, int value);
void CARenderServerSetDebugValue(mach_port_t port, int key, int value);
}
基于以上研究,理论上我们可以尝试调用私有 api 来全局控制 CADisplay 的刷新率,来进一步降低性能占用,但是由于 Render Server 是在其他进程,我们还是无法控制 Render Server 的刷新率,并且私有 api 会导致 app 被拒审,所以我们最终依旧只能改造部分系统动画实现以继续基于 CAAnimation api 去优化帧率。
6、我们的优化方案
6.1概述
从 iOS15开始苹果新增加了 preferredFrameRateRange api 可用于设置相应动画或timer的刷新频率,我们就可以基于该方案去改造相应动画即可。