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

news/2024/9/18 12:51:45/ 标签: 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/news/1509015.html

相关文章

C:每日一题:单身狗

​​​​ 一、题目: 在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。 整型数组 int arr[ ] {1,1,2,2,3,4,4} 二、思路分析: 1.,明确目标,选择…

基于GA遗传算法的拱桥静载试验车辆最优布载matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于GA遗传算法的拱桥静载试验车辆最优布载matlab仿真。主要是为了实现桥梁静载试验自动化布载(确定车辆位置使得满足加载效率ηq的要求,0…

新能源汽车电机低频电磁场仿真应用

一、背景介绍 随着新能源汽车的普及,电机作为新能源汽车驱动系统的核心组成部分,其重要性不言而喻。电机使电能转化为机械能,通过传动系统将机械能传递到车轮,驱动汽车行驶。新能源汽车电机的发展经历了从初步探索到技术成熟的多…

日志管理工具 简介2 Graylog

Graylog是一个开源的日志聚合、分析、审计、展现和预警工具。功能上和ELK类似,但又比ELK要简单,依靠着更加简洁,高效,部署使用简单的优势很快受到许多人的青睐。 2.1 主要特点 一个包含日志处理所有要素的软件包:收集…

解析os.platform与os.arch:如何准确判断Node.js环境中的Windows操作系统及其位数

os.platform() 方法在 Node.js 中返回的是操作系统平台的标识符,而不是特指操作系统的位数(如 32 位或 64 位)。对于 Windows 操作系统,os.platform() 通常返回 win32,即使你的系统是 64 位的 Windows。 这个返回值 w…

个人微信管理工具:优化社交体验,提升生活效率

在数字化时代,微信已成为我们日常生活中不可或缺的一部分,无论是工作沟通、社交互动还是信息获取,微信都扮演着重要角色。然而,随着微信好友数量的增加和聊天信息的累积,如何高效地管理个人微信,成为了许多…

element table表格树形数据展示

element table表格树形数据展示 1、效果 2、代码 <el-table ref"pointMultipleTable" border class"table-box" :data"[damActiveObj]"row-key"id" :tree-props"{ children: children }" :expand-row-keys"expand…

Java虚拟机:运行时内存结构

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 035 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

如何在 Windows 10 环境下安装和配置 MySQL:初学者指南

如何在 Windows 10 环境下安装和配置 MySQL&#xff1a;初学者指南 MySQL 是一个流行的开源数据库管理系统&#xff0c;广泛应用于各种应用程序中。对于初学者来说&#xff0c;了解如何在 Windows 10 环境下安装和配置 MySQL 是一个重要的第一步。本篇博客将详细介绍如何完成这…

招聘求职小程序

本文来自&#xff1a;ThinkPHPFastAdmin招聘求职小程序 - 源码1688 应用介绍 一款基于ThinkPHPFastAdmin开发的原生微信小程序招聘管理系统。 前端小程序演示&#xff1a; 后台管理网址&#xff1a; https://fastadmin.site100.cn/PbfhegDBAJ.php/index/login 网盘链接&#x…

鸿蒙OS ArkTS 省市县级联选择框,封装组件

背景&#xff1a; 公司现在要开发纯血鸿蒙版本APP&#xff0c;我被抽调过来做点功能。现在要做一个省市县级联选择框&#xff0c;并且要封装为组件&#xff0c;供其他页面模块使用。 效果图&#xff1a; 难点&#xff1a; 1. 现在官方文档上只是查到了TextPicker组件是可以做…

数据重塑之数据去重

下面内容摘录自&#xff1a; 4章7节&#xff1a;用R做数据重塑&#xff0c;数据去重和数据的匹配-CSDN博客文章浏览阅读23次。数据重塑是数据分析和数据清洗中的重要步骤&#xff0c;其中包括数据去重和数据匹配。理解这两个概念以及它们的实现方法对于有效处理和分析数据至关重…

[openSSL]TLS 1.3握手分析

文章目录 前言一、ECDHE密钥交换二、TLS单向身份认证三、TLS双向身份认证 前言 关于TLS握手网上资料很多&#xff0c;但是有一些写的很不清楚&#xff0c;导致学习时对概念和流程出现混淆&#xff0c;以下是我觉得写得比较清晰和准确的供学习参考。 浅析 TLS&#xff08;ECDHE…

C# Binding

1.谁是源, 谁是目标 数据从哪里来,谁就是源 ...数据要给谁,谁就是目标-----<<WPF深入浅出>> 2. 谁绑定(到)谁 谁需要数据, 谁写绑定表达式 . " Binding对象"------- 在<<WPF编程宝典>>中指的是 写 绑定表达式 的这方 案例1: <…

SQL进阶技巧:利用Stack()函数进行列转行及动态列转行方法

目录 0 需求描述 1 数据分析 2 stack()函数应用 stack(int n, v_1, v_2, ..., v_k) n设为3,将后面6个元素按顺序分为3行2列 n设为2,将后面6个元素按顺序分为2行3列 n设为3,将后面7个元素按顺序分为3行3列 n设为6,将后面6个元素转为为6行1列 3 小结 0 需求描述 在…

maven: maven-shade-plugin

文章目录 一、介绍参考&#xff1a; 一、介绍 官网&#xff1a;https://maven.apache.org/plugins/maven-shade-plugin/功能&#xff1a;功能类似assembly&#xff0c;但支持依赖包的重命名&#xff08;避免版本冲突&#xff09;、配置文件的追加&#xff08;避免覆盖&#xf…

应急响应计划:网络安全事件后的快速恢复策略

在数字化时代&#xff0c;网络安全威胁日益严峻&#xff0c;任何企业都无法完全避免遭受网络攻击或数据泄露的风险。因此&#xff0c;制定一套完善的应急响应计划&#xff0c;以便在网络安全事件发生后能够迅速、有效地进行应对和恢复&#xff0c;成为企业保障业务连续性、保护…

c语言学习,strcpy()函数分析

1&#xff1a;strcpy() 函数说明&#xff1a; 将参数src字符串拷贝到参数dest所指的地址 2&#xff1a;函数原型&#xff1a; char *strcpy(char *dest&#xff0c;const char *src) 3&#xff1a;函数参数&#xff1a; 参数dest为目标地址&#xff1b;src待拷贝字符串 4&am…

CMU15445 (Fall 2023) Project2 - EXTENDIBLE HASH INDEX 思路分享

文章目录 Task 1 - Read/Write Page GuardsPageGuard函数实现移动构造函数移动赋值函数UpgradeRead/UpgradeWriteDrop析构函数BufferPoolManager函数实现FetchPageBasicFetchPageRead/FetchPageWriteNewPageGuarded BUG调试 Task2 - Hash Table PageHeader PageDirectory PageB…

zookeeper+kafka消息队列群集部署

什么是消息队列 ▪ 消息&#xff08;Message&#xff09;是指在应用间传送的数据 ▪ 消息队列&#xff08;Message Queue&#xff09;是一种应用间的通信方式解决方法&#xff0c;确保消息的可靠传递 消息队列的特征 ▪ 存储 ▪ 将消息存储在某种类型的缓冲区&#xff0c;…