Android Perfetto 系列 3:熟悉 Perfetto View
1. Perfetto View 界面
抓到 Perfetto Trace 之后,一般是在 ui.perfetto.dev 中打开(如果用官方提供的脚本,则会在抓去结束后自动在这个网站上打开,想看看怎么实现的话可以去看看脚本的源码)。打开后界面如下:
可以通过 Open trace file 或者直接把 Perfetto Trace 拖到白色区域来打开 Trace。
2. Perfetto Trace 界面
打开 Perfetto Trace 之后界面如下:
大致上 Perfetto Trace 界面可以分为四个区域:
- 最右边的操作区:这里最主要的是 Current Trace 这一栏下面的那几个会经常用到。
- Show timeline :显示当前 Trace,切到了别的界面之后,再点这个就会回到 Trace View 界面
- Query:写 SQL 查询语句和查看执行结果的地方
- Metrics:官方默认帮你写好的一些分析结果,可以选择直接打开
- Info and stats :当前 Trace 和手机 App 的一些信息
- 上方的信息和操作区域:最主要就是看时间。
- 中间的 Trace 内容区:操作最多的区域,Trace 内容都在这部分,最上面的几部分是从功能的角度来划成一个区域的,比如 CPU 区(可以查看当前 Task 跑在哪个核心上,频率是多少,跑了多长时间、被谁唤醒)、Ftrace event 区等;下面的就是以 App Process 为单位展示的(包括 App 的各种线程、Input 事件、Binder Call、Memory、Buffer 等信息)。
- 最下方的信息区:这个区域主要是展示各种信息、我们选中了某个 Task 段之后,这里就会展示这个 Task 相关的信息(如果你加了 Log,这里也会显示 Log;ftrace event 同理)。
Perfetto 界面最初看的时候会觉得很乱,花里胡哨的,但是用习惯了之后,真香~
3. 基本操作
Perfetto Trace 界面的操作是非常顺滑的,这是相比 Systrace 的一个巨大的优势,Systrace 打开稍大的 Trace 就会卡卡的,但是 Perfetto Trace 打开 500Mb 的 Trace 依然操作很顺滑。
操作看 Trace 的快捷键跟 Systrace 很像,w/s 是放大/缩小,a/d 是左右移动,鼠标点击是选择。官方左下角的文档有详细的操作说明,忘记了的话可以随时去看看,熟能生巧:
- f 是放大选中
- m 是临时 Mark 一段区域(与 Systrace 一样), 用来上下看时间、看其他进程信息等。临时的意思就是你如果按 m 去 mark 另外一个区域,那么上一个用 m mark 出来的 Mark 区域就会消失。退出临时选中:esc ,或者选择其他的 Slice 按 m,当前这个 Slice 的选中效果就会消失
- shift + m 是持续 Mark 一段区域(如果你不点,他就不会消失),主要是用来长时间 Mark 住一段信息,比如你把一份 Trace 中所有的掉帧点都 Mark 出来,就可以用 shift + m,这样就不会丢失。
点击小旗子,就可以看到这段区间内的执行信息
4.删除持续 Mark
- 点击你选中的那个 Slice 的最上面那个三角
- 下面选择 Tab:Current Selection
- 点击最后边的 Remove ,就可以把他 Remove 掉了
q :隐藏和显示信息 Tab,由于 Perfetto 非常占屏幕,熟练使用 q 键很重要,看的时候快速打开,看完后快速关闭。
插旗子:Perfetto 还可以通过插旗子的方法来在 Trace 上做标记,Perfetto 支持你把鼠标放到 Trace 最上面,就会出现一个旗子,点击左键即可插一个旗子在上面,方便我们标记某个事件发生,或者某个时间点
4. Perfetto 使用技巧
我们可以通过查看某一个 Task 的唤醒源,来了解 App 和 Framework 的运转流程,Systrace 和 Perfetto 都可以查看唤醒源,不过 Perfetto 在这方面做的更丝滑一些。
在 Android Systrace 响应速度实战 3 :响应速度延伸知识 这篇文章中,有讲 Systrace 是如何查看唤醒源的,其实略微还是有些麻烦的。 Perfetto 中查看唤醒源则非常方便且操作很顺滑:
比如我们想看下图中, RenderThread 是被谁唤醒的,我们可以有好几种方法:
- Waker:唤醒源
- Previous state:这个 Task 的前一个状态
- Next state:这个 Task 的后一个状态
4.0 点击 Runnable 状态
与 Systrace 操作一样,直接点击 Running 前面的 Runnable,就可以在下面的信息区看到 Related thread states:
- Waker:唤醒源
- Previous state:这个 Task 的前一个状态
- 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 启动的时候经常会用到。
Android Perfetto 系列 3:熟悉 Perfetto View的更多相关文章
- Android画图系列(二)——自己定义View绘制基本图形
这个系列主要是介绍下Android自己定义View和Android画图机制.自己能力有限.假设在介绍过程中有什么错误.欢迎指正 前言 在上一篇Android画图系列(一)--自己定义View基础中我们 ...
- Android设计模式系列
http://www.cnblogs.com/qianxudetianxia/category/312863.html Android设计模式系列(12)--SDK源码之生成器模式(建造者模式) 摘要 ...
- Android学习系列(37)--App调试内存泄露之Context篇(下)
接着<Android学习系列(36)--App调试内存泄露之Context篇(上)>继续分析. 5. AsyncTask对象 我N年前去盛大面过一次试,当时面试官极力推荐我使用AsyncT ...
- Android UI系列-----时间、日期、Toasts和进度条Dialog
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
- Android学习系列(23)--App主界面实现
在上篇文章<Android学习系列(22)--App主界面比较>中我们浅略的分析了几个主界面布局,选了一个最大众化的经典布局.今天我们就这个经典布局,用代码具体的实现它. 1.预览图先看下 ...
- 【转】Android UI系列-----时间、日期、Toasts和进度条Dialog
原文网址:http://www.cnblogs.com/xiaoluo501395377/p/3421727.html 您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注 ...
- 史上最详细的Android Studio系列教程一--下载和安装
链接地址:http://segmentfault.com/a/1190000002401964#articleHeader4 原文链接:http://stormzhang.com/devtools/2 ...
- Android自定义控件系列之基础篇
一.概述 在android开发中很多UI控件往往需要进行定制以满足应用的需要或达到更加的效果,接下来就通过一个系列来介绍自定义控件,这里更多是通过一些案例逐步去学习,本系列有一些典型的应用,掌握好了大 ...
- Android自定义控件系列之应用篇——圆形进度条
一.概述 在上一篇博文中,我们给大家介绍了Android自定义控件系列的基础篇.链接:http://www.cnblogs.com/jerehedu/p/4360066.html 这一篇博文中,我们将 ...
- Android学习系列(18)--App工程结构搭建
本文算是一篇漫谈,谈一谈关于Android开发中工程初始化的时候如何在初期我们就能搭建一个好的架构. 关于android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的 ...
随机推荐
- 安卓网络通信之 HttpURLConnection 文件上传
文件上传分为二步,第一步选择文件 代码思路是: chooseFile()方法用于创建一个Intent对象,并设置Intent的Action为ACTION_GET_CONTENT,这表示获取内容,即选 ...
- 写写java中的optional
当我们写代码的时候经常会碰见nullpointer,所以在很多情况下我们需要做各种非空的判断.JDK8中引入了optional,他是一个包装好的类,我们可以把对象传入optional对象中,接下来就可 ...
- 在Linux中清理Buff/cache
在 Linux 中,缓冲区和缓存是为提高系统性能而保留的,但如果这些缓存过多,可能会消耗大量内存,影响系统的性能.有时候,您可能需要手动清理这些缓存以释放内存.但请注意,通常不建议定期或频繁地这样做, ...
- Jmeter边界提取器
组件路径:HTTP请求->右键添加->后置处理器->边界提取器 用途:边界提取器(Boundary Extractor)是放在Sample请求之后执行的,用于获取左右边界中间的所有字 ...
- Jmeter参数化5-JSON提取器
后置处理器[JSON提取器] ,一般放于请求接口下面,用于获取接口返回数据里面的json参数值 1.以下json为例,接口返回的json结果有多组数据.我们要取出purOrderNo值 2.在jmet ...
- 【Spring】使用SpringTest报错 java.lang.NoSuchMethodError
完整报错信息: "C:\Program Files\Java\jdk1.8.0_301\bin\java.exe" -ea -Didea.test.cyclic.buffer.si ...
- 【Java-GUI】10 Swing05 JTree
简单的Tree结构: package cn.dzz; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; pub ...
- 【Layui】02 图标 Icon
官网下载地址: https://www.layui.com/ 学习参考: https://www.bilibili.com/video/BV1ct411n7SN [Layui的文件结构] 我们只需要这 ...
- 论文写作:写回复意见时的套话 (reviews and comments)
Typos, Grammar, and Citation Errors: We acknowledge the need for a thorough proofreading to rectify ...
- 大语言模型(LLM)运行报错:AttributeError: module 'streamlit' has no attribute 'cache_resource'
解决方法: https://blog.csdn.net/javastart/article/details/130785100 (图:https://blog.csdn.net/javastart/a ...