SurfaceFliger与Vsync信号如何建立链接?

Vsync信号上报流程

Vsync的注册函数,来临时会回调HWComposer的hook_VSYNC方法,接着调用到vsync方法中


大致流程梳理:

该方法会通知给SurfaceFliger的onVsyncReceived方法,接着调用DispSync的addResyncSample方法

DispSyncThread线程被唤醒 ,接着EventThread线程唤醒,上面代码中会遍历singalConnections集合调用Connection的postEvent方法

由于上面卡到了DispSync类调用addResyncSample方法处,故先来看这个类。

DispSyncThread线程

DisSync类会创建一个DispSyncThread并运行其run方法

DispSync的初始化过程

  • 运行DispSyncThread线程,用于收集等待Vsync信号的对象并回调这些对象的onDispSyncEvent方法
  • 这些等待的对象其实就是DispSyncSource对象 , 是在创建两个EventThread接收的参数
  • DispSyncSource的onDispSyncEvent方法阻塞于mCond(Condition)的wait等待被唤醒。
接着分析addResyncSample方法 

此时进入到EventThread线程中

Connection::postEvent

像Bittube发送消息,Looper监听到后发送消息切换到SurfaceFlinger主线程去处理

#### ,MQ::cb_eventReceiver

init初始化过程中MQ会监听BitTube,从而调用到cb_eventReceiver方法

**大致流程**:

发送消息(REFRESH消息),接着就是图形渲染的过程了。

**发送消息代码:**

SurfaceFlinger处理消息

流程梳理

  • HWComposer接受Vsync信号,
  • 唤醒DispSyncThread线程(用于接受Vsync信号),
  • 唤醒EventThread线程,调用到DisplayEventReceiver的sendEvent方法再通过BitTube来发送数据
  • EventThread创建好后会调用MQ的setEventThread方法监听Bittube,调用MQ的方法因此回调到SurfaceFlinger的主线程中处理
  • 进入到渲染流程下篇文章分析

原文链接:SurfaceFliger与Vsync信号如何建立链接? - 掘金 (juejin.cn)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MA网络下,静态路由仅配出接口,不配下一跳是否可行

在MA网络模式下,静态路由只配置出接口,不配置下一跳地址是否可行 如下拓扑图: 如图所示,在R1上配置一条去往4.4.4.4的静态路由,此时如果静态路由只配置出接口,不配置下一跳地址: ip route-stat…

Hi3516DV500部署paddle版型分析模型记录

原版模型测试并导出onnx paddle 版面分析-> https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/layout/README_ch.md 测试 python3 deploy/python/infer.py \ --model_dirmodel/picodet_lcnet_x1_0_fgd_layout_cdla_infer/ \ --image_fil…

Day 4 登录页及路由 (二) -- Vue状态管理

状态管理 之前的实现中,判断登录状态用了伪实现,实际当中,应该是以缓存中的数据为依据来进行的。这就涉及到了应用程序中的状态管理。在Vue中,状态管理之前是Vuex,现在则是推荐使用Pinia,在脚手架项目创建…

渗透测试-Fastjson反序列化漏洞getshell

目录 前言 测试环境准备 dnslog测试 搭建rmi服务器&准备恶意类 引用JdbcRowSetImpl攻击 反弹shell$命令执行 总结 关键字:fastjson 1.2.24反序列化导致任意命令执行漏洞 注:本次渗透测试全在虚拟机中进行仅用于学习交流,请勿在实…

Visual Studio(VS)C++项目 管理第三方依赖库和目录设置

发现很多程序员存在这种做法:把项目依赖的第三方库的lib和dll放在项目目录下,或者复制到输出目录,因为每种配置都有不同的输出目录,所以要复制多份(至少包括Debug和Release两个输出目录),这些做…

Mac电脑配置Dart编程环境

1.安装Dart SDK 官网地址:https://dart.dev/get-dart $brew tap dart-lang/dart$brew install dart 安装后,用命令检测一下是否安装正常。 $brew info dart 2.VS Code配置Dart环境 1).安装VS Code 官网地址:https://code.visualstudio.c…

如何在 Photoshop 中使用污点修复画笔

学习污点修复画笔工具的基础知识,以及如何使用它来修复、平滑和删除图像中不需要的部分 1.如何在 Photoshop 中使用污点修复画笔 步骤1 在 Photoshop 中使用污点修复画笔的方法有很多。今天,让我们用它来去除这只手臂上的一些较小的纹身。 步骤2 在我…

少儿编程 2023年9月中国电子学会图形化编程等级考试Scratch编程四级真题解析(选择题)

