设定:
-(void)callbackFromCADisplayLink:(CADisplayLink *)dl
{
u64 tStart = high_res_clock_now();
<Process input, advance game world, prepare graphics commands>
// Frame processed
u64 prePresentElapsed = high_res_clock_now() - tStart;
[myEAGLContext presentRenderbuffer:GL_RENDERBUFFER];
// Graphics commands submitted
u64 postPresentElapsed = high_res_clock_now() - tStart;
}
我发现的是:
prePresentElapsed
始终位于 0.5-2.5ms 范围内。postPresentElapsed
始终位于 1.5-4ms 范围内postPresentElapsed
始终在 16ms处悬停 显然,由于vsync的下游影响,presentRenderbuffer
似乎正在阻塞。
问题:
答案 0 :(得分:0)
iOS在修改CPU和GPU的时钟速度方面非常活跃。就操作系统而言,理想的状态是让您的应用程序以最低可能的时钟速度以60fps的速度运行(听起来就像慢速模式中发生的那样)
当您的应用程序启动时,时钟速度开始很高,一旦事情有一段时间安定下来,操作系统会测量您的应用程序并尽可能地降低时钟速度,而不会影响用户经验。这样做是为了节省用户电量并保持设备冷却。
这令人非常沮丧,因为据我所知,没有办法禁用,控制甚至监控这种行为,因此它会使性能测量变得更加困难。这也意味着当应用程序占用繁忙帧时,您必须错过奇数帧,因为时钟速度管理无法提高时钟速度,直到它为时已晚。 / p>