体验Perfetto高级知识之command自动化配置相关

需求背景

在用Perfetto UI分析一些性能问题的时候,经常会采用pin 固定置顶一些track到Perfetto UI的顶部,这样可以方便分析对比。
在这里插入图片描述
因为我们平时Perfetto分析问题时候,都是手动挨个Track进行pin置顶,其实经常分析问题时候要pin置顶的Track其实都是非常固定。比如cpu调度情况,cpu频率等,但是每次导入Perfetto文件就需要固定的做这些置顶操作确实有点麻烦。

那么有没有Perfetto可以自动化根据我们配置的置顶的Track初始化就帮我们置顶好相关的Track呢?这块其实Perfetto官方是有进行相关的支持,下面我们来看看应该如何配置自动化的置顶相关Track。

自动化配置命令相关实战

1、 首先找到自动化启动命令的入口:
Settings > Startup Commands.
在这里插入图片描述
2、编写相关的command
Startup Commands的格式实际上是一个json的数组

[
  {"id": "command.id", "args": ["arg1", "arg2"]}
]

PinTracks编写

先给出最简单的command,置顶一下CPU【0-3】相关的

[
  {
    "id": "dev.perfetto.PinTracksByRegex",
    "args": [".*CPU [0-3].*"]
  }
]

注意核心部分是
“args”: [“.CPU [0-3].”]
这里支持正则表达式方式过滤,这里就是过滤一下Cpu 0 -3号的所有Track。
效果如下图:

在这里插入图片描述常见一些写法

Pin CPU tracks: ".*CPU \\d+$"
Pin specific process: ".*com\\.example\\.app.*"
Pin multiple processes: ".*(system_server|surfaceflinger).*"

Debug Track 命令

从 SQL 查询创建自定义可视化 tracks。Debug tracks 叠加在 Timeline 上,并在视图更改时自动更新。

重要:
如果你的查询使用 Perfetto 模块(例如,android.screen_state、android.memory.lmk),你必须首先执行带有模块 include 语句的 RunQuery 命令,然后才能创建 debug track。模块 include 必须位于命令序列中的第一位。

dev.perfetto.AddDebugSliceTrack
从返回时间间隔的 SQL 查询创建 slice track。

参数:

query (string, required): 必须返回以下内容的 SQL 查询:
ts (number): 时间戳(纳秒)
dur (number): 持续时间(纳秒)
name (string): 要显示的 slice 名称
title (string, required): track 的显示名称

案例

{
  "id": "dev.perfetto.AddDebugSliceTrack",
  "args": [
    "SELECT ts, dur, name FROM slice WHERE dur > 10000000 ORDER BY dur DESC LIMIT 100",
    "Long Slices (>10ms)"
  ]
}

在这里插入图片描述

启动命令和录制结合 Combining with trace recording

When recording traces, specify startup commands that run when the trace opens:
可以在使用命令录制trace时候加上对应的–ui-startup-commands 参数,从而实现对

./record_android_trace \
  --app com.example.app \
  --ui-startup-commands '[
    {"id":"dev.perfetto.PinTracksByRegex","args":[".*CPU.*"]}}
  ]'

注意这里record_android_trace一定要使用高版本的才可以支持–ui-startup-commands参数,老版本比如aosp15版本都还不支持。

马哥这边基于aosp16的record_android_trace脚本测试结果如下:

测试到一个大bug

本来想吧InputDispatcher这个线程相关的track都置顶,相关的command编写如下:

[
  {
    "id": "dev.perfetto.PinTracksByRegex",
    "args": [
      ".*InputDispatcher.*"
    ]
  }
]

发现Perfetto的UI显示异常,完全看不见完整InputDispatcher的内容,只看到一个空白的InputDispatcher的trace

在这里插入图片描述

希望广大网友粉丝提供思路哈,是配置不对,还是说就是bug这个问题也准备给Perfetto官方进行report a bug。

参考:

https://mp.weixin.qq.com/s/gC3e0xjQYM_hOzQw2Pfb8w

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值