Android中用OpenGL ES Tracer分析绘制过程
Tracer for OpenGL ES(http://developer.android.com/tools/help/gltracer.html)是Android SDK中新增加的开发工具,可逐帧(准确得说是逐函数)记录app用OpenGL ES的绘制过程。它提供了每个OpenGL函数调用的消耗时间,所以很多时候用来作performance分析。但因为其强大的记录功能,在分析渲染出错的问题时(尤其是没有源代码的情况下),它也可算是一大神器。缺点有二:一是只支持Android 4.1及以上的设备,二是采集数据时app运行会变得很慢(这可能会影响app的行为)。
简要使用步骤:
1. 先连接设备,然后打开Device Monitor(在android-sdk/tools/monitor) 或Eclipse(装了ADT的话),接着Window-> Open Perspective -> Other -> Tracer for OpenGL ES。
2. 点击,填写要分析的app信息,这里面的Package名和Activity名都可以通过解压Apk文件从AndroidManifest.xml中得到,或是通过打开该app后用
$ adb shell dumpsys activity | grep app名
得到。然后能打勾的全打上勾,点Trace开始。例子:
3. 觉得差不多了点"Stop Tracing"结束,Trace log文件就会生成在预定的目录下。
4. 点击,选中生成的Trace log文件,然后就可以分析了。如:
左上角的滑动条是帧号,通过它来调节要看哪一帧的绘制过程。
左下角为这一帧中运行过的绘制函数,其中的画图函数会标蓝显示。点击其中的某个函数,其它的窗口就会相应显示那个函数执行后的效果。举例来说,如点图中的glDrawArrays函数后,中间的GL状态内容也相应改变,右上角的预览也变成了这一函数执行后的效果。其顶点坐标和纹理坐标都可通过点击前面的glVertexAttribPointerData,然后从Details窗口获得。而当前用的texture, shader和buffer等信息都可以从中间的GL状态窗口中获得。从图中可以看出,这个函数是用来绘制背景的,因为后面的Draw函数还没有执行到,所以屏幕中间的其它元素都还没有被绘制出来。
中间窗口即为OpenGL的状态了。OpenGL像一个状态机,当前绘制效果受到当前GL状态的影响,而当前GL状态可能在很久之前就设定好了。有了这个信息就大大方便了我们的分析。
右上角窗口为当前选定函数执行后的绘制效果。
右下角窗口为这一帧所有函数执行完后的绘制效果,也就是这一帧绘制完后的效果。
Android中用OpenGL ES Tracer分析绘制过程相关推荐
- android平台下OpenGL ES 3.0绘制圆点、直线和三角形
OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...
- android平台下OpenGL ES 3.0绘制纯色背景
OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...
- android平台下OpenGL ES 3.0绘制立方体的几种方式
OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...
- 适用于ios和android,适用于iOS和Android的OpenGL ES差异
我有一个适用于iOS和 Android的OpenGL ES应用程序.大多数代码是很久以前由另一个人编写的,现在我必须维护它. OpenGL的使用看起来相当简单(游戏是2D,只使用纹理精灵以简单的方式) ...
- Android平台OpenGL ES图像处理(improving)
在Android平台一般使用OpenGL ES进行图像处理.在OpenGL ES中编写算法,实现效果,最后将处理的结果传输给 CPU,然后生成最终的照片. 直播中的美颜,对性能有很高的要求,无法使用特 ...
- 【Qt for Android】OpenGL ES 绘制彩色立方体
Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...
- Android Studio OpenGL ES绘制三棱锥/四面体的多纹理贴图 每个面使用一张图片渲染
本文参考了王刚的<疯狂Android讲义(第3版)>P554-P559 要求:利用OpenGL ES绘制一个三棱锥,并对每个面进行纹理贴图,每个面使用不同的图片进行渲染. 环境:Andro ...
- 【Android】OpenGL ES for Android 教程1 - HelloWorld
本教程及后续教程全部参考或者转载于:OpenGL ES Tutorial for Android 本例相当于openGL的HelloWorld程序. 先贴代码,代码中的注释比较具体了. 主Activi ...
- Android下Opengl ES实现单屏幕双眼显示
http://blog.csdn.net/u011371324/article/details/68946779 默认情况下,Opengl ES使用系统提供的帧缓冲区作为绘图表面,一般情况下,如果只在 ...
最新文章
- [SCOI2010]生成字符串
- Linux Shell变量类型
- 【C++grammar】继承与构造test1代码附录
- python井字棋ai_实现AI下井字棋的alpha-beta剪枝算法(python实现)
- ajax---post跨域思路
- [征求意见]关于收录精华区文章的标准
- linux clock()_对比python与linux中时间管理的三件工具calender clock datetime
- npy文件转换成png
- Unity设置鼠标指针图片
- 【数据采集】-目前比较流行的几种数据采集方式
- cad画计算机网络图,CAD迷你家装五步快速绘制平面图教程
- Git出错,提示error: bad signature 0x00000000 fatal: index file corrupt(win10系统)
- 物联网IP设备添加与入网
- reducer在react使用
- Dynamics CRM: 表单(Form)中的显示字段变成只读的几种情况
- 玩转阿里云:从零到一上手玩转云服务器学习报告
- 音诺恒科技多核验合一“数字电子哨兵”对接全国健康码精准核验
- IP-Guard文档防泄密解决方案
- 多选框的全选和全不选
- CICS事务网关-CTG原理及操作
热门文章
- linux强实时,强实时性Linux内核的研究与设计
- php把二维数组变为一维,如何将PHP二维数组转换为一维数组
- r语言怎么把txt数据变成一个Rdata格式_甲基化芯片数据下载如何读入到R里面
- html图片倒角,CSS实例:纯CSS打造斜角
- java wifi类_Java 接口——面向对象的精髓
- 湖南计算机软件水平考试,2021年湖南省计算机软考职称考试 网络工程师 信息系统项目管理师报名考试...
- cast函数_关闭RTTI后dynamic_cast和typeid报异常
- ajax js图片上传到php,Ajax上传并预览图片(附代码)
- es6 新增数据类型_ES6新增特性整理
- python里hist图状图_直方图中具有阶梯填充histtype的matplotlib散点图hist