Ahao's Technical Blog Ahao's Technical Blog
首页
  • 001.基础篇
  • 002.玩转AOSP篇
  • 003.学穿Binder篇
  • 004.基础组件篇
  • 005.系统启动过程分析
  • 006.Hal开发入门与实践
  • 007.显示系统
  • 008.核心系统服务
  • 009.开发工具
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

阿豪讲Framework

不积跬步无以至千里
首页
  • 001.基础篇
  • 002.玩转AOSP篇
  • 003.学穿Binder篇
  • 004.基础组件篇
  • 005.系统启动过程分析
  • 006.Hal开发入门与实践
  • 007.显示系统
  • 008.核心系统服务
  • 009.开发工具
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础篇

  • 玩转AOSP篇

  • 学穿Binder篇

  • 基础组件篇

  • 系统启动过程分析

  • Hal开发入门与实践

  • 显示系统

  • 核心系统服务

  • 开发工具

    • Perfetto 上手指南1 —— Trace 的抓取
    • Perfetto 上手指南2 —— 基础使用
      • 1.进入 Perfetto Trace 分析界面
      • 2.Perfetto Trace 界面基本内容
        • 2.1 slice,片段
        • 2.2 counter,计数器
        • 2.3 CPU Sched Slice, cpu 调度片段
        • 2.4 thread_state,线程状态
      • 3 Perfetto Trace 界面基本操作
        • 3.1 常用的快捷键
        • 3.2 标记操作
        • 3.3 插旗子
        • 3.4 Pin 操作
    • Perfetto 上手指南3 —— CPU 信息分析
  • Framework
  • 开发工具
阿豪
2025-10-08
目录

Perfetto 上手指南2 —— 基础使用

# Perfetto 上手指南2 —— 基础使用

# 1.进入 Perfetto Trace 分析界面

如果是使用 record_android_trace 命令或者 Perfetto UI 抓取 Trace 后,会自动打开 Perfetto Trace 界面。

如果是使用 perfetto 命令抓取 Trace ,需要手动打开 Perfetto Trace 界面。打开的方法如下:

使用浏览器打开 https://ui.perfetto.dev/ 界面如下:

20240905214606

可以把 trace 文件直接拖到浏览器中,也可以通过左上角的 Open trace file 打开 trace 文件。

# 2.Perfetto Trace 界面基本内容

Perfetto Trace 界面大致可分为 4 个区域:

20240905220457

  • 操作区,主要用到 Current Trace 下的几个选项
    • Show timeline :显示当前 Trace,切到了别的界面之后,再点这个就会回到 Trace View 界面
    • Query:写 SQL 查询语句和查看执行结果的地方
    • Metrics:官方默认帮你写好的一些分析结果
    • Info and stats :当前 Trace 和手机 App 的一些信息
  • 信息区:时间与搜索。
  • Trace 内容区:图形化展示 Trace 的区域
  • 信息区:展示Trace 内容区中选择中的元素的详细信息

Trace 内容区中主要有以下一些元素:

# 2.1 slice,片段

20240905223944

鼠标单击后会有一个黑框包围住,信息区会显示相关信息:

20240905225317

slice 代表了一段代码的执行过程,在代码中起于 Trace.traceBegin \ ATRACE_BEGIN,终于 Trace.traceEnd \ ATRACE_END

  Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "bindApplication");
  AppBindData data = (AppBindData)msg.obj;
  handleBindApplication(data);
  Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
1
2
3
4

# 2.2 counter,计数器

用于记录一些关键数据

20240905230524

20240905230536

对应于代码中的 Trace.traceCounter/ATRACE_INT:

    ATRACE_INT(ftl::Concat("HW_VSYNC_", displayIdOpt->value).c_str(),
    displayData.vsyncTraceToggle);
1
2

# 2.3 CPU Sched Slice, cpu 调度片段

用于展示 cpu 的调度情况

20240905230803

# 2.4 thread_state,线程状态

点击片段上方线程调度信息片段(Running),可以看到线程当前运行在哪个CPU上

20240905231231

20240905231240

点击信息区中的 Running on CPU 7 旁边的斜箭头:

20240906094112

就可以跳转到 CPU 调度区域中:

20240906094611

再次点击信息区域的斜箭头,可以回到原来位置

这里选择的 thread_state 是 App 的主线程,由用户点击屏幕唤醒运行,实际很多线程都是由其他线程/进程唤醒的,比如在 CPU 调度区域中选择一个 Slice:

20240906095016

信息区右侧的意思是当前 thread 由 P(Process)/system/bin/surfaceflinger [584] 中的 T(Thread)app [689] 唤醒。

线程从就绪到运行延迟了 48us 381ns

# 3 Perfetto Trace 界面基本操作

# 3.1 常用的快捷键

  • 快捷键 f 可以放大选中。
  • 快捷键 q,可以快速打开关闭信息区。
  • 在 Trace 内容区中,可以通过 w/s 按键缩小放大界面, a/d 移动界面。

# 3.2 标记操作

标记操作可以让我们更方便的找到我们关注的 Slice,具体的,当我们选中一个片段时,点击 m,就可以做一个临时的标记,当标记另一个 Slice 以后,前一个零时标记就会取消。选中一个片段以后,如果点击 shift + m,就会添加一个普通标记,当标记另一个片段以后,普通标记不会被取消。

标记以后,会出现两个小三角:

20240906095934

点击小三角后,信息区会出现一个 remove 按键:

20240906100414

点击即可取消

# 3.3 插旗子

在上方区域的信息区中的时间轴上,点击鼠标左键,可以插上一些旗帜,这些旗帜可用用于标记一些事件的关键节点.

20250321095413

选中旗帜后,通过下方信息区域中的 remove 按键,可以取消旗帜

20250321095702

# 3.4 Pin 操作

我们可以通过 Pin 按钮,可以将这一行的信息 pin 到最上方,在我们需要了解特定一些信息时,非常有用:

20250321095825

Perfetto 上手指南1 —— Trace 的抓取
Perfetto 上手指南3 —— CPU 信息分析

← Perfetto 上手指南1 —— Trace 的抓取 Perfetto 上手指南3 —— CPU 信息分析→

最近更新
01
显示疑难问题分析基础
10-08
02
Perfetto 上手指南1 —— Trace 的抓取
10-08
03
Perfetto 上手指南3 —— CPU 信息分析
10-08
更多文章>
Theme by Vdoing | Copyright © 2020-2025 AHao Framework | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式