perfetto/systrace基础知识讲解-千里马android framework实战开发

线程状态查看

深绿色 : 运行中(Running)

在Running状态就代表着处于cpu上的运行中
状态作用:看某个方法是否耗时,可以通过测量Running时间长短判断,也可以进行竞品对比看看cpu能力如何,或者前后对比各个大小核cpu影响方法的耗时
可以看到通过选中可以知道该任务是在哪个cpu进行运行的
perfetto/systrace基础知识讲解-千里马android framework实战开发_第1张图片

浅绿色 : 可运行(Runnable)

代表线程可以运行但当前没有真正运行中,需要等待 cpu 调度,这个时间长短代表着cpu调度快慢
重要作用:点击Runnable这个块,下面信息会显示当前线程唤醒者是谁,即可以清楚知道整个线程之间唤醒逻辑。
perfetto/systrace基础知识讲解-千里马android framework实战开发_第2张图片

白色/无色: 睡眠中(Sleeping)

代表当前线程没有工作可以做,等待事件驱动干货,比如looper就是大部分时间睡眠,小部分时间有消息后处理消息
perfetto/systrace基础知识讲解-千里马android framework实战开发_第3张图片

橙色Uninterruptible Sleep (IO)

代表不可以中断的休眠状态,一般线程在IO操作上阻塞了
不可中断状态实际上是系统对进程和硬件设备的一种保护机制。比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的。
perfetto/systrace基础知识讲解-千里马android framework实战开发_第4张图片

紫红色Uninterruptible Sleep (Non IO)

不可中断的休眠状态,非IO导致,在等内核锁。通常是低内存导致等待、各种各样的内核锁。
perfetto/systrace基础知识讲解-千里马android framework实战开发_第5张图片
Uninterruptible情况都可以点击后看到blocked方法是哪个

Blocked function   jbd2_log_wait_commit

各个部分区域详解

一般perfetto看trace时候都会针对某一个进程进行查看其运行,因为perfetto/systrace都是以进程为单位进行划分的,每个进程又分为若干个线程,接下来又是主要看一个个的线程情况。
线程一般会有2个条目,如下图所示:

perfetto/systrace基础知识讲解-千里马android framework实战开发_第6张图片
上面条目描绘是这个线程当前的状态,最常见的有主要有Running,Runable,Sleeping等状态
下面条目就是描绘具体这个线程执行的哪些方法的任务块

1、线程状态信息,代表当前线程状态

在涉及到线程唤醒相关时候需要看这里
在这里插入图片描述

2、线程具体执行方法信息,描述有哪些方法正在执行执行

这个部分最重要,大部分时候其实都在看这个
在这里插入图片描述

3、Counter计数采样部分信息

这个部分和线程没啥关系,即不是说有单独一个线程在专门计数这个,可以理解为一个程序里面全局的一个变量值展示,比如在surfaceflinger的vsync时候就用到了
perfetto/systrace基础知识讲解-千里马android framework实战开发_第7张图片

4、cpu执行块部分信息

perfetto/systrace基础知识讲解-千里马android framework实战开发_第8张图片
主要有每个线程执行的任务块,和每个cpu的频率详情

5、async执行块部分信息

这个主要用于跟踪一个动画的开始与结束,比如ValueAnimator

在这里插入图片描述
一般对应代码如下:
Trace.asyncTraceBegin和Trace.asyncTraceEnd
perfetto/systrace基础知识讲解-千里马android framework实战开发_第9张图片

相关perffto使用技巧

相关快捷按键和systrace通用:

W : 放大 perfetto , 放大可以更好地看清局部细节
S : 缩小 perfetto, 缩小以查看整体
A : 左移
D : 右移
M : 高亮选中当前鼠标点击的段

跨进程通讯的发起端与接受端跳转

同步跨进程情况:
perfetto/systrace基础知识讲解-千里马android framework实战开发_第10张图片发起端如下,也可以直接点击跳转到接收端
perfetto/systrace基础知识讲解-千里马android framework实战开发_第11张图片异步跨进程调用情况
perfetto/systrace基础知识讲解-千里马android framework实战开发_第12张图片
注意这里只有个大的箭头,需要点击箭头看名字才可以判断是发送还是接收端

perfetto/systrace基础知识讲解-千里马android framework实战开发_第13张图片*
注意:发起端名字带有是transaction,接收端带有的rev*

置顶功能

有一个置顶按钮,点击后可以把这个行放到perfetto最顶端
perfetto/systrace基础知识讲解-千里马android framework实战开发_第14张图片
点击后如下:
perfetto/systrace基础知识讲解-千里马android framework实战开发_第15张图片

主要使用场景:
在一些分析trace过程中涉及多个行需要联合分析,多个行的距离太远,没办法方便的对比查看,这个时候可以把关心的几个行都进行置顶查看

标记功能功能

perfetto/systrace基础知识讲解-千里马android framework实战开发_第16张图片
主要用于分析过程中的一些标记时间点段,以防找补回去

本文章对应视频手把手教你学framework:
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
私聊作者+v(androidframework007)
点击这里 https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw
视频:https://www.bilibili.com/video/BV1Jg4y1C7fw/
在这里插入图片描述

你可能感兴趣的:(性能优化,android,android系统,车载系统,aosp,systrace,perfetto)