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查看
Xcode OpenGL ES Frame Capture的使用的更多相关文章
- Use PerfHUD ES to Do Frame Capture Android Game
Author: http://www.cnblogs.com/open-coder/p/3898224.html Get Start This is short tutorial about how ...
- Beginning OpenGL ES 2.0 with GLKit Part 1
Update 10/24/12: If you’d like a new version of this tutorial fully updated for iOS 6 and Xcode 4.5, ...
- OpenGL ES 2: debugging, and improvements to VAO, VBO
OpenGL ES 2: debugging, and improvements to VAO, VBO http://www.altdevblogaday.com/2013/10/12/opengl ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- IOS 中openGL使用教程1(openGL ES 入门篇 | 搭建openGL环境)
OpenGL版本 iOS系统默认支持OpenGl ES1.0.ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适 ...
- Android 中建立一个OpenGL ES的开发环境
转自: http://wiki.eoe.cn/page/Building_an_OpenGL_ES_Environment.html 负责人:zhangql原文链接:http://docs.eoean ...
- OpenGL ES应用开发实践指南:iOS卷
<OpenGL ES应用开发实践指南:iOS卷> 基本信息 原书名:Learning OpenGL ES for iOS:A Hands-On Guide to Modern 3D Gra ...
- 最新首发Eclipse+CDT+android-ndk写纯c++安卓应用(附openGL Es)
首先下载eclipse和cdt.我的版本依次是:Version: Indigo Service Release 2和Version: 1.0.0.201202111925,再下载windows的ndk ...
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数
1. 打开Eclipse,File-->New-->Project…-->Android-->AndroidApplication Projec ...
随机推荐
- InfluxDB HTTP API reference
InfluxDB HTTP API reference API地址:https://docs.influxdata.com/influxdb/v1.6/tools/api/ The InfluxDB ...
- sql server 存储过程使用游标记录
sql server 存储过程使用游标记录--方便下次参考使用 游标的组成: 声明游标 打卡游标 从一个游标中查找信息 关闭游标 释放游标 游标类型: 静态游标 动态游标 只进游标 键集驱动游标 静态 ...
- putty删除键backspace设置
putty连接unix登陆后,编辑命令输入错误时要修改,可是习惯性的按backspace键或者Delete键都出现一堆奇怪的字符,无法删除出错的命令语句. 修正方法如下: ************** ...
- 使用JavaScript完成文字向上间歇滚动
使用JavaScript完成文字的间歇滚动 const init = (initData) => { const area = initData.area; // 设置单行滚动的高度: cons ...
- win10和ubuntu16.04双系统时间同步
在win10安装了ubuntu双系统,发现在两个系统见时间相差8个小时,这是由于windows和和ubuntu对于从主板取得时间后的处理方式不同,如果你把位置设为上海,ubuntu总是把主板时间当作u ...
- 【windows】之查看端口占用
打开cmd界面 netstat -aon|findstr "80" 查看80端口占用PIDtasklist|findstr "2448" 找到占用程序直接杀死( ...
- C++进阶--显式类型转换(casting)
//############################################################################ /* * 显式类型转换 * * 类型转换 ...
- 解决socket交互的10048和10055错误的总结
问题:60多路轮训的情况下,5分钟之后,现场报链接不上子进程的错误.绝大部分为海康设备 分析: 子进程的日志中 存在输入海康的解码库的错误,在子进程的对外dll中加日志发现,socket链接的时候 ...
- Jenkins XVnc Plugin
Linux下的Jenkins里配置Webdriver项目会碰到如下错误 org.openqa.selenium.firefox.NotConnectedException: Unable to con ...
- [UE4]UI动画复用
一.创建一个专门播放动画的Widget,添加一个“Name Slot”,创建动画绑定到这个“Name Slot”. 二.要使用这个动画的widget就添加第一步创建的widget,并把需要执行动画的对 ...