了解iPhone OpenGL分析

时间:2011-04-22 00:04:44

标签: iphone opengl-es instruments

我的应用已启动并正在运行,现在我正在寻求提高渲染性能。使用'仪器'我收集了一些数据。我正在使用旧款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之间的区别。谁能开导我?

1 个答案:

答案 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)来显着减少它。