抓取Systrace方法汇总

目录

1. 使用Android Device Monitor抓取 Systrace

2. 使用命令行抓取 Systrace

3. 命令抓取Atrace

3.1. 抓取atrace 

3.2. 转换为systrace 格式文件

4. Perfetto 抓trace

4.1.系统跟踪APP抓取Perfetto

4.3 通过网页抓取

5. 高通Perfdump

6.离线抓Systrace 方法

 


了解 Systrace: https://source.android.google.cn/devices/tech/debug/systrace

浏览Systrace报告:  https://developer.android.google.cn/topic/performance/tracing/navigate-report

系统跟踪概览: https://developer.android.google.cn/topic/performance/tracing

Perfetto: https://developer.android.google.cn/studio/command-line/perfetto

ftrace : https://source.android.google.cn/devices/tech/debug/ftrace

抓取Systrace 办法有很多种,以下会介绍5种:

  1. android device Monitor 工具抓取
  2. Systrace 命令抓取
  3. Atrace
  4. Perfetto(包含3种方式)
  5. 高通Perfdump

1. 使用Android Device Monitor抓取 Systrace

Android studio 已经去掉了直接抓取Systrace 的按钮,可以通过打开SDK 的tootls目录的monitor.bat 脚本来启动相关的页面来抓取SysTrace.

脚本的路径:android-sdk\tools\monitor.bat.

Destination File :生成的trace.html文件的地址

Trace duration:抓取时间,默认是5秒. 这个时间可以自己修改,但是时间太长会导致JavaHeap不够而无法保存.

Trace Buffer Size:存储Systrace的size,默认是2048. 太小会导致信息丢失,太长会导致Java Heap不够而无法保存。如果检测结果有异常,请调整Buffer Size的大小试试。

Enable Application Traces from:检测的应用,默认选择none,这里需选择自己需要检测的应用。

Commonly Used Tag:常用标签,默认全部勾选。

Advanced Options:高级选项。如果设备root了,可以看到更多的TAG,如eMMC commands、Synchonization、Kernel Workqueues。

实际多次连续抓取的时候,会出现因为缓存太大,导致抓取失败,可以点击右下角的清除按钮.

2. 使用命令行抓取 Systrace

参考链接:https://developer.android.google.cn/topic/performance/tracing/command-line

使用命令抓取前,需要安装指定版本的python,安装后还是出现出现six 模块的

如果缺少six 模块,执行命令按下:

python -m pip install --upgrade pip

python -m pip install six

命令格式:python systrace.py [options] [categories]

Options 主要是配置时长/buffer 大小/保存文件名称等

Categories 主要是配置具体需要跟踪那些些进程的信息

命令和选项

说明

-o file

将 HTML 跟踪报告写入指定的文件。如果您未指定此选项,systrace 会将报告保存到 systrace.py 所在的目录中,并将其命名为 trace.html

-t N | --time=N

跟踪设备活动 N 秒。如果您未指定此选项,systrace 会提示您在命令行中按 Enter 键结束跟踪。

-b N | --buf-size=N

使用 N KB 的跟踪缓冲区大小。使用此选项,您可以限制跟踪期间收集到的数据的总大小。

-k functions
|--ktrace=functions

跟踪逗号分隔列表中指定的特定内核函数的活动。

-a app-name
|--app=app-name

启用对应用的跟踪,指定为包含进程名称的逗号分隔列表。这些应用必须包含 Trace 类中的跟踪检测调用。您应在分析应用时指定此选项。很多库(例如 RecyclerView)都包括跟踪检测调用,这些调用可在您启用应用级跟踪时提供有用的信息。如需了解详情,请参阅定义自定义事件

如需跟踪搭载 Android 9(API 级别 28)或更高版本的设备上的所有应用,请传递用添加引号的通配符字符 "*"

--from-file=file-path

atrace 转换为html 格式的文件

-e device-serial
|--serial=device-serial

在已连接的特定设备(由对应的设备序列号标识)上进行跟踪。

categories

