在Running状态就代表着处于cpu上的运行中
状态作用:看某个方法是否耗时,可以通过测量Running时间长短判断,也可以进行竞品对比看看cpu能力如何,或者前后对比各个大小核cpu影响方法的耗时
可以看到通过选中可以知道该任务是在哪个cpu进行运行的
代表线程可以运行但当前没有真正运行中,需要等待 cpu 调度,这个时间长短代表着cpu调度快慢
重要作用:点击Runnable这个块,下面信息会显示当前线程唤醒者是谁,即可以清楚知道整个线程之间唤醒逻辑。
代表当前线程没有工作可以做,等待事件驱动干货,比如looper就是大部分时间睡眠,小部分时间有消息后处理消息
代表不可以中断的休眠状态,一般线程在IO操作上阻塞了
不可中断状态实际上是系统对进程和硬件设备的一种保护机制。比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的。
不可中断的休眠状态,非IO导致,在等内核锁。通常是低内存导致等待、各种各样的内核锁。
Uninterruptible情况都可以点击后看到blocked方法是哪个
Blocked function jbd2_log_wait_commit
一般perfetto看trace时候都会针对某一个进程进行查看其运行,因为perfetto/systrace都是以进程为单位进行划分的,每个进程又分为若干个线程,接下来又是主要看一个个的线程情况。
线程一般会有2个条目,如下图所示:
上面条目描绘是这个线程当前的状态,最常见的有主要有Running,Runable,Sleeping等状态
下面条目就是描绘具体这个线程执行的哪些方法的任务块
在涉及到线程唤醒相关时候需要看这里
这个部分和线程没啥关系,即不是说有单独一个线程在专门计数这个,可以理解为一个程序里面全局的一个变量值展示,比如在surfaceflinger的vsync时候就用到了
这个主要用于跟踪一个动画的开始与结束,比如ValueAnimator
一般对应代码如下:
Trace.asyncTraceBegin和Trace.asyncTraceEnd
W : 放大 perfetto , 放大可以更好地看清局部细节
S : 缩小 perfetto, 缩小以查看整体
A : 左移
D : 右移
M : 高亮选中当前鼠标点击的段
同步跨进程情况:
发起端如下,也可以直接点击跳转到接收端
异步跨进程调用情况
注意这里只有个大的箭头,需要点击箭头看名字才可以判断是发送还是接收端
*
注意:发起端名字带有是transaction,接收端带有的rev*
有一个置顶按钮,点击后可以把这个行放到perfetto最顶端
点击后如下:
主要使用场景:
在一些分析trace过程中涉及多个行需要联合分析,多个行的距离太远,没办法方便的对比查看,这个时候可以把关心的几个行都进行置顶查看
本文章对应视频手把手教你学framework:
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
私聊作者+v(androidframework007)
点击这里 https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw
视频:https://www.bilibili.com/video/BV1Jg4y1C7fw/