Perfetto使用

概述

  • Android 9.0(API级别28)或更高版本的设备上,可以使用 System TracingSystem App 在设备上记录系统跟踪
  • Perfetto 工具是Android下一代全新的统一的 trace 收集和分析框架,可以抓取平台和app的 trace 信息,是用来取代 systrace 的,但 systrace 由于历史原因也还会一直存在,并且 Perfetto 抓取的 trace 文件也可以同样转换成 systrace 视图,如果习惯用 systrace 的,可以用 Perfetto UIOpen 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 TracingRecord 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 网站打开查看
  • 命令行工具
    • perfetto 是一个命令行工具,在shell环境下执行,同时在手机端也有两个进程: tracedtraced_probes,这两个进程运行在手机端,可能需要执行如下命令才会开启这两个进程,开启这两个进程之后,才能正常抓取trace信息
      adb shell setprop persist.traced.enable 1
      
    • 如果只是使用这个工具的话,只要懂得 perfetto 命令行工具的用法就可以了
    • 参数使用
      • --out 用来指定 trace 输出文件,--config 用来指定配置,例如抓多长时间,间隔多久把内存数据写回文件,抓取哪些 tracepoints 等等,config 文件内容,可以自己手动编写,也可以用Perfetto UI网站生成,另外在 Perfetto 里面默认集成了一个 test 配置,可以使用如下命令抓取一个使用 test configtrace 文件
        $ 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 这个文件拷贝出来进行分析
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值