首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android Perfetto 系列 3:熟悉 Perfetto View

Android Perfetto 系列 3:熟悉 Perfetto View

作者头像
233333
发布于 2024-06-27 01:16:42
发布于 2024-06-27 01:16:42
1.2K0
举报

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 删除。

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

评论
登录后参与评论
7 条评论
热度
最新
很细致,正在学习搭建部署中。。。
很细致,正在学习搭建部署中。。。
回复回复点赞举报
谢谢分享
谢谢分享
回复回复点赞举报
能不能再具体讲解一下呢,环境部署那块不是很清楚
能不能再具体讲解一下呢,环境部署那块不是很清楚
11点赞举报
有问题可以随时提出来的,我可以解答!
有问题可以随时提出来的,我可以解答!
回复回复点赞举报
谢谢分享
谢谢分享
回复回复点赞举报
学习了
学习了
回复回复点赞举报
很好的集群搭建文档,学习了
很好的集群搭建文档,学习了
回复回复点赞举报
推荐阅读
ubuntu VCS+verdi安装教程
链接:https://pan.baidu.com/s/1EWX8PulBncy9bjwW_mySIg
FPGA开源工作室
2021/05/31
10.9K3
ubuntu VCS+verdi安装教程
连接远程Ubuntu服务器的MySQL
-u 表示选择登陆的用户名, -p 表示登陆的用户密码,现在是mysql数据库是没有密码的,Enter password:处直接回车,就能够进入mysql数据库【默认不要密码】
暖月寒星
2020/03/12
4.7K0
ZFile 安装文档
最近开发了一个在线网盘程序 ZFile, 支持各种对象存储、OneDrive、FTP、本地存储. 本文包含普通用户和宝塔用户的安装方式.
一份执着✘
2020/02/14
2.6K0
ZFile 安装文档
Debian 使用 iptables-persistent 持久化 iptables 规则
RedHat系列下有比较好用的iptables管理工具,可以像控制服务进程一样来对防火墙进行管理及控制,Debian系发行版默认不开启iptables,当然也没有与之相关的能直接管理的工具了。
Debian中国
2018/12/20
3.8K0
如何在UFW、FirewallD、IPTable为Docker Swarm集群配置防火墙
Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。
何处惹尘埃
2018/07/13
2.5K0
[译]使用iptables控制网络流量
iptables是一个允许用户配置特定规则的应用程序,这些规则由将由内核netfilter框架强制执行。它充当数据包过滤器和防火墙,可根据端口,协议和其他标准检查和定向流量。本指南将重点介绍iptables规则集的配置和应用,并提供常用方法的示例。
杜逸先
2018/08/30
7.4K0
Ubuntu 服务器安装远程 Rstudio(图文详解)
相信大家都用过本地版的 Rstudio,也时常被电脑卡死所困扰,也有用自己笔记本处理单细胞数据内存不够的 error,怎么解决?
白墨石
2021/10/28
4.1K0
Ubuntu 服务器安装远程 Rstudio(图文详解)
手把手教你配置在线版 Rstudio(图文详解)
相信大家都用过本地版的 Rstudio,也时常被电脑卡死所困扰,也有用自己笔记本处理单细胞数据内存不够的 error,怎么解决?
生信菜鸟团
2021/10/21
4.6K0
手把手教你配置在线版 Rstudio(图文详解)
只允许特定的IP访问特定的端口
chuchur
2024/11/21
7810
如何在Debian上安装MongoDB
MongoDB是一个免费的开源NoSQL文档数据库,在现代Web应用程序中常用。本教程将帮助您在服务器上安装MongoDB,以便在生产应用环境中使用。您将安装MongoDB并配置防火墙规则以限制对MongoDB的访问。对于生产环境的服务器,我们建议您使用腾讯云云关系型数据库,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。
爆栈工程师
2018/08/02
2.5K0
在 Debian 10 上独立安装MySQL数据库
有很多VPS的客户并不是全部都喜欢宝塔系统,所以我们单独测试了此模式用于很多客户的数据备份,具体安装细节如下:
Nyarime
2022/06/12
2.9K0
在 Debian 10 上独立安装MySQL数据库
如何在Ubuntu 14.04上使用Iptables实现基本防火墙模板
实施防火墙是保护服务器的重要一步。其中很大一部分是在于对您的网络实施流量限制有决定性作用的个别规则和政策。防火墙iptables也允许您对应用规则的结构框架有发言权。
彼岸轮回
2018/09/28
1.3K0
iptables网络数据包工具使用指南,入门使用详解
iptables是 Linux系统中用于管理网络包过滤的工具。它可以用来设置规则,以控制网络数据包的流动。iptables可以用于防火墙、网络地址转换(NAT)和网络包过滤等多种用途。
Mintimate
2023/07/28
2.8K0
iptables网络数据包工具使用指南,入门使用详解
Docker 容器已经运行的情况下,如何对外暴露端口
运维时,你可能会遇到这样的问题,那就是Docker 容器已经运行的情况下,我希望宿主机外的程序,比如数据库客户端,能够连接容器内部的端口,如数据库端口。
somenzz
2024/04/01
3.4K0
Docker 容器已经运行的情况下,如何对外暴露端口
[原创]远程服务环境与本地环境互联
  谈到“异地组网”这个问题,其实已经有很多成熟的解决方案,包括最简单的拉光纤物理相连、向日葵异地组网等等。这些解决方案虽然稳定性和使用体验都极度让人舒适,但是实现的代价略微有点大,尤其财大气粗的光纤物理直接相连。不过对于某些大公司的异地数据中心互联,这仍然是最被认可的解决方案。至于向日葵异地组网,有点类似于把远程服务环境和本地环境同时连入一个网络,然后在形式上实现局域网化。由于这一解决方案往往依赖于一个由第三方提供的中心节点服务,这种局域网的带宽、速度和使用体验很大程度上受限于购买的套餐级别。那么,是否存在一种造价较低,速度和使用体验都较佳的解决方案呢?答案自然是存在的,只是有点曲线而已。
