android display 笔记(五)HWC(Hardware Composer)

server/2024/9/18 12:53:48/ 标签: android, 笔记, composer

HWC

简单来说HWC是用来合成图形和显示图形的,可以把多个图形缓存传给硬件混合渲染器,让硬件混合渲染器执行合成操作,显示图形就是直接将图形缓存显示到屏幕。

android 14

/hardware/interfaces/graphics/composer/2.1/IComposer.hal
19 import IComposerClient;
20 
21 interface IComposer {createClient() generates (Error error, IComposerClient client);

IComposer 用于客户进程与HWC进程建立通信链接,createClient 用于创建IComposerClient 的对象。

IComposerClient

在IComposerClient接口类中通过registerCallback注册回调,客户进程注册回调后就可以使用HWC进程事件。

 registerCallback(IComposerCallback callback);

IComposerCallback在IComposerCallback .hal中定义

/hardware/interfaces/graphics/composer/2.1/IComposerCallback.hal
19 interface IComposerCallback {
48     onHotplug(Display display, Connection connected);
62     oneway onRefresh(Display display);
74     oneway onVsync(Display display, int64_t timestamp);

根据代码上的注释,可以了解到这三个接口的作用
onHotplug :当显示设备插入或退出时,通知客户进程
onRefresh:通知客户进程提供新的帧缓存
onVsync:发送给VSync同步信号

硬件混合渲染器合成

创建图层

/frameworks/native/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp
358  Error HidlComposer::createLayer(Display display, Layer* outLayer) {
359      Error error = kDefaultError;
360      mClient->createLayer(display, kMaxLayerBufferCount,
361                           [&](const auto& tmpError, const auto& tmpLayer) {
362                               error = tmpError;
363                               if (error != Error::NONE) {
364                                   return;
365                               }
366  
367                               *outLayer = tmpLayer;
368                           });
369  
370      return error;
371  }

android 14中将createlayer 从ComposerHal中移到了HidlComposerHal.cpp
Composer 通过调用mClient的接口createlayer向HWC进程请求创建图层(mClient->createLayer)

----------------后续有时间再补充


http://www.ppmy.cn/server/99653.html

相关文章

市场解读│AI服务器市场爆发 磁性元件的下一个风口已至?

导语 2024年AI服务器产值飙升69%,将会给磁性元件行业带来多少市场增量?磁性元件企业又改如何抓住这一新机遇? 在21世纪的科技浪潮中,人工智能(AI)作为一股不可忽视的力量,正以前所未有的速度改变…

河北移动:核心系统数据库成功完成整体迁移 ,实现全栈国产|OceanBase案例

本文作者:移动通信集团河北有限公司架构规划专家,房瑞 项目背景: 中国移动通信集团河北有限公司一直在积极响应国家及集团的号召,以磐舟&磐基云原生为底座,结合国产浏览器、中间件、数据库、操作系统和服务器等&a…

修改docker的/var/lib/docker/overlay2储存路径

目录 目录 1.准备新的存储位置 1.创建新的存储目录 2.修改目录权限 2. 配置 Docker 使用新的存储位置 1.停止 Docker 服务 2.编辑 Docker 配置文件 3.迁移现有 Docker 数据 1.将现有的 Docker 数据从系统盘移动到新目录 2.启动 Docker 服务 3. 验证更改 4. 清理旧的…

Proxmox pct restore LXC 容器

vzdump 参考 vzdump 备份恢复参数参考 pct restore 恢复参数 创建一键Proxmox vzdump 备份ct 虚拟机 vzdump 备份恢复参数参考pct restore 恢复参数恢复的vmid 107 10822-29行是环境变量,根据主机的实际情况更改ct 模板默认下载目录/var/lib/vz/template/cache所有备份默认目…

Npm 使用教程

Npm 使用教程 一、简介 npm(Node Package Manager)是Node.js的包管理器,随Node.js一起安装。npm允许开发者下载、安装、升级和删除Node.js包,并管理项目依赖。npm拥有庞大的生态系统,包含了超过数百万个开源包&#…

设计模式 - 适配器模式

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、适配器模式的基本概念二、适配器模式的实现1. 定义目标接口2. 定义适配者接口3. 定义具体适配者类4.…

【Godot4自学手册】第四十四节用着色器(shader)实现溶解效果

本小节,我将自学用用着色器(shader)实现溶解效果,最终效果如下: 一、进行shader初始设置 首先我们进入Player场景,选择AnimatedSprite2D节点,在检查器中找到CanvasItem属性,并在M…

linux 系统yum 失效,无法下载

Linux服务器更换YUM镜像源的步骤 备份现有的YUM配置文件: sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup下载新的YUM配置文件: 根据您的CentOS版本,选择合适的镜像源。例如,对于CentOS …

JVM 性能分析 —— G1 日志分析

文章目录 日志级别-XX:PrintGC(简洁版)-XX:PrintGCDetails(详细版)-XX:G1LogLevelfinest(非常详细版)YGC 日志并发标记日志Mixed GC 日志Full GC 日志 日志级别 JVM 日志级别中的 fine、finer 和 finest 这…

PLM软件选型攻略:10款推荐工具全面解析

本篇文章中提到的工具包括:PingCode、Worktile、云效、目标圈(Goal Circle)、Mavenlink、SAP PLM、Basecamp、Scoro、明道云、Airtable。 在现代企业管理中,选择合适的PLM(产品生命周期管理)系统对提升产品…

JAVA 集合的遍历方式

在Java中,遍历集合(如List、Set、Map等)是一个常见的操作。根据集合类型的不同,遍历的方式也会有所不同。以下是一些基本的遍历集合的方法: 1. 遍历List 使用for-each循环(增强型for循环) Li…

PostgreSQL 练习 ---- psql 新增连接参数

目标 添加一个连接参数,默认为 false 。当 psql 连接时,若该连接参数非 “true” 时,用户 “u1“ 对表对象无操作权限,包括自己拥有的表。 连接机制简介 连接过程如下所述: 客户端初始化一个空连接,设置…

【数据结构】五、树:4.树、森林、二叉树

文章目录 四、树、森林与二叉树的转化1.树转换为二叉树2.森林转化为二叉树 五、树、森林的遍历1.树的遍历2.森林的遍历 四、树、森林与二叉树的转化 在讲树的存储结构时,我们提到了树的孩子兄弟法可以将一棵树用二叉链表进行存储,所以借助二叉链表&…

学习大数据DAY34 面向对象思想深化练习 将从豆瓣爬取的数据置入自己搭建的网站上

目录 查看电影类型的电影列表 添加电影 修改电影 上机练习 13 使用三层架构完善 web 系统 查看电影类型的电影列表 DAL.py 文件 class MovieDAL(DBHelper): def getMovieByTid(self,typeid): sqlf"""select id,title,release_date,score,tname from Mo…

初识Django

初识Django Python知识点:函数、面向对象。前端开发:HTML、CSS、JavaScript、jQuery、BootStrap。MySQL数据库。Python的Web框架: Flask,自身短小精悍 第三方组件。Django,内部已集成了很多组件 第三方组件。【主要…

Leetcode - 周赛409

目录 一,3242. 设计相邻元素求和服务 二,3243. 新增道路查询后的最短距离 I 三,3244. 新增道路查询后的最短距离 II 四,3245. 交替组 III 一,3242. 设计相邻元素求和服务 本题纯模拟,代码如下&#xff…

双向链表 - 底层实现 - Java

一、IndexIsLegalException /*** Created with IntelliJ IDEA.* Description:* User: tangyuxiu* Date: 2024-08-11* Time: 20:19*/ public class IndexIsLegalException extends Exception {public IndexIsLegalException() {super();}public IndexIsLegalException(String s…

网络安全风险扫描原理及工具使用

课程目标 1.熟悉常见网络安全风险扫描工具 2.了解网络安全风险扫描原理 3.掌握扫描工具使用方法 为什么要做网络安全风险扫描? 什么是网络安全风险扫描? 通过一定的技术手段发现系统和软件存在的安全漏洞、弱口令 网络安全风险扫描的目的&#xff1…

Android逆向题解攻防世界-easyjava-难度6

纯Java实现,不涉及so, flag加密之后与指定字符串 “wigwrkaugala"比较判断,循环一个个字符加的,那可以一个个字符对应还原。 加密算法就在a,b类里面,代码直接复制到idea ,枚举暴力破解。 每一位输入范围a-z , 找…

关于匹配的一些算法(方法)

关于匹配的一些算法(方法) 1. 精确匹配2. 模糊匹配3. 数值匹配4. 多属性加权匹配5. 分类或回归匹配6. 聚类算法7. 基于内容的推荐算法8. 深度学习结尾 1. 精确匹配 哈希表(Hash Table):如果需要在数据集中快速找到与目…