3-3 Systrace使用
systrace
命令主要是用于跟踪/收集设备的系统级数据,包括运行中进程的时间信息,。
数据主要包含:CPU调度信息,磁盘活动信息,程序线程,所有这些数据以时间线分布展示,开发者通过阅读HTML的报告获取信息。
使用systrace
可以获取一段时间内(比如5秒钟)系统整体情况,会高亮显示出存在jank的相关,并且给出一些相对的修复建议。
不过由于建议比较笼统,实际上只是给出大致修复思路,具体如何修复还得开发者结合自身代码业务分析。
这里也需要明确的是,systrace
不会获取待测试App的具体代码情况,如果希望展示对应的方法调用栈之类的app相关信息,可以采用其他工具,比如给Android Studio的CPU Profile或者TraveView。
这一节中我们先学些如果正确使用systrace。
脚本和语法
systrace实际上是一个Python脚本。所以在使用直接需要满足环境要求:
- 下载最新的Android SDK Tools,可以用SDK Manager或者在Android Studio的集成面板中操作。
- 安装Python,如果是macOS默认已经安装
- 通过USB连接设备开始测试,注意设备版本需要>=4.3,也就是API 18
systrace脚本的位置,一般位于 $ANDROID_HOME/platform-tools/systrace/
p
执行systrace的格式如下:
python systrace.py [options] [categories]
其中的[options]代表可选的参数,[categories]代表已连接设备支持的数据类别,比如:
python systrace.py --time=5 -o result.html gfx
上面的参数表示收集5秒钟,输出文件为result.html,收集的数据类别是gfx。
脚本支持的参数比较多,具体可以通过帮助文档查看。常用的是-t表示时间,-o指定输出文件,-a指定进程名
**[terminal]
**[prompt aven-mac-pro-2:]**[path ]**[delimiter aven$ ]**[command python /Users/aven/Android/sdk/platform-tools/systrace/systrace.py -h]
Usage: systrace.py [options] [category1 [category2 ...]]
Example: systrace.py -b 32768 -t 15 gfx input view sched freq
Options:
-h, --help show this help message and exit
-o FILE write trace output to FILE
-j, --json write a JSON file
--link-assets (deprecated)
--asset-dir=ASSET_DIR
(deprecated)
-e DEVICE_SERIAL_NUMBER, --serial=DEVICE_SERIAL_NUMBER
adb device serial number
--timeout=TIMEOUT timeout for start and stop tracing (seconds)
--collection-timeout=COLLECTION_TIMEOUT
timeout for data collection (seconds)
-t N, --time=N trace for N seconds
--target=TARGET choose tracing target (android or linux)
-b N, --buf-size=N use a trace buffer size of N KB
-l, --list-categories
list the available categories and exit
Atrace options:
--atrace-categories=ATRACE_CATEGORIES
Select atrace categories with a comma-delimited list,
e.g. --atrace-categories=cat1,cat2,cat3
-k KFUNCS, --ktrace=KFUNCS
specify a comma-separated list of kernel functions to
trace
--no-compress Tell the device not to send the trace data in
compressed form.
-a APP_NAME, --app=APP_NAME
enable application-level tracing for comma-separated
list of app cmdlines
--from-file=FROM_FILE
read the trace from a file (compressed) rather than
running a live trace
BattOr trace options:
--battor-categories=BATTOR_CATEGORIES
Select battor categories with a comma-delimited list,
e.g. --battor-categories=cat1,cat2,cat3
--serial-map=SERIAL_MAP
File containing pregenerated map of phone serial
numbers to BattOr serial numbers.
--battor-path=BATTOR_PATH
specify a BattOr path to use
--battor Use the BattOr tracing agent.
Ftrace options:
--ftrace-categories=FTRACE_CATEGORIES
Select ftrace categories with a comma-delimited list,
e.g. --ftrace-categories=cat1,cat2,cat3
可以看到这里main输出的帮助文档并没有categories信息,这是因为categories需要根据设备来决定,因此使用-l的时候需要确保已经USB连接设备才行。下面是一个示例:
aven-mac-pro-2: aven$ python /Users/aven/Android/sdk/platform-tools/systrace/systrace.py -l
gfx - Graphics
input - Input
view - View System
webview - WebView
wm - Window Manager
am - Activity Manager
sm - Sync Manager
audio - Audio
video - Video
camera - Camera
hal - Hardware Modules
app - Application
res - Resource Loading
dalvik - Dalvik VM
rs - RenderScript
bionic - Bionic C Library
power - Power Management
sched - CPU Scheduling
freq - CPU Frequency
idle - CPU Idle
load - CPU Load
NOTE: more categories may be available with adb root
可以看到,各categories具体代表的数据类别,比如gfx指代的是图形图像的Graphics,view是视图系统View System。
GUI操作
- Python脚本
- 脚本参数
- GUI
- Trace新增监控点
参考
https://www.jianshu.com/p/0090d1428714 https://www.jianshu.com/p/6f528e862d31 4.1C: Using the Systrace and dumpsys tools http://www.vogella.com/tutorials/AndroidTools/article.html