了解iPhone OpenGL分析

Tur*_*age 8 iphone opengl-es instruments

我的应用已启动并正在运行,现在我正在寻求提高渲染性能.使用'仪器'我收集了一些数据.我正在使用旧的iPhone 3G作为最糟糕的情况.

时间分析器:

-30%    CopyVertexElementsMultipleSequential
-11%    mach_msg_trap
-4%     _semwait_signal
-2%     ValidateState
Run Code Online (Sandbox Code Playgroud)

但是,使用Open GL ES驱动程序,采样器读取:

-70%    _semwait_signal
-24%    CopyVertexElementsMultipleSequential
-0.7%   mach_msg_trap
Run Code Online (Sandbox Code Playgroud)

浏览文档我无法得出OpenGL ES Sampler和Timer Profiler之间的区别.任何人都可以开导我吗?

Bra*_*son 11

首先,这只是您正在查看的采样器工具.OpenGL ES Driver模板只包含Sampler仪器和OpenGL ES Driver.它与OpenGL ES没什么特别之处.

采样器仪器和时间分析器在收集数据的方式上有所不同.从仪器用户指南:

Time Profiler仪器和采样器仪器类似,但存在一些差异:

  • Time Profiler以与Shark相同的方式从内核空间收集回溯数据.另一方面,采样器从用户空间收集数据.因此,Time Profiler在收集数据时比Sampler更有效.

  • 注意:如果优化目标进程以省略帧指针,Time Profiler(和Shark)可能会产生不准确的回溯数据.

  • Time Profiler可以从一个或所有进程收集数据.采样器只能采样一个过程.

  • Time Profiler可以仅对所有线程状态或运行线程进行采样.采样器始终采样所有线程状态.通常,您对运行线程感兴趣.当您的应用程序挂起时,您想要检查所有线程状态.

我更喜欢自己使用Time Profiler,通过适当的数据挖掘,如向其呼叫者收取充值库或方法.

关于分析OpenGL ES应用程序,您需要首先查看可以在OpenGL ES Driver仪器中启用的各种统计信息.单击仪器名称右侧的i以显示弹出窗口,然后单击"配置"以显示可以记录的可能统计信息的列表.特别是,请查看Tiler Utilization和Renderer Utilization统计信息.启用所需的,返回上一个屏幕,然后单击复选框以确保它们已记录.

如果您的应用程序最大化了"Tiler Utilization"统计信息,则会受到几何体大小的限制.尽你所能减少这一点(使用我在这里提到的一些技巧),你会看到性能的显着提升.另一方面,如果您达到最大渲染器利用率,则您的填充率受限,您可能需要关闭MSAA,调整片段着色器(如果在OpenGL ES 2.0上)或减小区域大小除其他外,你正在渲染.

除此之外,这是在iOS 4.0的设备上运行应用程序,并使用自带的Xcode 4,该文书是伟大的,这表明从冗余状态调用等在你的渲染代码的热点,或浪费的表现,新的OpenGL ES分析仪

查看您的特定跟踪数据,您似乎花费了大量时间将几何体复制到GPU.我会看一下使用顶点缓冲对象(VBO)来显着减少它.