前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android Perfetto 系列 3:熟悉 Perfetto View

Android Perfetto 系列 3:熟悉 Perfetto View

作者头像
233333
发布2024-06-27 09:16:42
3980
发布2024-06-27 09:16:42
举报
文章被收录于专栏:linux驱动个人学习

1. Perfetto View 界面

抓到 Perfetto Trace 之后,一般是在 ui.perfetto.dev 中打开(如果用官方提供的脚本,则会在抓去结束后自动在这个网站上打开,想看看怎么实现的话可以去看看脚本的源码)。打开后界面如下:



可以通过 Open trace file 或者直接把 Perfetto Trace 拖到白色区域来打开 Trace。

2. Perfetto Trace 界面

打开 Perfetto Trace 之后界面如下:



大致上 Perfetto Trace 界面可以分为四个区域:

  1. 最右边的操作区:这里最主要的是 Current Trace 这一栏下面的那几个会经常用到。
  2. Show timeline :显示当前 Trace,切到了别的界面之后,再点这个就会回到 Trace View 界面
  3. Query:写 SQL 查询语句和查看执行结果的地方
  4. Metrics:官方默认帮你写好的一些分析结果,可以选择直接打开
  5. Info and stats :当前 Trace 和手机 App 的一些信息
  6. 上方的信息和操作区域:最主要就是看时间。
  7. 中间的 Trace 内容区:操作最多的区域,Trace 内容都在这部分,最上面的几部分是从功能的角度来划成一个区域的,比如 CPU 区(可以查看当前 Task 跑在哪个核心上,频率是多少,跑了多长时间、被谁唤醒)、Ftrace event 区等;下面的就是以 App Process 为单位展示的(包括 App 的各种线程、Input 事件、Binder Call、Memory、Buffer 等信息)。
  8. 最下方的信息区:这个区域主要是展示各种信息、我们选中了某个 Task 段之后,这里就会展示这个 Task 相关的信息(如果你加了 Log,这里也会显示 Log;ftrace event 同理)。

Perfetto 界面最初看的时候会觉得很乱,花里胡哨的,但是用习惯了之后,真香~

3. 基本操作

Perfetto Trace 界面的操作是非常顺滑的,这是相比 Systrace 的一个巨大的优势,Systrace 打开稍大的 Trace 就会卡卡的,但是 Perfetto Trace 打开 500Mb 的 Trace 依然操作很顺滑。

操作看 Trace 的快捷键跟 Systrace 很像,w/s 是放大/缩小,a/d 是左右移动,鼠标点击是选择。官方左下角的文档有详细的操作说明,忘记了的话可以随时去看看,熟能生巧:





  1. f 是放大选中
  2. m 是临时 Mark 一段区域(与 Systrace 一样), 用来上下看时间、看其他进程信息等。临时的意思就是你如果按 m 去 mark 另外一个区域,那么上一个用 m mark 出来的 Mark 区域就会消失。退出临时选中:esc ,或者选择其他的 Slice 按 m,当前这个 Slice 的选中效果就会消失



  1. shift + m 是持续 Mark 一段区域(如果你不点,他就不会消失),主要是用来长时间 Mark 住一段信息,比如你把一份 Trace 中所有的掉帧点都 Mark 出来,就可以用 shift + m,这样就不会丢失。



点击小旗子,就可以看到这段区间内的执行信息

4.删除持续 Mark

  1. 点击你选中的那个 Slice 的最上面那个三角
  2. 下面选择 Tab:Current Selection
  3. 点击最后边的 Remove ,就可以把他 Remove 掉了



  1. q :隐藏和显示信息 Tab,由于 Perfetto 非常占屏幕,熟练使用 q 键很重要,看的时候快速打开,看完后快速关闭。
  2. 插旗子:Perfetto 还可以通过插旗子的方法来在 Trace 上做标记,Perfetto 支持你把鼠标放到 Trace 最上面,就会出现一个旗子,点击左键即可插一个旗子在上面,方便我们标记某个事件发生,或者某个时间点



4. Perfetto 使用技巧

我们可以通过查看某一个 Task 的唤醒源,来了解 App 和 Framework 的运转流程,Systrace 和 Perfetto 都可以查看唤醒源,不过 Perfetto 在这方面做的更丝滑一些。

Android Systrace 响应速度实战 3 :响应速度延伸知识 这篇文章中,有讲 Systrace 是如何查看唤醒源的,其实略微还是有些麻烦的。 Perfetto 中查看唤醒源则非常方便且操作很顺滑:

