3

我在 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%!!!!!!

4

1 回答 1

2

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

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

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

就模拟器而言:忽略它。它的性能特征没有一点可比性,也没有指导意义。

于 2013-11-05T17:17:03.323 回答