【性能工具】Perfetto中如何分析主线程为何进入sleep状态

一、问题背景

    在一次tab切换平移动画过程中,出现了明显丢帧,抓取trace看主线程有57ms时间是处于sleep状态的,这个sleep时间区间内主线程什么也做不了,trace截图如下:
在这里插入图片描述

二、卡顿情况下的帧率计算结果

以上滑动区间内计算的帧率是45fps,画面不流畅,需要分析优化:
在这里插入图片描述
perfetto上没有像systrace那么明显的指出主线程进入sleep状态的reason信息,因此需要在主线程进入sleep和离开sleep状态的边界点进行分析:

三、分析进入sleep状态的思路

3.1 进入sleep状态

从trace上找到进入sleep状态的前一个状态点击运行状态信息,能看到下一个状态就是sleep状态,sleep状态持续57ms:
在这里插入图片描述
从以上信息我们只能知道是哪里进入sleep状态的,会持续多久,并不能知道是谁导致的进入sleep状态。

perfetto中线程状态的含义:
在这里插入图片描述

3.2 离开sleep状态

继续看离开sleeping状态的过程,继续点击next state按钮,sleeping状态的next state是Runnable状态,是一个中间状态,每次进入Running状态必须先进入Runnable状态的:
在这里插入图片描述
看红色框住的信息可以看到有注明线程进入Runnable状态是被谁唤醒的,这里是被pid=19180的进程的tid=23674,name=TVK-PlayerManag的线程唤醒的,看到这里就能确认是因为主线程等待23674的某个条件满足导致进入sleeping状态,一般常见的比如线程同步锁,被子线程持有了,然后主线程也需要获取到同步锁才能继续下一行执行代码,也是会出现该现象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechMix

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值