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分析绘制过程相关推荐

  1. android平台下OpenGL ES 3.0绘制圆点、直线和三角形

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  2. android平台下OpenGL ES 3.0绘制纯色背景

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  3. android平台下OpenGL ES 3.0绘制立方体的几种方式

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  4. 适用于ios和android,适用于iOS和Android的OpenGL ES差异

    我有一个适用于iOS和 Android的OpenGL ES应用程序.大多数代码是很久以前由另一个人编写的,现在我必须维护它. OpenGL的使用看起来相当简单(游戏是2D,只使用纹理精灵以简单的方式) ...

  5. Android平台OpenGL ES图像处理(improving)

    在Android平台一般使用OpenGL ES进行图像处理.在OpenGL ES中编写算法,实现效果,最后将处理的结果传输给 CPU,然后生成最终的照片. 直播中的美颜,对性能有很高的要求,无法使用特 ...

  6. 【Qt for Android】OpenGL ES 绘制彩色立方体

    Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...

  7. Android Studio OpenGL ES绘制三棱锥/四面体的多纹理贴图 每个面使用一张图片渲染

    本文参考了王刚的<疯狂Android讲义(第3版)>P554-P559 要求:利用OpenGL ES绘制一个三棱锥,并对每个面进行纹理贴图,每个面使用不同的图片进行渲染. 环境:Andro ...

  8. 【Android】OpenGL ES for Android 教程1 - HelloWorld

    本教程及后续教程全部参考或者转载于:OpenGL ES Tutorial for Android 本例相当于openGL的HelloWorld程序. 先贴代码,代码中的注释比较具体了. 主Activi ...

  9. Android下Opengl ES实现单屏幕双眼显示

    http://blog.csdn.net/u011371324/article/details/68946779 默认情况下,Opengl ES使用系统提供的帧缓冲区作为绘图表面,一般情况下,如果只在 ...

最新文章

  1. [SCOI2010]生成字符串
  2. Linux Shell变量类型
  3. 【C++grammar】继承与构造test1代码附录
  4. python井字棋ai_实现AI下井字棋的alpha-beta剪枝算法(python实现)
  5. ajax---post跨域思路
  6. [征求意见]关于收录精华区文章的标准
  7. linux clock()_对比python与linux中时间管理的三件工具calender clock datetime
  8. npy文件转换成png
  9. Unity设置鼠标指针图片
  10. 【数据采集】-目前比较流行的几种数据采集方式
  11. cad画计算机网络图,CAD迷你家装五步快速绘制平面图教程
  12. Git出错,提示error: bad signature 0x00000000 fatal: index file corrupt(win10系统)
  13. 物联网IP设备添加与入网
  14. reducer在react使用
  15. Dynamics CRM: 表单(Form)中的显示字段变成只读的几种情况
  16. 玩转阿里云:从零到一上手玩转云服务器学习报告
  17. 音诺恒科技多核验合一“数字电子哨兵”对接全国健康码精准核验
  18. IP-Guard文档防泄密解决方案
  19. 多选框的全选和全不选
  20. CICS事务网关-CTG原理及操作

热门文章

  1. linux强实时,强实时性Linux内核的研究与设计
  2. php把二维数组变为一维,如何将PHP二维数组转换为一维数组
  3. r语言怎么把txt数据变成一个Rdata格式_甲基化芯片数据下载如何读入到R里面
  4. html图片倒角,CSS实例:纯CSS打造斜角
  5. java wifi类_Java 接口——面向对象的精髓
  6. 湖南计算机软件水平考试,2021年湖南省计算机软考职称考试 网络工程师 信息系统项目管理师报名考试...
  7. cast函数_关闭RTTI后dynamic_cast和typeid报异常
  8. ajax js图片上传到php,Ajax上传并预览图片(附代码)
  9. es6 新增数据类型_ES6新增特性整理
  10. python里hist图状图_直方图中具有阶梯填充histtype的matplotlib散点图hist