Cocos2D 2.1 - 空闲时CPU使用率高

时间:2013-11-05 13:12:06

标签: ios iphone cocos2d-iphone instruments

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

当应用首次启动时,它会显示全屏背景和UIACtionSheet,用户必须选择一个选项来启动应用程序。而已。此操作表由委托(HelloWorldLayer场景)运行的第一个场景呈现。

没有其他任何东西被加载。在我负责的任何线程上都没有运行任何东西。即便如此,CPU使用率约为20%。我在仪器上描述了这个,这就是我所拥有的:

enter image description here

我看到[CCGLView swapBuffers]里面有一些引起注意的东西, CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION (CoreFoundation)。

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

enter image description here

显然有罪的是这个drawScene,但是带有背景图像和UIActionsheet的场景如何使用那么多CPU?

如何追踪此问题的根源?

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

1 个答案:

答案 0 :(得分:2)

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

所以你所观察到的是正常行为,没有什么可以做的。在渲染引擎中没有“空闲”的概念,它假设屏幕内容通常会发生变化,即使它们没有改变(或屏幕为空)也会绘制屏幕内容。

但是pause CCDirector可以降低帧率,节省CPU周期和电量。或致电stopAnimation以完全停止所有更新,包括预定选择器。然而,帧缓冲区发生的事情是未定义的,通常会粘在一起(即最后渲染的帧“冻结”),但对于所有情况和设备可能都不是这样。

就模拟器而言:忽略它。它的性能特征并不具有可比性和指导性。