需求背景
在用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。
参考:


被折叠的 条评论
为什么被折叠?



