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

这篇具有很好参考价值的文章主要介绍了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信号如何建立链接?,java,开发语言

原文链接:SurfaceFliger与Vsync信号如何建立链接? - 掘金 (juejin.cn)文章来源地址https://www.toymoban.com/news/detail-729082.html

到了这里,关于SurfaceFliger与Vsync信号如何建立链接?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序开发:如何从零开始建立你的第一个小程序

    你可能有一个小程序的想法,但它仍然是一个想法。对于开发人员来说,这是一项艰巨的任务,因为你必须确保你有足够的时间来开发你的第一个小程序。如果你决定使用小程序,那就有很多事情要做。创建一个小程序可能是一件非常耗时的事情。除了创建一个自己的小程序

    2024年02月10日
    浏览(54)
  • C++ Qt开发:如何使用信号与槽

    在Qt中,信号与槽(Signal and Slot)是一种用于对象之间通信的机制。是Qt框架引以为傲的一项机制,它带来了许多优势,使得Qt成为一个强大且灵活的开发框架之一。信号与槽的关联通过 QObject::connect 函数完成。这样的机制使得对象能够以一种灵活而松散耦合的方式进行通信,

    2024年02月05日
    浏览(32)
  • C++自定义信号和QML的槽函数建立连接

    0x00 在C++代码在定义一个信号函数:“void sendData2UI(QString msg);”,该函数主要是将接收到的UDP消息发送到QML界面中 0x01 在QML代码中使用Connections创建C++对象的信号与QML中定义的槽函数连接 效果演示:

    2024年02月16日
    浏览(30)
  • Python使用flask框架与前端建立websocket链接,并进行数据交互

    后端采用的框架为flask,前端用的flask自带的html编写,实现的功能为:前后端建立websocket链接并进行数据交互 一、编写一个flask后端服务 常规创建方式就可以,创建一个flask服务。声明一个websocket实例,以websocket的方式启动这个服务。 安装相关依赖: 声明应用和websocket实例

    2024年04月11日
    浏览(35)
  • SurfaceFliger绘制流程

    前景提要: 当 HWComposer接收到Vsync信号 时,唤醒 DisSync 线程,在其中唤醒EventThread线程,调用 DisplayEventReceiver的sendObjects 像BitTub发送消息,由于在SurfaceFlinger的init过程中创建了EventThread线程,并添加到MQ中进行创建Connection并监听对应的BitTube信息,因此最后会在MQ中接收到通知调

    2024年02月07日
    浏览(22)
  • FPGA中亚稳态、异步信号处理、建立和保持时间违例及题目合集

    亚稳态:输入信号的变化发生在时钟有效沿的建立时间和保持时间之间,导致其不满足触发器建立保持时间的时序要求,使得输出有一段时间的不确定状态,这就是亚稳态。

    2023年04月09日
    浏览(26)
  • 关于两个不同数据库的两张表建立数据库链接,关联查询数据

    数据库链接(database link)是用于跨不同数据库之间进行连接和数据传输的工具或方法。它允许在一个数据库中访问另一个数据库中的对象和数据。 --1.建立链接tjpt 上述示例中的  pt_user 、 pt_password  和  10.70.231.130/orcl 需要替换为实际的用户、密码和数据库信息。 创建链接后

    2024年02月10日
    浏览(36)
  • 如何异地链接Pycharm服务器进行远程开发并实现与公司服务器资源同步

    本文主要介绍如何使用Pycharm进行远程开发,并实现在家远程与公司服务器资源同步。 新版本 Jetbrains 系列开发IDE( IntelliJ IDEA , PyCharm , GoLand )等都支持远程使用服务器编译,并且可以 通过SFTP同步本地与服务器项目代码 。 这样做的好处是**我们只要连接上服务器就能开始

    2024年02月01日
    浏览(50)
  • QT的信号槽的四种写法和五种链接方式

    目录 四种信号槽写法: 五种连接方式: 实例: 常见错误及改正: 错误1: 未连接信号与槽 错误2: 信号和槽参数不匹配 错误3: 未使用Q_OBJECT宏 错误4: 跨线程连接未处理   在Qt中,信号(Signal)和槽(Slot)是一种用于对象之间通信的机制,用于实现一种松耦合的方式。信号被

    2024年02月13日
    浏览(30)
  • 【sqlserver】已成功与服务器建立链接,但是在登录过程中发生错误。(provider:TCP提供程序,error:0 - 指定的网络名不再可用。)

    配置管理器,mssqlserver的协议 Named Pipes 启用,重新sqlserver服务试一下,我是自己摸索这样解决的,不行的话,可以看下下面链接建议 error:0 - 指定的网络名不可用

    2024年01月18日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包