当前位置: 首页 > 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状态,一般常见的比如线程同步锁,被子线程持有了,然后主线程也需要获取到同步锁才能继续下一行执行代码,也是会出现该现象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/62586.html

相关文章:

  • 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
  • 数据库系统概论(二)数据模型
  • 记录--有惊无险
  • 产城融合典范:树莓科技如何助力宜宾数字经济腾飞​
  • 自启动、关联启动的拦截规则
  • 4g串口发短信踩坑
  • 【文件系统】
  • C语言for循环语句的用法(非常详细)
  • Ubuntu 源码安装 Qt5
  • 报错E0513:不能将 “const wchar_t *“ 类型的值分配到 “LPWSTR“ (aka “wchar_t *“) 类型的实体
  • 【性能测试入门_01性能测试jmeter基础实操场景详解】
  • # 如何确认elementary os (linux)使用的是Wayland而不是x11?
  • TCP连接过程图解