通过Systrace的功能,来debug performance问题,抓取方法如下:
分析性能问题时,需要在userdebug load上抓systrace;
开机后,请先开启“开发者模式(Developer option)”
然后再usb连接手机到电脑,cmd命令行下执行adb root,接着立即进入Developer operation,找到USB Debugging,将该选项去掉,然后再勾选上;
完了之后adb remount一下,如果成功,那么userdebug load就已经具备debug权限了,如果手机reboot了,则adb root的权限要重新获取,方法同上。
抓取Systrace的设置步骤和方法如下:
设置TAG步骤:
首先进入"设置->开发者选项(Settings->Developer options)",在"监控(MONITORING)"这个分类栏目下面找到“启用跟踪(Enable Traces)"这个菜单项,点击进去;
这时会弹出一个复选框列表,有一些TAG列出来供debuger来选择,请按需要来勾选,而不要全部都勾选,不然会导致系统性能被拉低;
如果是UI绘制相关的问题,请勾选Graphics,View,或者单独勾选View(这样的话就只会打出android view system的执行方法)
如果是分析输入事件响应慢及更随性相关的问题,请勾选View,Input;
如果是Activity切换,Window切换相关的问题,请勾选Window Manager,Activity Manager;
做完上述设定之后,才能真正开始抓Systrace,抓取的方法有两种:
方法一:先用ftrace_all_in_one这个tool抓ftrace,然后将抓到的ftrace文件SYS_TRACE用02-parse.bat解析成trace.html,
如何抓取ftrace请参考FAQ: ID: FAQ04673 如何抓取Ftrace
方法二:在Linux 系统环境下的android sdk目录下的tools/systrace目录下,执行systrace.py (如果有windows环境下可正常使用的systrace package,则抓取方法与此相同)
./systrace.py –b 20480 –t 10 -o out_put.html
上述命令中:
-t 10表示抓10s内的systrace,可根据实际需要,自行设定操作复现问题持续的时间值,
-b 20480 表示buffer size,如果抓到的systrace用Chrome浏览器打开后发现解析有问题,可以尝试加大buffer size,操作时间越长,-b buffer size就要跟着增大
-o out_put.html是最后生成的文件名,可根据需要自己设定生成的trace文件名
详细的参数可以参考:http://developer.android.com/tools/help/systrace.html
注意:
1.只要问题复现了,可以不必再抓Systrace了,复现3次左右即可,如果是那种app第一次启动慢的问题,就只抓一次即可;
2.如果你要profile的apk是新安装的,那么需要先执行如下两个命令之后,再开始抓systrace:
adb shell stop
adb shell start
如何抓取OpenGL trace?
如果是在debug 硬件加速HWUI绘图相关的问题,很多情况下需要一并抓取OpenGL trace,将OpenGL ES的方法调用以图形化的方式显示在Systrace中,
如果要抓OpenGL trace,还需要做如下设置:
进入Developer options->Enable OpenGL traces,选择Systrace(Graphics),
做了上述设置之后,需要重新启动framework才能生效,重启framework的方法有如下两种:
1、执行如下两个命令:
adb shell stop
adb shell start
2、如果下上面这两个命令后手机发生灰屏,那么就再重新开机,重新做Systrace(Graphics)设置之后,采用如下方法:
adb shell ps 查看system_server的pid,
然后adb shell kill -9 pid_of_system_server
这样手机就会自动重新启动framewok,作用跟上面的stop/start命令一样
注意:
1.做了上面所有设置之后,framework重启完毕,请再检查一下最开始设置的"启用跟踪(Enable traces)"里面的那些TAG是否有被勾选,要抓OpenGL trace,必须勾选Enable traces里面Graphics 这个TAG,如果framework重启之后,之前所设置的TAG被重置了,请再按照要求设置一遍即可。
2.再提醒一遍,Enable traces里面的tag勾选数量,会影响机器本身的performance,tag勾选得越多,则对performance影响越大,performance会变差,所以一般情况下如果是测试画面绘制相关和滑动界面相关的场景,只需开启Graphics,Input,View这3个tag即可,具体情况可以参考上面的介绍。