Android性能优化 — Systrace工具

  • Post author:
  • Post category:其他


Systrace简介

一般来说,我们的机器以60帧/秒显示时,用户会感觉机器很流畅,如果显示时出现丢帧的情况,需要知道当前整个系统所处的状态,这个时候Systrace便是最佳的工具选择。

Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android关键子系统(如Surfaceflinger、WindowManagerService等framework部分关键模块、服务)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。

Systrace在分析一些显示(performence)的问题上特别有用,如有用画图慢,显示动作或动画时变形等。

Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。在Android平台中,它主要由3部分组成:

1. 内核部分:Systrace利用了


Linux Kernel中的ftrace功能


。所以要使用Systrace的话,必须开启kernel中和ftrace相关的模块。

2. 数据采集部分:Android定义了一个


Trace类


。应用程序可利用该类


把统计信息输出给ftrace


。同时,Android还有一个


atrace程序


,它可以从ftrace中


读取统计信息然后交给数据分析工具


来处理。

3. 数据分析工具:Android提供了一个


systrace.py


(Python脚步文件,位于Android SDK目录/tools/systrace中,其内部将调用atrace程序)用来

配置数据采集的方式

(如采集数据的标签、输出文件名等)和

收集ftrace统计数据

并生成一个结果


网页文件供用户查看



本质上,


Systrace是对Linux Kernel中ftrace的封装


,应用程序需要利用Android提供的Trace类来使用Systrace。

抓取systrace

有三种方式抓取systrace。

systrace.py工具

首先,在手机端准备好你需要分析的过程的环境;比如假设你要分析App的冷启动过程,那就先把App进程杀掉,切换到Launcher中有你的App图标的那个页面,随时准备点击图标启动进程;假设你要分析某个Activity的卡顿情况,那就先在手机上进入到上一个Activity,随时准备点按钮切换到待分析的Activity中。因为Systrace没办法自由地控制开始和结束(下面有一个办法可以缓解),而trace得到的数据有可能非常多,因此我们需要手工缩小需要分析的数据集合;不然你可能被一堆眼花缭乱的数据和图像弄得晕头转向,然后什么有用的结论也分析不出来。

然后,打开PC端的命令行;进入systrace的目录,也即(假设$ANDROID_HOME是你Android SDK的根目录):

cd $ANDROID_HOME/platform-tools/systrace。

systrace命令行的用法如下:

python systrace.py [options] [category1] [category2] ... [categoryN]

使用上面的命令需要安装Python。其中,“[options]”是一些命令参数;“[category]”等是你感兴趣的系统模块,比如view代表View系统(包含绘制流程),am代表ActivityManager(包含Activity的创建过程等)。分析不同的问题,可以选择不同的你感兴趣的模块。

示例如下:

cd android-sdk/platform-tools/systrace
python systrace.py --time=10 -o mynewtrace.html sched gfx view wm

‘systrace.py’,这个脚本就是通过adb给手机发送了手机trace的通知;与此同时,切换到手机上进行你需要分析的操作,比如点击Launcher中APP的Icon启动APP。经过你指定的时间(–time=10,指定时间为10秒)后,就会有


trace数据生成在当前目录(systrace所在目录),默认是‘trace.html’


,上面使用‘-o mynewtrace.html’指定了生成的文件名;用Chrome浏览器打开即可。

options

options的取值如下:

options 描述
-o < FILE > 输出的目标文件
-t N, –time=N 执行时间,默认5s
-b N, –buf-size=N buffer大小(单位kB),用于限制trace总大小,默认无上限
-k < KFUNCS >,–ktrace=< KFUNCS > 追踪kernel函数,用逗号分隔
-a < APP_NAME >,–app=< APP_NAME > 追踪应用包名,用逗号分隔
–from-file=< FROM_FILE > 从文件中创建互动的systrace
-e <



版权声明:本文为Kitty_Landon原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。