包含您指定的系统进程的跟踪信息,如 gfx 表示用于渲染图形的系统进程。您可以使用运行命令 systrace  -l,以查看已连接设备可用的服务列表。

例如,以下命令会调用 systrace 来记录设备活动,并生成一个名为 my_systrace_report.html 的 HTML 报告。

$ python systrace.py -a com.android.systemui -b 16384 -o my_systrace_report.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res

这里没有指定抓取systrace 时长,systrace 会提示您在命令行中按 Enter 键结束跟踪.

如需查看已连接设备支持的类别列表,请运行以下命令:

$ python systrace.py --list-categories

如果您未指定任何类别或选项,systrace 会生成包含所有可用类别的报告,并使用默认设置。可用类别取决于您所使用的已连接设备。

Root 后选项会多一些. 实际使用的时候可以根据个人喜好把user 和userdebug版本的命令保存为对应.bat 脚本文件

3. 命令抓取Atrace

和方法2的方式差不多,本身systrace 就是对atrace的一种封装

3.1. 抓取atrace 

开始命令:

adb shell atrace -c -b 16384 --async_start gfx  input view  webview  wm am  sm  audio  video  camera  hal  res  dalvik  rs  bionic  power  pm  ss  database  network  adb  vibrator   aidl  sched  freq  idle  disk sync  -a com.android.systemui

结束命令:

adb shell atrace -c -b 16384 --async_stop -z gfx  input view  webview  wm am  sm  audio  video  camera  hal  res  dalvik  rs  bionic  power  pm  ss  database  network  adb  vibrator   aidl  sched  freq  idle  disk sync -a com.android.systemui > atracedump.atrace

atrace 的categories 选项和systrace 是一样的.

查看categories 命令:

adb shell atrace  --list_categories

3.2. 转换为systrace 格式文件

进入SDK 目录systrace目录,类似android-sdk\platform-tools\systrace

systrace.py --from-file atracedump.atrace -o atracedump.html

4. Perfetto 抓trace

Perfetto 是 Android 10 中引入的全新平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的更加通用和复杂的开源跟踪项目。与 Systrace 不同,它提供数据源超集,可让您以 protobuf 编码的二进制流形式记录任意长度的跟踪记录。您可以在 https://ui.perfetto.dev/#!/viewer 链接中打开这些跟踪记录。抓取的方式主要有3种,后面会一一介绍.

Perfetto 和 Systrace 可交互使用,可使用下面的方式把Perfetto 文件以Systrace 方式查看:

1)在 Perfetto 界面中使用旧版 Systrace 查看器打开 Systrace 文件(使用 Open with legacy UI 链接)。

2)使用traceconv工具将 Perfetto 跟踪记录转换为旧版 Systrace 文本格式

在低于Android R的版本上面默认是关闭的,需要先执行命令打开:

adb shell setprop persist.traced.enable 1

对比Systrace 有很多优点:

  1. 进程名称显示完整
  2. Binder跨进程点击跳转,跟踪方便,不需要类似systrace一样跟踪Binder跳转时需要挨个查看线程号
  3. 支持置顶你感兴趣的线程,放在一起分析更容易
  4. 看线程被谁唤醒非常方便
  5. 可以同时跟踪内存/电压/event log等信息

参考链接:

https://developer.android.google.cn/studio/command-line/perfetto  

https://perfetto.dev/docs/quickstart/android-tracing

https://developer.android.google.cn/topic/performance/tracing

https://perfetto.dev/docs/quickstart/traceconv

4.1.系统跟踪APP抓取Perfetto

“系统跟踪”应用是一款用于将设备活动保存到跟踪文件的 Android 工具。在 Android 10(API 级别 29)或更高版本的设备上,跟踪文件会以 Perfetto 格式保存。在较低版本 Android 系统的设备上,跟踪文件会以 Systrace 格式保存.这个App 是在Android 9(API 级别 28)或更高版本的设备的系统级应用。此应用类似于 systrace 命令行实用工具,但允许您直接从测试设备本身录制跟踪记录,而无需插入设备并通过 ADB 连接到该设备。

