Home > IT > Article

SmartPerfetto 开源:面向 Android Trace 分析的 Perfetto AI Assistant

2026-10-30  ·  Views: 223
  • 滑动卡顿:识别掉帧帧、VSync 超预算、App/SF/GPU 责任侧、主线程和 RenderThread Status。
  • 启动实力:拆分冷启动、温启动、生命周期阶段、主线程耗时、Binder、类加载、GC、IO。
  • ANR:定位主线程阻塞、Binder 对端、锁等待、调度延迟和操作系统Loss载。
  • 交互延迟:从 input event 到 frame production,再到 display 的时段分解。
  • 内存和 GC:观察 GC pause、内存压力、LMK、dmabuf、系统内存Status。
  • 渲染管线:识别 Standard View、Compose、Flutter、WebView、SurfaceView、TextureView、大作、Vulkan 等路径。

它不替代表现工程师。trace 采集品质、业务上下文、设备差异、复现topics件仍然要人判断。SmartPerfetto 更像一个能稳定跑 SQL、整理表格、按策略检查遗漏项的分析助手。

运行截图

实际运行时,AI Assistant 可以作为 Perfetto UI 里的浮动窗口出现,也可以和时刻线、场景标记、分析报告一起工作。使用者加载 trace 后,在同一个界面里完成提问、工具调用、证据展开和结论复核。

SmartPerfetto 运行截图:AI Assistant 浮动窗口

浮动窗口适合在不离开 Perfetto Time线的情况下追问。窗口里保留当前对话、场景入口、历史会话和输入框,适合边看 trace 边确认下一步分析方向。

SmartPerfetto 运行截图:Agent 对话Time线

对话时段线会记录 Agent 初始化、规划Submit、Skill 调用、SQL 查询和统计结果详情获取。最终结论之外,中间动作也能回看。

SmartPerfetto 运行截图:结构化分析报告

分析报告会把启动事件、数字做工、阶段耗时、可疑片段和建议整理到同一份结果里,方便从自然Language结论回到具体证据。

SmartPerfetto 运行截图:根因定位与证据表格

根因定位会尽量把判断落回线程、时刻、SQL 结果和 trace 片段。工程师仍然需要结合业务上下文复核,但不用从空白 SQL 开始翻。

整体架构

SmartPerfetto 的主干架构可以分成三层:前端仍是 Perfetto UI,后端Loss责编排 Agent 和工具,统计结果查询交给 Perfetto 官方的 trace_processor_shell。

SmartPerfetto 开源架构

这张架构图里有几topics边界要看清:

  • 前端不直接分析 trace,只Loss责加载 trace、展示Time线、Send难题、接收 SSE 事件和渲染结果。
  • 后端的 agentv3 是主运行时,Loss责场景识别、Prompt 组装、MCP 工具注册、Verifier 检查和报告生成。
  • trace_processor_shell 仍然是统计结果查询引擎,所有性能数字都来自 SQL 或 Skill 里的确定性计算。
  • YAML Skill Loss责把常见分析流程封装成可复用单元,Agent 不需要每次从零写复杂 SQL。

这个造型背后的判断很直接:大模型适合理解问题、选择方向、组织因果关系; 统计结果库和 Skill 适合做查询、统计、分页、格式化和重复执行。

Skill:把表现经验写成可执行分析单元

SmartPerfetto 没有把所有分析逻辑都写GF TypeScript,也没有让大模型自由拼 SQL。大量领域逻辑放在 YAML Skill 里。

一个 Skill 可以声明输入参数、前置表、SQL、显示列、分层输出、topics件分支、iterator 和并行步骤。Agent 只需要调用:

1
invoke_skill("scrolling_analysis", { process_name: "com.example.app" })

后端的 Skill Engine 会执行对应的 SQL 和组合步骤,并把结果Packaging成前端能渲染的 DataEnvelope。这样做有三个好处:

SmartPerfetto YAML Skill 运行时

  • 结果可重复:同一个 trace、同一组参数,Skill 的计算路径稳定。
  • 输出可展示:列名、统计结果类型、时刻戳跳转、duration 格式化都在 Skill 里声明。
  • 贡献成本低:熟悉 Perfetto SQL 的实力工程师可以改 YAML 和 SQL,不必先理解完整后端代码。

当前 Skill 分布是:

类型规模位置用途
Atomic87backend/skills/atomic/单项 SQL 查询,例如 CPU 频率、Binder、GC、FrameTimeline
Composite29backend/skills/composite/多步骤分析,例如 scrolling_analysis、startup_analysis、anr_analysis
Deep2backend/skills/deep/调用栈和 CPU profiling 等深度分析
Pipeline29backend/skills/pipelines/渲染管线检测和教学内容
Module18backend/skills/modules/app/framework/kernel/hardware 分层专家模块

这套 Skill 系统属于 SmartPerfetto 运行时能力,和研发工具里的 Skill 分开看。Claude Code Skill 帮开发者写 SmartPerfetto; SmartPerfetto YAML Skill 帮用户分析 trace。两者名字相近,运行位置、输入输出和方向都不同。

MCP:让 Agent 只通过工具接触 trace

SmartPerfetto 通过 MCP (Model Context Protocol) 给 Agent 暴露工具。Full 模式下最多 20 个工具,Fast 模式下只保留 3 个轻量工具。

常用工具分几类:

SmartPerfetto MCP 工具地图

  • 数据访问:execute_sql、invoke_skill、list_skills、lookup_sql_schema、query_perfetto_source、list_stdlib_modules、lookup_knowledge、detect_architecture。
  • 规划和假设:submit_plan、update_plan_phase、revise_plan、submit_hypothesis、resolve_hypothesis、flag_uncertainty。
  • 结果管理:fetch_artifact、write_analysis_note、recall_patterns。
  • 比较分析:execute_sql_on、compare_skill、get_comparison_context。

其中 execute_sql 和 invoke_skill 有计划门控。Agent 必须先Submit分析规划,才能开始查数据。这个门控不追求把流程写死,而是要求 Agent 在动手前声明阶段、目标和预期工具,后续 Verifier 再检查关键动作是否缺GA。

工具返回的统计结果也会被压缩和分层。大结果会GF入 Artifact Store,Agent 先拿摘要,必要时再分页取行。这样可以避免一次 Skill 输出几十万 token,把上下文耗尽。

从提问到结论的流程

用户输入一句「分析滑动卡顿」后,SmartPerfetto 不会直接把 trace 发给大模型。trace 文件不会GF入 prompt,Agent 接触到的是工具返回的结构化结果。

SmartPerfetto 从提问到结论的分析流程

一topics滑动卡顿分析通常会经过这些步骤:

This article is published by News for reference only.
1234
Loading comments…

LinksApply

Alliance Network53