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 时间。
因此,您观察到的是正常行为,对此无能为力。渲染引擎中没有“空闲”的概念,即使屏幕内容没有变化(或者屏幕是空的),它也会绘制屏幕内容,假设屏幕内容通常会发生变化。
但是,您可以通过pause
和CCDirector
来降低帧速率,从而节省 CPU 周期和电池。或致电stopAnimation
以完全停止所有更新,包括预定的选择器。然而,帧缓冲区发生的事情是不确定的,通常它会一直存在(即最后渲染的帧“冻结”),但这可能不适用于所有情况和设备。
就模拟器而言:忽略它。它的性能特征没有丝毫可比性和指导性。
【讨论】:
哇!谢谢!我正在尝试优化应用程序的能源使用和 20% 的 CPU,而应用程序什么都不做,只是等待用户在 actionSheet 上选择一个选项让我抓狂。暂停/停止动画以及暂时将帧速率设置为 1 fps,同时显示操作表,CPU 是否降至 "Cocos2d 和任何 OpenGL 应用程序一样,每帧都会重绘屏幕内容。"这是一种误导性的说法。我有一个 OpenGL iPhone 应用程序,如果应用程序知道屏幕上没有任何东西在动画,它不会重绘屏幕。 好吧,做那个“渲染引擎”。我还没有看到只在内容更改时重绘的渲染引擎。以上是关于Cocos2D 2.1 - 空闲时 CPU 使用率高的主要内容,如果未能解决你的问题,请参考以下文章
为什么dev_appserver.py即使在空闲时也会使用这么多CPU?