概述
- 在
Android 9.0
(API级别28)或更高版本的设备上,可以使用System Tracing
的System App
在设备上记录系统跟踪 Perfetto
工具是Android下一代全新的统一的trace
收集和分析框架,可以抓取平台和app的trace
信息,是用来取代systrace
的,但systrace
由于历史原因也还会一直存在,并且Perfetto
抓取的trace
文件也可以同样转换成systrace
视图,如果习惯用systrace
的,可以用Perfetto UI
的Open with legacy UI
转换成systrace
视图来看Perfetto
的几个主要特点- 可以在线抓取长时间的
trace
,可以长达一个小时,另外抓取的文件size也可以达到GB级别,这样就可以在后台开启,让它一直抓取trace
了,特别适用于那种复现概率很低,又比较严重的性能问题 Perfetto
具有很好的可扩展性,它除了提供标准的tracepoints
之外,例如CPU调度信息,内存信息等,还可以通过atrace HAL
层扩展,在Android P
当中,Google新增加了一个atrace HAL
层,atrace
进程可以调用这个HAL的接口来获取当前的扩展信息,相关代码可见 Google 提交,这样如果需要扩展tracepoints
的话,就可以按照graphic
的示例添加即可- 提供全新的 Perfetto UI 网站,可以在上面通过选取开关的方式,自动生成抓取
trace
的命令,同时可以打开trace
文件。另外还集成了几种预定义的trace
分析统计工具,详情可见它的Metrics and auditors
选项 Perfetto
本身是一个框架,关于它的架构和模块的详细介绍,可以参考它的 doc网站,它的源码可以参考Android Source Tree
的/external/perfetto
目录,里面有很多的tools和脚本,可以拿来直接使用
- 可以在线抓取长时间的
使用
- 开启
System Tracing
- 开启开发者选项
- 进入开发者选项,选择
System Tracing(系统跟踪)
;开启Show Quick Setting tile(显示“快捷设置”图块)
。或者选择需要跟踪的系统和传感器调用的类别,并选择缓冲区大小(以KB为单位) - 打开顶端下滑菜单快速设置面板中的
System Tracing
,或者打开开发者选项里System Tracing
的Record trace(录制跟踪记录)
- 通知面板会出现一个
System Tracing
通知,完成需跟踪操作后点击通知面板或者快速设置面板中的System Tracing
,停止tracing
- 系统将显示一个
saving trace
的新通知。保存完成后,系统将取消通知并显示第三个通知,System Tracing
已保存
- 查看
System Tracing
// Android 10或更高版本上后缀名为 perfetto-trace // 其他版本后缀名为 .ctrace adb pull data/local/traces .
- (可选,未验证)生成html文件,进入目录: D:\adt\SDK\platform-tools\systrace
// 似乎只支持python 2.7 python systrace.py --from-file trace-file-name{.ctrace | .perfetto-trace}
- (可选)在
trace formats
间转换// 仅支持python 2.7 且需要GLIBC_2.28版本 curl https://get.perfetto.dev/traceconv -o traceconv chmod +x traceconv ./traceconv [text|json|systrace|profile] [input proto file] [output file]
- 也可以在
Perfetto UI
网站上点击Open with legacy UI
进行转换,但是容易崩溃
- 也可以在
- 在 Perfetto UI 网站打开查看
- (可选,未验证)生成html文件,进入目录: D:\adt\SDK\platform-tools\systrace
- 命令行工具
perfetto
是一个命令行工具,在shell环境下执行,同时在手机端也有两个进程:traced
和traced_probes
,这两个进程运行在手机端,可能需要执行如下命令才会开启这两个进程,开启这两个进程之后,才能正常抓取trace信息adb shell setprop persist.traced.enable 1
- 如果只是使用这个工具的话,只要懂得
perfetto
命令行工具的用法就可以了 - 参数使用
--out
用来指定trace
输出文件,--config
用来指定配置,例如抓多长时间,间隔多久把内存数据写回文件,抓取哪些tracepoints
等等,config
文件内容,可以自己手动编写,也可以用Perfetto UI网站生成,另外在Perfetto
里面默认集成了一个test
配置,可以使用如下命令抓取一个使用test config
的trace
文件$ adb shell perfetto --config :test --out /data/misc/perfetto-traces/trace //使用内置的test配置,然后输出到/data/misc/perfetto-traces/trace
- 抓取完后,把
/data/misc/perfetto-traces/trace
文件内容 pull 出来,然后使用Perfetto UI
网站打开
- 自定义Config
- 目前最方便的配置文件生成方式是使用Perfetto UI 网站来帮助生成,点击
Record new trace
会看到有很多的配置界面 - 选择想要的
tracepoints
之后,点击Show Command
,将命令内容拷贝出来直接在终端就可以执行,完成之后把/data/misc/perfetto-traces/trace
这个文件拷贝出来进行分析
- 目前最方便的配置文件生成方式是使用Perfetto UI 网站来帮助生成,点击