4.1.1打开系跟踪的app 页面

1)  adb 指令(请提前开启开发者选项,不然会打开失败)

adb shell am start com.android.traceur/com.android.traceur.MainActivity

  1.  打开 Settings->System->Developer options->System Tracing

录制根据记录:点击开始抓trace,通知通知栏会有通知提示,点击通知会保存systrace

跟踪可调试的应用:是否抓取app

类别:选择抓取那些模块的信息

4.1.2导出 trace 文件

adb pull /data/local/traces/ .

在android Q 之后生成的是以.perfetto-trace 为后缀的文件

4.1.3打开分析网站并打开 trace 文件进行分析

用 Chrome 浏览器打开网址https://ui.perfetto.dev/#!/ 并点击左上角的 Open trace file 就可以分析了。

快捷键的方式基本和 Systrace 的查看方式差不多

4.2. Perfetto 命令抓取

数据源选择

perfetto 命令包含以下两种模式:

轻量模式:只能选择一部分数据源,具体来说就是 atrace 和 ftrace。但此模式可提供类似于 systrace 的接口。

普通模式:从协议缓冲区获取其配置,并且可以让您使用 atrace 和 ftrace 之外的数据源,从而更加充分地利用 perfetto 的功能。

下面是简单介绍2种模式下参数不一样的地方,2种模式下命令相同的部分(常规参数)可以参考链接:

https://developer.android.google.cn/studio/command-line/perfetto

轻量模式