比如我们想看下图中, RenderThread 是被谁唤醒的,我们可以有好几种方法:

  1. Waker:唤醒源
  2. Previous state:这个 Task 的前一个状态
  3. Next state:这个 Task 的后一个状态



4.0 点击 Runnable 状态

与 Systrace 操作一样,直接点击 Running 前面的 Runnable,就可以在下面的信息区看到 Related thread states:

  1. Waker:唤醒源
  2. Previous state:这个 Task 的前一个状态
  3. Next state:这个 Task 的后一个状态

4.1 点击他上方的 Running 状态,查看连续唤醒信息:

或者我们可以点击 Running 状态,点击小箭头直接跳到对应的 CPU Info 区域,这里可以看到更详细的信息,也可以连续点击 Task,来追踪唤醒源,并可以通过信息区的小箭头来回在 CPU Info 区域和 Task 区域跳转

点击 RenderThread 上方的 Running 状态,通过小箭头跳转到 CPU Info 区域



RenderThread 是被 MainThread 唤醒



再点击 MainThread 可以看到他是被 SurfaceFlinger 唤醒的,下方信息区还有对应的唤醒延迟分析

4.2 查看 Critical Path(Task)

Critical Task 指的是与当前我们选中的 Task 有依赖关系的 Task,比如我们的 Task 是 e,e 要等 d 执行结束后才能执行,d 要等 c,c 要等 b,b 要等 a,那么 e 的 Critical Task 就是 a、b、c、d。

Perfetto 上就可以查看某一个 Task 的 Critical Task,鉴于 Critical path lite 是 Critical path 的子集,我们这里只介绍 Critical path:

点击 Running 状态,然后点击在下面的信息区点击 Critical path



稍等片刻就可以看到我们选择的 MainThread 对应的 Critical path:



再往左看 sf 的 app 线程是被 sf 的 TimerDispatch 线程唤醒的,这里就不贴了。

其实可以看到,Perfetto 提供的 Critical Path 其实就是把连续唤醒的 Task 都聚集到一起了,方便我们来看各个 Task 之间的关系。

4.3 Pin (固定到最上面)

在每个 Thread 的最左边,有一个图钉一样的按钮,点击之后,这个 Thread 就会被固定到最上面,方便我们把自己最关注的 Thread 放到一起。



比如下面是我 Pin 的从 App 到 SF 的流程图,放到一起的话就会清晰很多,看掉帧的话也会更方便。

4.4 CPU Info 区域 Task 高亮

在 CPU Info 区域,鼠标放到某一个 Task 上,就会这个 Task 对应的 Thread 的其他 Task 都会高亮。

我们经常会用这个方法来初步看某些 Thread 的摆核信息



4.5 查看 Buffer 消耗情况

App 的 Buffer 消费者是 SurfaceFlinger,通过 App Process 这边的 Actual Timeline 这行,我们可以看到 Buffer 具体是被 SurfaceFlinger 的哪一框消费了。



4.6 快速查看 App 执行超时

由于 Android 多 Buffer 机制的存在,App 执行超时不一定会卡顿,但是超时是需要我们去关注的。

通过 Perfetto 提供给的 Expected Timeline 和 Actual Timeline 这两行,可以清楚看到执行超时的地方。





4.7 在 Perfetto 上查看 Log

在信息栏上切换到 Android Logs 这个 Tab,鼠标放倒某一行上,Perfetto 就会把对应的 Timeline 拉一条直线,可以看到这个 Log 所对应的时间



同样切换到 Ftrace events tab 也可以查看对应的 ftrace 的 event 和对应的时间线



4.8 分析 Thread 的 Running 信息

可以通过鼠标左键按住滑动,选中一段区域来进行分析,比如选中 CPU State 这一栏的话,就可以看到这一段时间对应的 Running、Runnable、Sleep、Uninterruptible Sleep 的占比。

这在分析 App 启动的时候经常会用到。



本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Perfetto View 界面
  • 2. Perfetto Trace 界面
  • 3. 基本操作
  • 4. Perfetto 使用技巧
    • 4.0 点击 Runnable 状态
      • 4.1 点击他上方的 Running 状态,查看连续唤醒信息:
        • 4.2 查看 Critical Path(Task)
          • 4.3 Pin (固定到最上面)
            • 4.4 CPU Info 区域 Task 高亮
              • 4.5 查看 Buffer 消耗情况
                • 4.6 快速查看 App 执行超时
                  • 4.7 在 Perfetto 上查看 Log
                    • 4.8 分析 Thread 的 Running 信息
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档