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

SurfaceFlinger MessageQueue原理

SurfaceFlinger MessageQueue 有2个作用:
  1. 处理SurfaceFlinger INVALIDATE、REFRESH事件
  2. 管理SurfaceFlinger主线程挂起和恢复
SurfaceFlinger::run() { 
while (true) { 
mEventQueue->waitMessage(); } } waitMessage {do {IPCThreadState::self()->flushCommands();int32_t ret = mLooper->pollOnce(-1)... } while (true)
}

BufferQueue不是一般android系统那个BufferQueue,他是SurfaceFlinger模块专用的一个数据结构,包含了一个looper,一个handler。looper中的mMessageEnvelopes这个容器才是真正存储消息的地方

SurfaceFlinger::SurfaceFlinger(mEventQueue(mFactory.createMessageQueue())void MessageQueue::init(const sp<SurfaceFlinger>& flinger) { 
mFlinger = flinger;mLooper = new Looper(true);mHandler = new Handler(*this); 
}

BufferQueue是在SurfaceFlinger构造函数创建的用于SurfaceFlinger和HWC之间跨进程通讯SurfaceFlinger是生产者,HWC是消费者,其中数据是gpu合成好之后的GraphicBuffer

SurfaceFlinger生产message方式如下所示:

status_t SurfaceFlinger::enableVSyncInjections(bool enable) {
      schedule([=] {}).wait();
return NO_ERROR;
}
SurfaceFlinger 主线程其它所有任务被抛入到messagequeue 在SurfaceFlinger主线程执行,调用公共方法SurfaceFlinger::schedule(mEventQueue->postMessage(std::move(task)));
例如:app有图像请求渲染
queuebuffer-->consumer.onFrameAvailable-->SurfaceFlinger::signalLayerUpdate()->invalidate()
MessageQueue::invalidate() {
// 唤醒EventThread线程去loop是否有Vsync来了,Vsync时候才真正调用dispatchInvalidate
EventThread::requestNextVsync -> mCondition.notify_all() 
}

相关文章:

SurfaceFlinger MessageQueue原理

SurfaceFlinger MessageQueue 有2个作用&#xff1a; 处理SurfaceFlinger INVALIDATE、REFRESH事件管理SurfaceFlinger主线程挂起和恢复 SurfaceFlinger::run() { while (true) { mEventQueue->waitMessage(); } } waitMessage {do {IPCThreadState::self()->flushComm…...

component-动态控制 div width 的值 根据传入的变量决定width的值 vue

1.实现 根据参数的值&#xff0c;div显示不同的长度 <div class"node-line" :style"lineProgress"></div> <script>export default {name: "trainSummaryInfo",data(){return{linePercentage:200,}},computed:{lineProgress…...

C#中的常用集合

目录 一、动态数组ArrayList 二、List 三、栈&#xff08;Stack&#xff09; 四、队列&#xff08;Queue&#xff09; 五、字典&#xff08;Dictionary&#xff09;,int> 一、动态数组ArrayList ArrayList 是 C# 中提供的一种动态数组类&#xff0c;位于命名空间 Syste…...

插入实体自增主键太长,mybatis-plaus自增主键

1、问题 spring-boot整合mybtais执行insert语句时&#xff0c;主键id为长文本数据。 2、分析问题 1)数据库主键是否自增 2&#xff09;数据库主键的种子值设置的多少 3、解决问题 1&#xff09;数据库主键设置的时自增 3&#xff09;种子值是1 所以排查是数据库的问题 4、继…...

晨辉面试抽签和评分管理系统之一:考生信息管理和编排

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…...

【MySQL】MVCC详解, 图文并茂简单易懂

欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...

中国数字化发展的问题与机会

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、埃域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能,如智能化推荐、…...

【ROS2】☆ launch之Python

☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch&#xff0c;而ROS2保留了XML 格式launch&#xff0c;还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好&#xff0c;但是ROS2官方推荐使用Python方式编写…...

如何稳定使用 O1 / O1 Pro,让“降智”现象不再困扰?

近期&#xff0c;不少朋友在使用 O1 或 O1 Pro 模型时&#xff0c;都会碰到“降智”或“忽高忽低”的智力波动&#xff0c;比如无法识图、无法生成图片、甚至回答准确度也不稳定。面对这些问题&#xff0c;你是不是也感到头疼呢&#xff1f; 为了找到更可靠的解决办法&#xf…...

zookeeper监听机制(Watcher机制)

文章目录 引言I zookeeper监听机制Watcher机制实现分布式的通知功能触发事件种类Watcher的三个过程II watch机制特点一次性触发事件封装event异步发送先注册再触发常见的通知状态和事件类型III 应用案例(Kafka)Kafka的消息模型Kafka在Zookeeper中保存的元数据Kafka 基于Contr…...

docker 启动 nacos 单机模式

docker 启动 nacos 单机模式 # 拉取镜像# 启动&#xff0c;如果不拉镜像会自动拉取最新的 image docker run --name standalong_nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODEstandalone -d nacos/nacos-server# 状态查看外部访问验证 输入部署的 docker ip 地址以及…...

学习threejs,导入babylon格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.BabylonLoader babyl…...

03.MPLS静态LSP配置实验

MPLS静态LSP配置实验 1、实验环境2、基础配置开启全局mpls接口下开启mpls配置静态LSP配置FEC从1.1.1.1到3.3.3.3配置FEC从3.3.3.3到1.1.1.13、信息查看查看LFIB表(标签转发信息表)查看FIB表(转发信息表)查看详细FFIB表tracert lsp iptracert -vping lsp ip4、抓包验证1、实…...

程序血缘分析技术在工商银行软件工程中的应用

当前,随着软件领域技术更新换代速度的日益加快,市场需求也变得更加多样化和个性化,业界普遍通过加速产品迭代来满足客户需求,但在此过程中也暴露出一些研发管理痛点问题,如服务和程序类资产信息分散于各个不同的应用和系统中,信息归集费时费力;设计、开发和测试人员无法…...

计算机毕业设计Django+Tensorflow音乐推荐系统 音乐可视化 卷积神经网络CNN LSTM音乐情感分析 机器学习 深度学习 Flask 大

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

macOS 使用 FreeRDP 远程访问 Windows:完整指南20250109

&#x1f5a5;️ macOS 使用 FreeRDP 远程访问 Windows&#xff1a;完整指南 引言 随着远程办公需求的快速增长&#xff0c;跨平台远程管理已经成为不可或缺的技能之一。作为一款开源轻量的远程桌面协议实现工具&#xff0c;FreeRDP 为 macOS 用户提供了一个简单、高效的解决…...

Java agent

‌ Java Agent是一种特殊的Java程序&#xff0c;它可以在JVM启动时或运行时动态加载&#xff0c;用于监控和修改其他Java应用程序的行为‌。通过Java Agent&#xff0c;开发者可以在不修改目标应用程序源码的情况下&#xff0c;动态地插入功能&#xff0c;如性能分析、日志记录…...

Web无障碍

文章目录 &#x1f7e2;Web Accessibility-Web无障碍&#x1f7e2;一、Web Accessibility-Web1. web无障碍设计2. demo3.使用相关相关开源无障碍工具条(调用可能会根据网络有点慢) 如有其他更好方案&#xff0c;可以私信我哦✒️总结 &#x1f7e2;Web Accessibility-Web无障碍…...

概率基本概念 --- 离散型随机变量实例

条件概率&独立事件 随机变量 - 离散型随机变量 - 非离散型随机变量 连续型随机变量奇异性型随机变量 概率表示 概率分布函数概率密度函数概率质量函数全概率公式贝叶斯公式 概率计算 数学期望方差协方差 计算实例 假设有两个离散型随机变量X和Y&#xff0c;它们代…...

毕业项目推荐:基于yolov8/yolov5/yolo11的动物检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...

NFT系统开发:在数字荒原上播种「文明契约」

——解码下一代价值互联网的基础设施革命引言&#xff1a;当数字资产成为新大陆的「土地证」2025年&#xff0c;全球NFT市场规模突破870亿美元&#xff0c;从艺术收藏到房地产契约&#xff0c;从游戏道具到知识产权&#xff0c;NFT正在重构人类对"所有权"的认知。在物…...

运用AIBIYE的智能改写工具,掌握五大实用技巧,有效降低论文重复率至合规范围。

嘿&#xff0c;大家好&#xff01;我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题&#xff1a;论文重复率飙到30%以上怎么办&#xff1f;别慌&#xff0c;我这就分享5个实用降重技巧&#xff0c;帮你一次搞定&#xff0c;轻松压到合格线以下。这些方法都是我亲身试验过的&a…...

棒板电极流注放电与氩气等离子体仿真的COMSOL研究

棒板电极流注放电&#xff0c; COMSOL&#xff0c;氩气形成的贯穿流注 氩气放电等离子体仿真。在高压实验室里见过那种细金属棒和接地板之间突然爆发的紫色放电吗&#xff1f;那玩意儿专业名称叫棒板电极流注放电。今天咱们用COMSOL扒开这朵"电火花"的外衣&#xff0…...

深入解析C语言位运算与操作符

目录 1. 原码&#xff0c;反码&#xff0c;补码 2. 移位操作符 2.1 左移操作符 2.2 右移操作符 3. 位操作符&#xff1a;&&#xff0c;|&#xff0c;^&#xff0c;~ 3.1 按位与&#xff1a;& 3.2 按位或&#xff1a;| 3.3 按位异或&#xff1a;^ 3.4 按位取反&…...

Mem Reduct内存清理工具:掌握20+语言切换的终极技巧

Mem Reduct内存清理工具&#xff1a;掌握20语言切换的终极技巧 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 你是否…...

深度解析VeraGrid:电力系统开源仿真平台的架构革新与实践应用

深度解析VeraGrid&#xff1a;电力系统开源仿真平台的架构革新与实践应用 【免费下载链接】VeraGrid VeraGrid, a cross-platform power systems software written in Python with user interface, used in academia and industry. 项目地址: https://gitcode.com/gh_mirrors…...

告别复杂配置!Fish Speech 1.5 开箱即用,3步搭建你的专属语音合成工具

告别复杂配置&#xff01;Fish Speech 1.5 开箱即用&#xff0c;3步搭建你的专属语音合成工具 1. 为什么选择Fish Speech 1.5&#xff1f; 语音合成技术正在改变我们与数字世界的交互方式&#xff0c;但传统TTS系统往往需要复杂的音素标注和专业配置。Fish Speech 1.5通过创新…...

[Python3高阶编程] - 再论 WSGI、Web服务器和Python Web应用的关系

一、核心关系&#xff1a;WSGI 是“接口标准”&#xff0c;Web 服务器是“实现者”简单定义组件类型职责代表实现WSGI协议标准&#xff08;PEP 3333&#xff09;定义 Web 服务器与 Python 应用之间的通信接口规范&#xff1a;• 函数签名• 参数格式• 数据流向• 错误处理不是…...

2026届必备的六大AI科研神器解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 步入人工智能生成内容越来越普遍的大环境里&#xff0c;把文本的机器感给降低变成了提高可读…...

Spring Cloud微服务架构下的医院信息系统深度解析与实践指南

Spring Cloud微服务架构下的医院信息系统深度解析与实践指南 【免费下载链接】HIS HIS英文全称 hospital information system&#xff08;医疗信息就诊系统&#xff09;&#xff0c;系统主要功能按照数据流量、流向及处理过程分为临床诊疗、药品管理、财务管理、患者管理。诊疗…...