zhonger
2022/10/28
1.8K0
[原创]远程服务环境与本地环境互联
Ubuntu 服务器版 Iptables 基本设置指南
原文出处:https://wiki.ubuntu.com/IptablesHowTo
全栈程序员站长
2022/07/05
1.4K0
Debian9安装Proxmox VE/挂载新盘/单IP设置Nat转发-xinai.de
Debian9 安装Proxmox VE/挂载新盘/单IP设置Nat转发 最近跟着廖和我大哥购置了法国杜甫,用Proxmox VE生小鸡,主机商有提供Proxmox VE和RAID,但是本人有点一根筋,然后自己折腾了Proxmox VE。 [Proxmox-Installation.png] 一:Debian9 安装Proxmox VE 最近感觉GG搜索也垃圾了,特别是中文类关键字(吐槽),还是看官网wiki吧 https://pve.proxmox.com/wiki/Install_Proxmox_V
小沨
2020/04/24
2.9K0
Debian9安装Proxmox VE/挂载新盘/单IP设置Nat转发-xinai.de
debian bullseye iptables 配置持久化
在Debian 11中,iptables规则可以通过使用iptables-persistent包进行持久化。以下是一个如何安装并使用它的步骤:
宋天伦
2023/10/21
9510
如何在Ubuntu上搭建饥荒服务器
饥荒(英语:Don't Starve,直译为别饿死)是一款由加拿大公司Klei Entertainment开发的开放世界生存游戏。这个游戏围绕在一位名叫Wilson的科学家,他发现自己身处黑暗阴暗的世界,必须尽可能长时间生存。为此,玩家必须保持Wilson的健康、食物和精神稳定来避免了各种超现实和超自然的敌人杀死和吞噬他。
圣人惠好可爱
2018/08/14
13.8K6
如何在Ubuntu上搭建饥荒服务器
甲骨文实例开通与X-UI安装
  名称随意;主机填写公共IP地址,端口默认22;认证方式选择公钥;用户名ubuntu;
吴蛋蛋
2023/03/14
2.8K0
甲骨文实例开通与X-UI安装
推荐阅读
相关推荐
ubuntu VCS+verdi安装教程
更多 >
LV.1
FCLASSROOM运维开发
目录
  • 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 归档