iOS 11 CPU节流和空闲计时器

时间:2018-10-09 18:51:44

标签: ios

在iPhone SE上,升级到iOS 11.4后,大约8到10秒后,我现在看到非常奇怪的CPU节流结果。我正在使用一个非常简单的示例应用程序,其中(部署目标设置为iOS 10.3)显示一个视图,并在对drawInMTKView的调用中执行解码操作。应用启动时的CPU使用率符合预期(10-15%),但在8-10秒的窗口后,CPU似乎被大量调低,因此帧解码操作在全CPU速度下要花费4-5 ms,然后需要16-17毫秒(其中CPU使用率约为60%)。我试图通过切换idleTimerDisabled标志来禁用任何iOS空闲计时器,但这似乎对此没有影响。有趣的是,从“纵向”旋转到“横向”将重置此限制,并且解码将再次以全速运行,直到8-10秒的不活动状态再次将其抑制。这可能是怎么回事?我已经了解到iOS 11包含一些新的电池管理代码,但是我的设备是新的,并且“常规”->“电池”中的电池设置指示设备正在全速运行。还有其他一些应用标志或设置可以禁用此限制吗?

(full speed)
decode time 5.74 ms
decode time 5.87 ms
decode time 5.37 ms
decode time 5.81 ms
decode time 5.56 ms
decode time 5.97 ms

(after 8-10 second, reduced speed)
decode time 16.65 ms
decode time 16.65 ms
decode time 17.02 ms
decode time 16.49 ms
decode time 16.95 ms
decode time 16.03 ms

1 个答案:

答案 0 :(得分:0)

这可能与您的经验有关:我们发现,对应用进行性能分析的行为可能在不合适的时候使这些版本的iOS陷入降频。在未连接到主机PC的发行版本中未发生此问题。

我们有一个应用程序,其渲染循环的运行时间不到8毫秒-远低于60 fps游戏所需的〜16毫秒。当连接到探查器时,目标设备将检测到该情况并降低时钟频率-但是与探查器进行通信的开销会使帧时间超过16ms,从而导致30fps的游戏玩法。

除发现并正在考虑并解决问题外,我们没有找到其他解决方案。当我们向应用程序添加额外的渲染负载并将其推到8ms以上时,问题就消失了,因为目标设备不再降频。