Android Perfetto Profilers Skills 简明使用指南

Android Perfetto Profilers Skills 简明使用指南

本文简要介绍 GitHub android/skills 仓库中 profilers 目录下的两个 Perfetto 相关 Skill:perfetto-sqlperfetto-trace-analysis。重点说明它们从哪里来、分别解决什么问题、能做到什么程度,以及团队如何使用。

1. Skill 来源与定位

这两个 Skill 来自 GitHub 仓库:

text 复制代码
https://github.com/android/skills/tree/main/profilers

该目录下包含两个子 Skill:

Skill 路径 核心定位
perfetto-sql profilers/perfetto-sql 把自然语言查询需求转换成 Perfetto SQL,并用 trace_processor 执行
perfetto-trace-analysis profilers/perfetto-trace-analysis 分析 Perfetto trace,定位 Android 应用 latency、memory、jank 等问题根因

两个 Skill 都围绕 Android Perfetto trace 分析 展开。


2. 适用场景:分别用来解决什么问题

2.1 perfetto-sql:面向"查数据"

perfetto-sql 的作用是:

把用户的自然语言数据查询需求,转换成合法的 Perfetto SQL,并在本地 trace 文件上执行。

它适合解决"我要查某个数据"的问题,例如:

  • 查某个 slice 出现了多少次、总耗时多少;
  • 查某个线程在某段时间是 RunningRunnable 还是 Sleeping
  • 查某个 counter 的变化;
  • 查 CPU frequency;
  • 查 app startup 相关数据;
  • 查 memory、thread、slice 等结构化信息。

它的重点不是直接给业务结论,而是 准确取数

2.2 perfetto-trace-analysis:面向"找根因"

perfetto-trace-analysis 的作用是:

当用户提供 Perfetto trace,并提出启动慢、卡顿、jank、内存、功耗等问题时,按证据链逐步分析并定位根因。

它适合解决"为什么出问题"的问题,例如:

  • 为什么应用启动慢;
  • 为什么出现 jank;
  • 为什么某段交互卡顿;
  • 为什么内存异常;
  • 为什么功耗偏高;
  • 某个 trace 的主要性能瓶颈在哪里。

它会结合多个方向的分析线索:

  • CPU;
  • Graphics;
  • I/O;
  • IPC / Binder;
  • Memory;
  • Power。

它的重点是 基于证据链找根因


3. 能力边界:能做什么、不能做什么

3.1 可以帮助我们做什么

这套 Skill 可以帮助团队做以下事情:

场景 推荐使用
明确查询某个 trace 数据 perfetto-sql
分析启动慢 perfetto-trace-analysis
分析 jank / 卡顿 perfetto-trace-analysis
分析线程是否真的在跑 CPU perfetto-sqlperfetto-trace-analysis
分析 Binder / I/O / Lock 等等待问题 perfetto-trace-analysis
分析内存、LMK、swap、dmabuf 等问题 perfetto-trace-analysis
分析功耗、wakelock、suspend 等问题 perfetto-trace-analysis
生成可复核的问题分析报告 perfetto-trace-analysis

3.2 可以做到什么程度

这套 Skill 的目标不是"凭经验猜原因",而是:

  1. trace_processor 执行真实查询;
  2. 查询 Perfetto 标准库文档,确认表结构和字段;
  3. 通过 SQL / metrics 拿到证据;
  4. 用 scratchpad 记录 verified facts;
  5. 逐步判断线程是在运行、等 CPU、睡眠,还是被 I/O / Binder / Lock 等阻塞;
  6. 尽量沿着等待链追到 blocker;
  7. 输出可复核的分析结论。

3.3 需要注意的限制

需要注意:

  • 如果 trace 没有采集某类数据,它不能凭空分析;
  • hints 只是调查线索,不是直接结论;
  • 长 slice 不等于 CPU 忙,必须结合 thread_state 判断;
  • 最终结论必须来自实际查询结果和证据链;
  • 它不能替代工程判断,但可以显著提高定位效率和结论可复核性。

4. 使用方法:如何选择与提问

4.1 使用前需要准备什么

建议提供以下信息:

  • Perfetto trace 文件;
  • 问题类型:启动慢 / jank / 卡顿 / 内存 / 功耗 / I/O;
  • 目标 package name;
  • 复现步骤;
  • 关注时间点或时间窗口;
  • 设备型号、系统版本、构建版本;
  • 如果有对比样本,提供 good trace 和 bad trace。

4.2 如何选择 Skill

简单判断:

text 复制代码
如果问题是"查什么数据" → 用 perfetto-sql
如果问题是"为什么出问题" → 用 perfetto-trace-analysis

示例:

