我的应用已启动并正在运行,现在我正在寻求提高渲染性能。使用'仪器'我收集了一些数据。我正在使用旧款iPhone 3G作为最糟糕的情况。
Time Profiler:
-30% CopyVertexElementsMultipleSequential
-11% mach_msg_trap
-4% _semwait_signal
-2% ValidateState
然而,使用Open GL ES驱动程序,采样器读取:
-70% _semwait_signal
-24% CopyVertexElementsMultipleSequential
-0.7% mach_msg_trap
在文档中探讨我无法得到OpenGL ES Sampler和Timer Profiler之间的区别。谁能开导我?
答案 0 :(得分:11)
首先,这只是您正在寻找的采样器乐器。 OpenGL ES Driver模板只包含Sampler仪器和OpenGL ES Driver。它与OpenGL ES没有任何特殊之处。
Sampler仪器和Time Profiler在收集数据方面有所不同。来自Instruments User Guide:
Time Profiler仪器和 采样器仪器类似,但是 存在一些差异:
Time Profiler以与Shark相同的方式收集回溯数据 内核空间。采样器,另一方面 手,从用户空间收集数据。 因此,Time Profiler更多 收集时比采样器高效 数据
注意:Time Profiler(和Shark)可能会产生不准确的回溯数据 目标进程已优化以省略 帧指针。
Time Profiler可以从一个或所有进程收集数据。采样器只能 采样一个过程。
Time Profiler只能对所有线程状态或运行线程进行采样。 采样器始终采样所有线程 状态。一般来说,你感兴趣 在运行线程。当你的 应用程序挂起,你想 检查所有线程状态。
我更喜欢自己使用Time Profiler,并为其呼叫者提供适当的数据挖掘,如计费库或方法。
关于剖析OpenGL ES应用程序,您需要先了解可以在OpenGL ES Driver仪器中启用的各种统计信息。单击仪器名称右侧的 i 以显示弹出窗口,然后单击“配置”以显示可以记录的可能统计信息的列表。特别是,请查看Tiler Utilization和Renderer Utilization统计信息。启用所需的,返回上一个屏幕,然后单击复选框以确保它们已被记录。
如果您的应用程序maxes out the Tiler Utilization stat,则受到几何体大小的限制。尽你所能减少这一点(使用我提到的一些提示here),你会看到性能的显着提升。另一方面,如果您达到最大渲染器利用率,则您的填充率受限,您可能需要关闭MSAA,调整片段着色器(如果在OpenGL ES 2.0上),或者缩小区域大小你正在渲染,等等。
除此之外,在iOS 4.0上的设备上运行您的应用程序并使用Xcode 4附带的新OpenGL ES Analyzer仪器。该仪器非常适合在渲染代码中建议热点,或者从冗余状态调用中浪费性能,等
查看您的特定跟踪数据,您似乎花费了大量时间将几何体复制到GPU。我会看一下使用顶点缓冲对象(VBO)来显着减少它。