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开始。例子:

Android中用OpenGL ES Tracer分析绘制过程_第1张图片

3. 觉得差不多了点"Stop Tracing"结束,Trace log文件就会生成在预定的目录下。

4. 点击,选中生成的Trace log文件,然后就可以分析了。如:

Android中用OpenGL ES Tracer分析绘制过程_第2张图片

左上角的滑动条是帧号,通过它来调节要看哪一帧的绘制过程。

左下角为这一帧中运行过的绘制函数,其中的画图函数会标蓝显示。点击其中的某个函数,其它的窗口就会相应显示那个函数执行后的效果。举例来说,如点图中的glDrawArrays函数后,中间的GL状态内容也相应改变,右上角的预览也变成了这一函数执行后的效果。其顶点坐标和纹理坐标都可通过点击前面的glVertexAttribPointerData,然后从Details窗口获得。而当前用的texture, shader和buffer等信息都可以从中间的GL状态窗口中获得。从图中可以看出,这个函数是用来绘制背景的,因为后面的Draw函数还没有执行到,所以屏幕中间的其它元素都还没有被绘制出来。

中间窗口即为OpenGL的状态了。OpenGL像一个状态机,当前绘制效果受到当前GL状态的影响,而当前GL状态可能在很久之前就设定好了。有了这个信息就大大方便了我们的分析。

右上角窗口为当前选定函数执行后的绘制效果。

右下角窗口为这一帧所有函数执行完后的绘制效果,也就是这一帧绘制完后的效果。


你可能感兴趣的:(Android)