2023年9月scratch编程等级考试四级真题 选择题(共25题,每题2分,共50分) 1、角色为一个紫色圆圈,运行程序后,舞台上的图案是 A、 B、 C、 D、 答案:A

Star History 九月开源精选 |开源 GitHub Copilot 替代

虽然大火了近一年,但是截至目前 AI 唯一破圈的场景是帮助写代码(谷歌云旗下的 DORA 年度报告也给 AI 泼了盆冷水)。不过对于软件开发来说,生成式人工智能绝对已经是新的标配。 本期 Star History 收集了一些开源 GitHub Copilot …

HQChart使用教程97-K线X轴滚动条

HQChart使用教程97-K线X轴滚动条 效果图创建步骤1. 创建滚动条div2. 初始化滚动条实例3. 配置滚动条属性4. 创建滚动条5. K线图和滚动条绑定6. 滚动条显示位置 完整示例HQChart代码地址 效果图 示例地址:https://jones2000.github.io/HQChart/webhqchart.demo/sampl…

生产级 React 框架介绍

文章目录 生产级 React 框架生产级 React 框架Next.jsRemixGatsbyExpo 如何选择生产级 React 框架 生产级 React 框架 React 是一个流行的 JavaScript 框架,用于构建用户界面。React 框架可以帮助你快速构建高质量的 React 应用,但并不是所有的 React 框…

【uniapp】JavaScript基础学习-20231027

今天有找到一个比较好的网站 https://www.w3school.com.cn/js/index.asp 介绍也全面,内容也比较多。我觉得把最基本的语法看看,然后可以上手写代码了。其他的就是需要靠长期的学习和积累了。 基础语法的使用: 1、定义一个变量 2、对变量赋值 …

YB4606最大2A电流的可编程过压保护开关IC

概述: YB4606的前端是过电压和过电压电流保护装置。它实现了宽输入电压范围从2.5Voc到40Voc。过电压阈值可以外部编程或设置为内部默认设置。的超低电阻集成电源路径nFET开关确保更好电池充电系统应用性能。它可以提供高达2A的电流,以满足电池供应系统。…

MATLAB中perceptron函数用法

目录 语法 说明 示例 使用感知器求解简单分类问题 perceptron函数的功能是简单的单层二类分类器。 语法 perceptron(hardlimitTF,perceptronLF) 说明 注意 Deep Learning Toolbox™ 支持早期形式的感知器。为了获得更好的结果,您应改用 patternnet&#xff0…

阿里云服务linux系统CentOs8.5安装/卸载nginx1.15.9

说明:尝试使用CentOs8.5安装nginx1.9.9失败,make的时候报错了,后面降低版本为CentOs7.5安装成功了,参考文章:【精选】centos7安装nginx-1.9.9_linx centos nginx 1.9.9版本 nginx error log file: "/-CSDN博客 一、安装ngin…

机器学习-特征选择:如何使用互信息特征选择挑选出最佳特征?

一、引言 特征选择在机器学习中扮演着至关重要的角色,它可以帮助我们从大量的特征中挑选出对目标变量具有最大预测能力的特征。互信息特征选择是一种常用的特征选择方法,它通过计算特征与目标变量之间的互信息来评估特征的重要性。 互信息是信息论中的一…

小程序开发——小程序项目的配置与生命周期

1.app.json配置属性 app.json配置属性 2.页面配置 app的页面配置指的是pages属性, pages数组的第一个页面将默认作为小程序的启动页。利用开发工具新建页面时,则pages属性对应的数组将自动添加该页面的路径,若是在硬盘中添加文件的形式则不…

前端打印表格功能+单号生成条形码

第一种打印方法:不需要下载任何插件 浏览器自带打印功能(不太推荐),原理是生成新的页面后被打印,当打印完成或者取消打印时,页面需要强制刷新,否则页面无法回显。 //打印功能 print() {var pr…

【Docker】Linux路由连接两个不同网段namespace,连接namespace与主机

如果两个namespace处于不同的子网中,那么就不能通过bridge进行连接了,而是需要通过路由器进行三层转发。然而Linux并未像提供虚拟网桥一样也提供一个虚拟路由器设备,原因是Linux自身就具备有路由器功能。 路由器的工作原理是这样的&#xff…

算法刷题记录6 - 反转链表和链表两两交换

哎,都两周没刷题了,罪过 第一题 2023.10.29 周日 上链接 206. 反转链表 难度:简单 代码随想录 文档 代码随想录 视频 这道题说难不难,但是也不知道是太久没写没感觉了还是确实细节多,不看视频确实感觉不出写的问题在…