无法解释的帧速率仅在iPhone 5上下降

时间:2012-12-13 15:10:34

标签: ios iphone-5 frame-rate

我有一个iOS应用程序,可以从设备摄像头抓取帧,并进行一些CPU密集型图像处理。在iPad 2,iPad 3和iPhone 4s上,应用程序以每秒30帧(fps)的速度运行。我最近在iPhone 5上进行了测试,大部分时间都以30 fps运行。偶尔我注意到它下降到大约15 fps,这是我从未在其他设备上遇到的东西(据称硬件速度较慢的设备)。我已经努力追踪这个问题了,我已经学到了很多东西,但没有找到解释。以下是我的一些观察结果,可能会提供正在发生的事情的线索:

  • 仅在iPhone 5上发生
  • 尝试在手机上分析应用程序时无法重新创建问题
  • 应用程序在多个线程上运行,帧抓取并将图像转换为我所需的格式,在单独的线程上运行到密集图像处理。帧抓取线程永远不会低于30fps,它只会丢失图像处理线程。这意味着我的问题不是由于某些原因(例如低光照水平)相机帧速率下降。
  • 我倾向于能够通过启动应用程序,点击iPhone备用按钮,点击主页按钮并返回应用程序来重新创建问题。如果我重复3-6次,问题经常发生(但并非总是如此)。
  • 似乎与iOS 6.0无关,它在iOS 6的4s上运行良好。
  • 当问题发生时,即使查杀应用并重新启动它也不会使帧率恢复(建议在我的应用程序之外与iPhone 5相关的问题)。
  • 将手机连接到我的电脑并重建应用程序似乎总能解决帧速率问题。

这很奇怪。可能是iPhone 5有时会降低手机的时钟速度以帮助延长电池续航时间(iPad和iPhone 4s没有这种方式)?

我很想听到有类似经历的人的消息。

我的应用程序在iPhone 5上应该看起来不应该看起来更好看!

非常感谢,

凯文

更新

我已经做了一些测试,但仍然没有发现问题。这就是我的尝试。

  • 我删除了线程
  • 我删除了一些我正在使用的第三方
  • 删除了所有日志记录
  • 试图在乐器中重新创作并失败。仪器中不会出现此问题

我已经没想完了。喜欢听到任何一个在iPhone 5上体验帧速率下降的人的消息? iPhone 5是否具有省电模式?

1 个答案:

答案 0 :(得分:2)

最可能的原因是代码中的竞争条件只会被iPhone 5上的特定时序绊倒。我会四处寻找有资源争用的地方并确保您正确处理它们,尤其是你执行超时的任何地方(因为你没有完全死锁或崩溃)。

你提到你在多个线程上运行。您的意思是说您使用的是NSThreadperformSelectorInBackground:NSOperation或GCD吗?直接使用NSThread是线程和资源问题的常见原因,因为使用NSOperation或GCD比使用它更难做正确的事。

如果您曾打电话给performSelectorInBackground:,我会高度怀疑这段话的代码是非常容易错误地使用(而且几乎不会被使用)。离开应用程序并重新启动它的事实往往会导致问题特别让我怀疑你是在视图控制器中手动生成线程(这是一个常见的错误)。 performSelectorInBackground:的问题在于,没有简单的方法可以知道您已经已经为此产生了一个线程。所以你可以获得比你想要的更多的线程。

与所有表演事物一样,你应该从乐器开始。特别要注意时间分析器和穿线工具。

这种问题的另一个常见原因是:审核您对NSLog的使用。这是非常缓慢和同步的。在多个线程上运行它会显着影响性能。