Cocos2D 2.1 - 空闲时 CPU 使用率高

Posted

技术标签:

【中文标题】Cocos2D 2.1 - 空闲时 CPU 使用率高【英文标题】:Cocos2D 2.1 - High CPU usage while idle 【发布时间】:2013-11-05 13:12:06 【问题描述】:

我在 Cocos2d 2.1 中创建了这个 iPhone 应用程序。

当应用第一次启动时,它会显示一个全屏背景和一个 UIACtionSheet,用户必须在其中选择一个选项来启动应用。就是这样。此操作表由委托运行的第一个场景(HelloWorldLayer 场景)呈现。

没有加载其他内容。我负责的任何线程上都没有运行任何东西。即便如此,CPU 使用率也只有 20% 左右。我已经在仪器上进行了分析,这就是我所拥有的:

我看到这个 [CCGLView swapBuffers] 在引起注意的东西里面,即 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION (CoreFoundation)。

如果我选择“仅显示 obj-c”,我会看到:

显然,这个 drawScene 是有罪的,但是带有背景图像和 UIActionsheet 的场景怎么会占用这么多 CPU?

如何追查这个问题的根源?

注意。这正在设备上进行测试。在模拟器上 CPU 使用率为 77%!!!!!!

【问题讨论】:

【参考方案1】:

Cocos2d 与任何 OpenGL 应用程序一样,每帧都会重绘屏幕内容。通常这意味着每秒 60 帧。交换帧缓冲区和所有其他相关的开销需要一些 CPU 时间。

因此,您观察到的是正常行为,对此无能为力。渲染引擎中没有“空闲”的概念,即使屏幕内容没有变化(或者屏幕是空的),它也会绘制屏幕内容,假设屏幕内容通常会发生变化。

但是,您可以通过pauseCCDirector 来降低帧速率,从而节省 CPU 周期和电池。或致电stopAnimation 以完全停止所有更新,包括预定的选择器。然而,帧缓冲区发生的事情是不确定的,通常它会一直存在(即最后渲染的帧“冻结”),但这可能不适用于所有情况和设备。

就模拟器而言:忽略它。它的性能特征没有丝毫可比性和指导性。

【讨论】:

哇!谢谢!我正在尝试优化应用程序的能源使用和 20% 的 CPU,而应用程序什么都不做,只是等待用户在 actionSheet 上选择一个选项让我抓狂。暂停/停止动画以及暂时将帧速率设置为 1 fps,同时显示操作表,CPU 是否降至 "Cocos2d 和任何 OpenGL 应用程序一样,每帧都会重绘屏幕内容。"这是一种误导性的说法。我有一个 OpenGL iPhone 应用程序,如果应用程序知道屏幕上没有任何东西在动画,它不会重绘屏幕。 好吧,做那个“渲染引擎”。我还没有看到只在内容更改时重绘的渲染引擎。

以上是关于Cocos2D 2.1 - 空闲时 CPU 使用率高的主要内容,如果未能解决你的问题,请参考以下文章

即使在空闲模式下,VS2013 也会永久占用 CPU

c程序cpu占用率

CPU 空闲时在干嘛?

为什么dev_appserver.py即使在空闲时也会使用这么多CPU?

Visual Studio 2013/2015空闲CPU使用率

CPU 空闲时在干嘛?