用户问题 应使用
"查一下 RenderThread 相关 slice 总耗时" perfetto-sql
"查主线程在 10s~12s 之间的 thread_state" perfetto-sql
"帮我分析这个 trace 为什么启动慢" perfetto-trace-analysis
"这个卡顿是不是 Binder 导致的?" perfetto-trace-analysis
"为什么内存涨了并触发 LMK?" perfetto-trace-analysis

4.3 perfetto-sql 提问模板

text 复制代码
请使用 perfetto-sql 分析 trace:/path/to/xxx.perfetto-trace
查询目标:统计名称包含 RenderThread 的 slice 数量和总耗时
要求:
1. 先确认相关 schema
2. 给出最终 SQL
3. 使用 trace_processor 执行
4. 返回结果并解释

4.4 perfetto-trace-analysis 提问模板

text 复制代码
请使用 perfetto-trace-analysis 分析 trace:/path/to/xxx.perfetto-trace
问题:应用启动慢
目标包名:com.example.app
复现步骤:点击桌面图标后进入首页
关注区间:点击图标到首页首帧完成
希望输出:
1. 关键时间线
2. 可疑进程/线程/slice
3. thread_state 证据
4. 如果线程等待,请继续追 blocker
5. 是否存在其他主要瓶颈
6. 根因结论和优化建议
7. scratchpad 文件路径

5. 分析示例:启动慢问题如何展开

下面是使用 perfetto-trace-analysis 分析启动慢问题时,一个合理的展开方式。
scratchpad trace_processor Agent 用户 scratchpad trace_processor Agent 用户 提供 trace,并说明"启动慢" 创建 xxx_analysis.md 记录证据链 阅读 CPU/Graphics/IO/IPC/Memory/Power hints 运行 android_startup metrics 返回启动阶段指标 查询启动 package 和启动时间窗口 返回 startup 相关数据 查询主线程、RenderThread 等关键线程长 slice 返回可疑 slice 查询可疑时间段 thread_state 判断线程是在 Running / Runnable / Sleeping / D-state 如果线程在等待,继续追 Binder / Lock / I/O / 其他 blocker 记录 verified facts 输出根因分析、证据链和优化建议

一个典型分析思路:

  1. 确定目标应用和启动区间

    如果用户没有给 package,需要先从 startup 数据中识别候选 package。

  2. 查看高层 metrics

    例如启动耗时、启动阶段、主要长耗时区间。

  3. 定位关键线程和可疑 slice

    重点关注主线程、RenderThread,以及启动路径上的长 slice。

  4. 查询 thread_state,区分"运行慢"还是"等待慢"

    如果是 Running,可能是 CPU 计算或执行耗时;

    如果是 Runnable,可能是等 CPU 调度;

    如果是 Sleeping,可能是在等锁、Binder 或其他事件;

    如果是 D-state,可能与 I/O 或 kernel block 相关。

  5. 如果是等待,继续追 blocker

    不能停留在"主线程卡住了",要继续看它等的是 Binder、锁、I/O,还是其他线程/进程。

  6. 排查是否还有其他主要瓶颈

    找到一个异常后,不应立即结束,需要检查是否还有独立的 CPU、I/O、Memory、Graphics 等问题。

  7. 输出结论和证据链

    最终报告应包含:关键证据、时间线、可疑线程、根因判断、优化建议和 scratchpad 路径。


6. 总结:这套 Skill 的价值

perfetto-sqlperfetto-trace-analysis 可以理解为一套组合工具:

Skill 价值
perfetto-sql 帮我们可靠地从 Perfetto trace 中查数据
perfetto-trace-analysis 帮我们基于证据链分析性能问题根因

它们的核心意义是:

  • 降低 Perfetto trace 分析门槛;
  • 避免凭经验猜测;
  • 让 SQL 查询和根因分析过程可复核;
  • 帮助测试、QA、开发围绕同一份证据链协作;
  • 适合用于 Android 启动慢、卡顿、jank、内存、功耗等问题定位。

一句话总结:perfetto-sql 负责"查清楚数据",perfetto-trace-analysis 负责"基于数据和证据链找根因"。

相关推荐
alexhilton10 小时前
Android上的ZeroMQ:用发布/订阅模式连接Linux服务
android·kotlin·android jetpack
风别鹤11 小时前
Cocos Creator无法识别Android SDK
android
应用市场11 小时前
Android A/B 无缝更新机制深度剖析
android·网络
企客宝CRM11 小时前
2026年中小企业CRM选型指南:企客宝CRM处于什么位置?
android·算法·企业微信·rxjava·crm
simplepeng12 小时前
我通过3个小改动将Compose重组减少了78%
android
应用市场13 小时前
Android分区表深度解析:GPT、各分区作用与布局实战
android·gpt
应用市场13 小时前
Android Recovery 模式工作原理与定制实战
android
应用市场16 小时前
eMMC 与 UFS 存储原理及在 Android 中的应用
android
随遇丿而安16 小时前
第4周:ImageView 最怕的不是不会显示图片,而是显示得“不对劲”
android