【发布时间】:2018-10-09 18:51:44
【问题描述】:
在 iPhone SE 上,升级到 iOS 11.4 后,我现在在大约 8-10 秒后看到一个非常奇怪的 CPU 节流结果。我正在使用一个非常简单的示例应用程序(部署目标设置为 iOS 10.3),它显示单个视图并在对 drawInMTKView 的调用中执行解码操作。应用程序启动时 CPU 使用率符合预期 (10-15%),但在 8-10 秒的窗口后,CPU 似乎被大幅降低,因此在 CPU 全速下需要 4-5 毫秒的帧解码操作需要 16-17 毫秒(CPU 使用率约为 60%)。我试图通过切换 idleTimerDisabled 标志来禁用任何 iOS 空闲计时器,但这似乎对此没有影响。有趣的是,从纵向旋转到横向将重置此限制,并且解码将再次全速运行,直到 8-10 秒的不活动再次将其限制下来。这里可能发生了什么?我读到 iOS 11 包含一些新的电池管理代码,但我的设备是新设备,并且 General->Battery 中的电池设置表明设备正在全速运行。是否有其他应用标志或设置可以禁用此限制?
(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
【问题讨论】:
-
我已经能够将复杂的 Metal 代码精简为一个简单的示例,该示例可以从单个纹理渲染到金属视图中。在我的 iPhone SE 上,我首先看到 40% 的 CPU 使用率,然后在空闲计时器触发后 CPU 上升到 60%。从纵向旋转到横向会使 CPU 使用率在短时间内回落到 40%。 github.com/mdejong/MetalKitCPUThrottling
-
我将 iPad 升级到 iOS 12 并再次测试,结果没有变化。
-
您是否尝试将部署目标(至少暂时)设置为与设备所在的完全相同的版本?此外,您是否仅在设备连接到调试器/Xcode 时或“独立”运行时才看到问题(除非您有一些调试 UI,否则很难弄清楚)?发布和调试版本的行为是否相同?我只是在这里疯狂地猜测,但在一个 AR 项目中,我在更新后收到了
Shader performance data maybe unavailable due to deployment target older than device version警告(现在有不同的部署目标)。也许这有关系? -
我在启动应用程序时遇到了同样的问题,根据手机的状态,该应用程序的特定部分需要更多时间来执行。我从
assertiond中找到了一些行,说New process assertion state; preventSuspend, preventThrottleDownUI, preventThrottleDownCPU, preventSuspendOnSleep [...]虽然我找不到关于这些行为的文档:(
标签: ios