3-3 Systrace使用

systrace命令主要是用于跟踪/收集设备的系统级数据,包括运行中进程的时间信息,。 数据主要包含:CPU调度信息,磁盘活动信息,程序线程,所有这些数据以时间线分布展示,开发者通过阅读HTML的报告获取信息。

使用systrace可以获取一段时间内(比如5秒钟)系统整体情况,会高亮显示出存在jank的相关,并且给出一些相对的修复建议。 不过由于建议比较笼统,实际上只是给出大致修复思路,具体如何修复还得开发者结合自身代码业务分析。

这里也需要明确的是,systrace不会获取待测试App的具体代码情况,如果希望展示对应的方法调用栈之类的app相关信息,可以采用其他工具,比如给Android Studio的CPU Profile或者TraveView。

这一节中我们先学些如果正确使用systrace。

脚本和语法

systrace实际上是一个Python脚本。所以在使用直接需要满足环境要求:

  1. 下载最新的Android SDK Tools,可以用SDK Manager或者在Android Studio的集成面板中操作。
  2. 安装Python,如果是macOS默认已经安装
  3. 通过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新增监控点

systrace

参考

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

powered by Gitbook更新: 2018-03-27

results matching ""

    No results matching ""