代码之家  ›  专栏  ›  技术社区  ›  MoDJ

iOS 11 CPU限制和空闲计时器

ios
  •  3
  • MoDJ  · 技术社区  · 7 年前

    在iPhone SE上,在升级到iOS 11.4之后,大约8-10秒后,我现在看到一个非常奇怪的CPU节流结果。我正在使用一个非常简单的示例应用程序(部署目标设置为iOS 10.3),它显示单个视图,并在调用DrawinmTkView时执行解码操作。当应用程序启动(10-15%)时,CPU使用率与预期一致,但在8-10秒的窗口之后,CPU似乎被严重抑制,因此在CPU全速运行时需要4-5 ms的帧解码操作需要16-17 ms,其中(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 回复  |  直到 6 年前
        1
  •  0
  •   Peeling    6 年前

    这可能与您的经验有关:我们发现,对应用程序进行分析的行为可能会在不合适的时候欺骗这些版本的iOS进入下时钟。在未连接到主机的发布版本中没有出现此问题。

    我们有一个应用程序,它的渲染循环运行时间不到8毫秒,远低于60fps游戏所需的16毫秒。当连接到profiler时,目标设备会检测到这一点并关闭时钟-但是与profiler通信的开销会将帧时间推过16毫秒,从而产生30帧的游戏效果。

    除了认识到它正在发生并考虑到它之外,我们没有找到解决这个问题的方法。当我们将额外的渲染负载添加到应用程序中,使其超过8毫秒时,问题就消失了,因为目标设备不再打卡。