当前位置: 首页 > news >正文

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

一、问题背景

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

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

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

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

3.1 进入sleep状态

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

3.2 离开sleep状态

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

相关文章:

  • Week4_250310~250316_OI日志(待完善)
  • PySide(PyQT),QGraphicsRectItem的setPos()和setRect()的坐标位置的区别
  • Dynamics 365 新版的Power apps开发界面中如何找到开发者资源
  • WM_CREATE
  • nndl: chap1_warmup_numpy_tutorial
  • Java高频面试之集合-09
  • 【Python】dash-fastapi前后端搭建
  • QT多线程
  • 初级网工之路: 如何通过服务器进行交换机的配置
  • Faster R-CNN原理详解以及Pytorch实现模型训练与推理
  • 【NexLM 开源系列】让 AI 聊天更丝滑:SSE 实现流式对话!
  • 存储过程和自定义函数在银行信贷业务中的应用(oracle)
  • pop_dialog_state(state: State)弹出对话栈并返回到主助手,让整个对话流程图可以明确追踪对话流,并将控制权委派给特定的子对话图。
  • CHI协议中的read transaction flow
  • UDP-网络编程/socket编程
  • 【K8s】专题十六(3):Kubernetes 包管理工具之 Helm 语法
  • Excel 中如何实现数据透视表?
  • 信奥赛CSP-J复赛集训(模拟算法专题)(9):P6437 [COCI 2011/2012 #6] JACK
  • 数据库系统概论(二)数据模型
  • 记录--有惊无险
  • 警方通报“网约车司机偷拍女乘客”:已被行政拘留
  • 昆明一学校门外小吃摊占满人行道,城管:会在重点时段加强巡查处置
  • 第四轮伊美核谈判将于11日在阿曼举行
  • 印度杰纳布河上游两座水电站均已重新开闸
  • 追光|铁皮房、土操场,这有一座“筑梦”摔跤馆
  • 民生访谈|今年上海还有哪些重要演出展览?场地配套如何更给力?