Android Perfetto 系列 3:熟悉 Perfetto View

news/2024/10/5 19:15:41/文章来源:https://www.cnblogs.com/linhaostudy/p/18269273

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 启动的时候经常会用到。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/731645.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity3d ECS 动态创建系统

由于需要对System做热更,所以System不能随主程序打包,使用的hybridclr插件编译后需要使用程序集加载的方式进行Dll注入 要执行该操作则需要在代码中进行System的管理 使用的ECS版本 跟随教程 设置不让自动初始化的宏 在自己的脚本中var world = DefaultWorldInitialization.I…

大型国民老牌药品医疗企业如何借助实时数仓冲破数据孤岛桎梏,拥抱数据驱动的经营管理模式

本文将以某国民老牌药企的数据集成实践为案例,详解如何借助实时数仓打破数据孤岛,实现数据驱动、消费者导向的经营管理模式。为企业提供优化数据管理和业务决策的参考。使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量代替 OGG、DSG 等同步工具,「CDC …

MoneyPrinterPlus:AI自动短视频生成工具-微软云配置详解

详细介绍如何使用在MoneyPrinterPlus中配置使用微软云语音服务,实现AI自动短视频生成。MoneyPrinterPlus可以使用大模型自动生成短视频,我们可以借助Azure提供的语音服务来实现语音合成和语音识别的功能。 Azure的语音服务应该是我用过的效果最好的服务了,微软还得是微软。 …

Camera基础知识

1. 摄像头组成 摄像头通常由以下几个主要组成部分构成:镜头(lens)、传感器(sensor)、软板(FPC)、图像处理芯片(DSP)。决定一个摄像头好坏的重要部件是:镜头(lens)、图像处理芯片 (DSP)、传感器(sensor) 2. 摄像头采样与格式 YUV 是一种颜色编码方法,和它等同的还…

Linux OpenGrok搭建

OpenGrok是一个源码搜索及交叉引用查询引擎,OpenGrok的引入可以帮助我们更好地在浩如烟海的源码里找到自己需要的那坨代码。目录一、目的二、环境三、相关概念3.1 OpenGrok3.2 CTags3.3 Tomcat四、OpenGrok搭建4.1 安装jdk4.2 安装ctags依赖4.3 安装universal-ctags4.3.1 下载…

22.5万奖金池丨Higress AI 网关编程挑战赛启动

2024 天池云原生编程挑战赛 6 月 12 日正式启动,8 月 28 日线下决赛,9 月公布最终参赛结果,奖金池合计 22.5 万,共计三个赛道,面向全社会开放。《使用 Higress AI 网关优化 AI 调用成本》是第二赛道。AI 原生应用,对网关的需求已经超越了传统的路由和负载均衡功能,还需要…

alembic数据库迁移工具

Alembic 使用 SQLAlchemy 作为底层引擎,为关系数据库提供变更管理脚本的创建、管理和调用。 安装alembicpip install alembic 2、初始化alembic环境命令: alembic init alembic 3、修改配置和环境 此处修改两个地方: 1 alembic.ini 将url修改为你要连接的数据库地址 2 修…

Hexo自动部署

作者: 時光 来源: 時光的博客园子 原文: https://blog.shiguang666.eu.org/2024/06/24/49078ab077e1Hexo自动部署 为了简化Hexo部署过程,你可以使用持续集成工具(如 GitHub Actions)来实现自动化部署。GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,允许你自动化你…

SQLAlchemy的数据库引擎

任何SQLAlchemy应用程序的开始都是一个名为 Engine . 此对象充当连接到特定数据库的中心源,提供工厂和称为 connection pool 对于这些数据库连接。引擎通常是一个只为特定数据库服务器创建一次的全局对象,并使用一个URL字符串进行配置,该字符串将描述如何连接到数据库主机或…

Butterfly主题配置及美化

作者: 時光 来源: 時光的博客园子 原文: https://blog.shiguang666.eu.org/2024/06/24/a334c4683866/Butterfly主题配置及美化 Butterfly主题介绍官方文档:Hexo Butterfly 主题官方文档 GitHub 仓库:Hexo Butterfly 主题 GitHub 仓库Hexo官网上面有非常多好看的主题,你可以选…

概率释疑 | 高一层次

人教2019 A版概率中的问题释疑前言 疑难廓清 ✍️【人教 2019A 版教材 \(P_{246}\) 习题 \(10.1\) 第 \(4\) 题】判断下列说法是否正确.若错误,请举出反例. (1). 互斥的事件一定是对立事件,对立事件不一定是互斥事件; (2). 互斥的事件不一定是对立事件,对立事件一定是互斥…

[Triton课程笔记] 2.1.4 Backend-build

课程链接:https://www.bilibili.com/video/BV1Fa411G75m/?spm_id_from=333.788&vd_source=c2a322357481107ab7f418b1ae9ce618 一、build写CMakeLists.txt文件; 写cmake/TritonYourBackendConfig.cmake.in 文件; 将pytorch_backend/src/libtriton_pytorch.ldscript 拷贝…