在轻量模式下使用 perfetto 的一般语法如下:

 adb shell perfetto [ --time TIMESPEC ] [ --buffer SIZE ] [ --size SIZE ] [ ATRACE_CAT | FTRACE_GROUP/FTRACE_NAME | FTRACE_GROUP/* ]...

下表列出了在轻量模式下使用 perfetto 的可用选项:

选项

说明

--time TIME[s|m|h] | -t TIME[s|m|h]

指定跟踪记录的持续时间(以秒、分钟或小时为单位)。例如,--time 1m 指定持续 1 分钟的跟踪记录。默认持续时间为 10 秒。

--buffer SIZE[mb|gb] | -b SIZE[mb|gb]

指定环形缓冲区空间大小,以兆字节 (mb) 或千兆字节 (gb) 为单位。默认参数为 --buffer 32mb

--size SIZE[mb|gb] | -s SIZE[mb|gb]

指定文件大小上限,以兆字节 (mb) 或千兆字节 (gb) 为单位。默认情况下,perfetto 仅使用内存中的环形缓冲区。

接下来介绍事件说明符列表

事件

说明

ATRACE_CAT

指定您想为其记录跟踪数据的 atrace 类别。例如,以下命令会使用 atrace 跟踪窗口管理器:

    adb shell perfetto --out FILE wm

如需记录其他类别,请参阅 atrace 类别列表

FTRACE_GROUP/FTRACE_NAME

指定您想为其记录跟踪数据的 ftrace 事件。例如,以下命令用于跟踪 sched/sched_switch 事件:

      adb shell perfetto --out FILE sched/sched_switch

参考命令:

抓取:

adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s sched freq idle am wm gfx view

取出文件:

adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace .

普通模式

在普通模式下使用 perfetto 的一般语法如下:

 adb shell perfetto [ --txt ] --config CONFIG_FILE

下表列出了在普通模式下使用 perfetto 的可用选项:

选项

说明

--config CONFIG_FILE | -c CONFIG_FILE

指定配置文件的路径。

--txt

指示 perfetto 将配置文件解析为 pbtxt。此标记为实验性标记,不建议您在正式版中启用此标记。

配置文件不会写的,可以在https://ui.perfetto.dev/#!/record  配置好后复制对应命令并另存为配置文件:perfetto_config.pbtx

参考命令:

adb push perfetto_config.pbtx /data/misc/perfetto-traces/

 

adb shell perfetto --txt --config /data/misc/perfetto-traces/perfetto_config.pbtx --out /data/misc/perfetto-traces/1.perfetto-trace

 

adb pull /data/misc/perfetto-traces/1.perfetto-trace

配置文件:perfetto_config.pbtx

buffers: {

    size_kb: 63488

    fill_policy: DISCARD

}

buffers: {

    size_kb: 2048

    fill_policy: DISCARD

}

data_sources: {

    config {

        name: "linux.process_stats"

        target_buffer: 1

        process_stats_config {

            scan_all_processes_on_start: true

        }

    }

}

data_sources: {

    config {

        name: "android.log"

        android_log_config {

        }

    }

}

data_sources: {

    config {

        name: "linux.sys_stats"

        sys_stats_config {

            stat_period_ms: 1000

            stat_counters: STAT_CPU_TIMES

            stat_counters: STAT_FORK_COUNT

        }

    }

}

data_sources: {

    config {

        name: "linux.ftrace"

        ftrace_config {

            ftrace_events: "sched/sched_switch"

            ftrace_events: "power/suspend_resume"

            ftrace_events: "sched/sched_wakeup"

            ftrace_events: "sched/sched_wakeup_new"

            ftrace_events: "sched/sched_waking"

            ftrace_events: "power/cpu_frequency"

            ftrace_events: "power/cpu_idle"

            ftrace_events: "power/gpu_frequency"

            ftrace_events: "raw_syscalls/sys_enter"

            ftrace_events: "raw_syscalls/sys_exit"

            ftrace_events: "sched/sched_process_exit"

            ftrace_events: "sched/sched_process_free"

            ftrace_events: "task/task_newtask"

            ftrace_events: "task/task_rename"

            ftrace_events: "mm_event/mm_event_record"

            ftrace_events: "kmem/rss_stat"

            ftrace_events: "ion/ion_stat"

            ftrace_events: "dmabuf_heap/dma_heap_stat"

            ftrace_events: "kmem/ion_heap_grow"

            ftrace_events: "kmem/ion_heap_shrink"

            ftrace_events: "lowmemorykiller/lowmemory_kill"

            ftrace_events: "oom/oom_score_adj_update"

            ftrace_events: "ftrace/print"

            atrace_categories: "gfx"

            atrace_categories: "input"

            atrace_categories: "view"

            atrace_categories: "webview"

            atrace_categories: "wm"

            atrace_categories: "am"

            atrace_categories: "sm"

            atrace_categories: "audio"

            atrace_categories: "video"

            atrace_categories: "camera"

            atrace_categories: "hal"

            atrace_categories: "res"

            atrace_categories: "dalvik"

            atrace_categories: "rs"

            atrace_categories: "bionic"

            atrace_categories: "power"

            atrace_categories: "pm"

            atrace_categories: "ss"

            atrace_categories: "database"

            atrace_categories: "network"

            atrace_categories: "adb"

            atrace_categories: "vibrator"

            atrace_categories: "aidl"

            atrace_categories: "nnapi"

            atrace_categories: "rro"

            atrace_categories: "binder_driver"

            atrace_categories: "binder_lock"

            atrace_apps: "lmkd"

        }

    }

}

duration_ms: 10000

4.3 通过网页抓取

目前测试验证有异常,网上搜索反馈windows 目前是会报错,ubuntu 上面是正常的.

5. 高通Perfdump

高通平台支持的一个工具,功能很多,有兴趣的可以尝试. 也是对atrace的一种封装使用.

打开app 页面:

adb shell am start -n com.qualcomm.qti.perfdump/.MainActivity

操作说明:点击Manual mod 会有一个三角形的图标,点击后开始抓Systrace ,再次点击就可以停止.

生成文件路径:在SDCard的根目录一个Perfdump 目录

转换文件格式:systrace.py --from-file trace_output -o output.htm 

6.离线抓Systrace 方法

上面的方式4在离线抓取的时候比较方便.如果用其他方式也要离线抓取,可以使用wifi 连接adb后再去抓systrace

设置监听的端口: adb tcpip 5555

连接: adb connect 10.206.209.119:5555

对应的IP 地址可以在手机wifi 信息里面查询

 

 

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值