• Xcode OpenGL ES Frame Capture的使用


    一、使用背景

    近期在Xcode中使用OpenGL ES 2.0实现一些效果,刚开始存在一些性能问题(CPU和GPU),幸运的是Xcode中自带了免费的性能工具Instruments,其中包含OpenGL ES Analysis,查找方法如图1,图2所示,英文好的童鞋可以访问Apple官方提供的资料(https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/ToolsOverview/ToolsOverview.html)。

          

               图1  OpenGL ES Analysis查找                      图2  OpenGL ES Analysis

    为了方便查看draw call的回调和shader的执行过程,故此分享下Xcode OpenGL ES Frame Capture的使用。

    参考网址:http://www.cnblogs.com/TracePlus/p/4093830.html

    二、使用方法

    1.OpenGL ES Frame Capture设置

    如果使用该功能的前提:

    (1)必须使用真机

    (2)至少Xcode4.5以上

    (3)需要把GLKit或OpenGL Framework加入代码中

    (4)设置Manager Schemes..,设置GPU Frame Capture为OpenGL ES 效果如图3,图4所示。

           

            图3  Manager Schemes                                              图4  设置GPU Frame Capture为OpenGL ES

    2.捕获Frame

    此时,按下command+R运行工程,当在真机上加载完成后进入Debug Navigator ,然后点击FPS标签查看FPS显示,CPU/GPU执行时间等,如图5,图6所示。

          图5  FPS查找

                                  图6  FPS标签内容

    图6中显示FPS为60,CPU耗时0毫秒,GPU耗时1.7毫秒。程序员的目标是将FPS尽可能的达到60,即每帧画面CPU和GPU耗时Wie16毫秒(1/60)。当FPS的值偏低时,就需要通过上图查看是CPU的瓶颈还是GPU的瓶颈,进而对其进行性能优化。

    当GPU遇到瓶颈时,可以捕获每帧,来查看渲染的内部流程,方法为在运行过程中,点击相机图标获取当前Frame,如图7,图8所示。

                图7  Frame捕获按钮

       

        图8  捕获到的当前Frame                                     图9  状态信息

    此时在当前设备上,可以看到当前捕获帧的画面(暂停中),选中左侧一行指令,右侧会出现对应的Buffers,GPU Objects 和变量,如图9所示。

    如果您的当前画面中没有Objects面板,则可以通过点击show assistant Editor,找到想要显示的选项,如图10所示。

                                

          图10  show assistant Editor                                                                      图11  设置是否高亮显示

    可以通过右键选择Show/Hide Draw Call Highlight,显示当前渲染部分为高亮显示,如图11所示。

    在assistant窗口中选择Programs选项,选择其中的Program Object便可查看其对应的shader,如图12所示。当然可以查看shader中各个方法的耗时情况,进而进行优化,修改之后点击左下角更新按钮即可查看修改之后的效果,如图13所示。

           

             图12  查看Program Objects                      图13  shader查看
     
  • 相关阅读:
    值不丢失,虽然仅在局部函数中存在
    js 中和c类似
    天天QA
    request methods Hypertext Transfer Protocol (HTTP/1.1)
    单元测试
    access variables from the global scope 在全局范围内访问变量的2种方法
    summary
    安全跟效率之间的折中而已 记住一个大原则,安全和效率是对立的
    微信商城 Common Log Format Apache CustomLog
    僵尸进程 zombie
  • 原文地址:https://www.cnblogs.com/calence/p/6575694.html
Copyright © 2020-2023  润新知