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

embedded/2024/9/18 12:54:29/ 标签: 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/embedded/95036.html

相关文章

关于left join、inner join、where 控制条件的区别

首先了解left join、inner join 的区别 left join :以主表数据为主,子表关联不到就为null。 inner join : 主表有的子表也得有,才能关联到。 例: 学生表(a表):学生id,学生名称 课程记录表&…

如何保持git主分支树的整洁

经典应用展示Git版本控制用法 本章将列举Git的一些闪亮特性,期待能够让您爱上Git 文章目录 经典应用展示Git版本控制用法前言一、分支是什么?二、主-分支合并merge三、cherry-pick(精挑细选)四、Rebase(变基)4.1 合并本地分支到主分支4.2 合并本地分支从指定commit开始的…

【Python-办公自动化】几秒搞定几天的工作量之根据指定要求汇总求和排序成278张表格

欢迎来到"花花 Show Python",一名热爱编程和分享知识的技术博主。在这里,我将与您一同探索Python的奥秘,分享编程技巧、项目实践和学习心得。无论您是编程新手还是资深开发者,都能在这里找到有价值的信息和灵感。 自我介…

Spring中dbUtil的概念和搭建使用

目录 1、什么是dbUtil 2、lombok插件 3、dbUtil通过xml来实现 4、SpringJunit的作用和效果 (1)标记测试方法和配置方法的注解 5、dbUtil通过注释来实现 6、dbUtil通过config配置类来实现 7、dbUtil通过aop的XML的实现 (1&#xff09…

手机在不同地方ip地址一样吗

在这个数字化时代,手机已成为我们日常生活中不可或缺的一部分,它不仅是我们沟通的工具,更是我们获取信息、娱乐休闲和社交互动的重要平台。然而,你是否曾好奇过,当你带着手机穿梭于不同的地方,手机的IP地址…

Hive学习(一)

一、Hive基本概念 1.简介:是基于Hadoop的一个数据仓库工具,可以将结 构化的数据文件映射成一张表,并提供 SQL查询功能,用于解决海量数据结构化日志的数据统计工具。 2.本质:将HQL转换成MapReduce程序 1&#…

网站如何被Google收录?

想让你的网站快速被Google收录?试试GSI快速收录服务吧,这是通过谷歌爬虫池系统来实现的。这套系统吸引并圈养Google爬虫,提高你网站的抓取频率。每天有大量Google爬虫抓取你的网站页面,大大提高了页面的收录概率,从而增…

FFmpeg源码:avio_tell函数分析

AVIOContext结构体和其相关的函数分析: FFmpeg源码:avio_r8、avio_rl16、avio_rl24、avio_rl32、avio_rl64函数分析 FFmpeg源码:avio_tell函数分析 一、avio_tell函数的定义 avio_tell函数定义在FFmpeg源码(本文演示用的FFmpeg…

算法:排序(前言)

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的…

Sputnik 打靶渗透

一、信息收集 1、查看靶机的MAC地址: 2、查看靶机的ip地址: nmap 192.168.13.0/24 3、查看靶机开放的端口: nmap -p- -sC -sT -sV -A 192.168.13.159 4、分别访问靶机的8089、55555和61337端口,发现在61337端口有一个登录框&…

服务器远程管理-Windows远程桌面协议实操

目录 1.因为是在内网所有将操控服务器的计算机与服务器放在同一网段,如果是真实服务器可以直接访问其公网ip 2.启用远程桌面 3.在本地计算机连接远程计算机 4.连接成功 连接远程桌面方式有两种: 方式一:远程桌面通讯协议(RDP…

SQL面试题练习 —— 有序行转列

目录 1 题目2 建表语句3 题解 1 题目 有学生各学科分数表,记录了学生的各科分数,请按照学生粒度,生成两列数据分别为学科和分数,要求学科内的顺序与分数顺序一致。 样例数据 期望结果 2 建表语句 --建表语句 create table if not…

HNU-2024计算机系统-小班讨论5

写在前面: 本次小班的选题依旧开放性很强,需要通过阅读老师发的pdf文档来完成相应的程序设计,从而实现矩阵乘法的高性能计算,通过本次讨论课的学习,同学们可以对程序性能优化有一个更加清楚的认识和理解。 本文所有题目由全组同学…

php json_decode 带反斜杠字符串json解析

PHP json_decode 带反斜杠字符串json解析 今天再次遇到了json字符串中包含反斜杠的问题,记录下解决方法 在JSON字符串中,反斜杠\用作转义字符。当JSON_UNESCAPED_SLASHES选项被用于json_encode()函数时,不会在slashes前面添加反斜杠。 但是…

Spring Boot--05--配置文件Properties

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 配置文件Propertiesnacos 配置 配置文件Properties import com.alibaba.fastjson.JSON;import com.tuzhanai.cbsp.business.common.utils.JSRValidatorUtil; import…

VisionFM

VisionFM: a Multi-Modal Multi-Task Vision Foundation Model for Generalist Ophthalmic Artificial Intelligence 阅读感受: Recently, AI foundation models (FMs), such as GPT-417 and SAM18, have emerged and has the potential to transform many research…

HTTP请求的流转路径,从Tomcat到SpringMVC

本文主要讲一下,一个HTTP请求在后端服务的流转路径,Tomcat等一众servlet容器如何定义了Web应用的基础样貌,后来的MVC框架又是如何弱化了servlet的存在,改为自己实现请求派发的。 前些日子我写了十几篇文章来介绍Tomcat的架构&…

浅谈Sql Server 视图

一、视图简介 SQL 视图(Views)是一种虚拟表,是基于 SQL 查询结果生成的。这些虚拟表可以包含来自一个或多个表的数据,并且可以像表一样查询;视图是一个表中的数据经过某种筛选后的显示方式,或者多个表中的数…

微信小程序--23(条件渲染)

一、wx&#xff1a;if 1.作用 来判断是否需要渲染 2.语句 wx&#xff1a;if “{{condition}}”来判断是否需要渲染该代码块 wx&#xff1a;elifwx&#xff1a;else 用来添加else判断 3.演示 二、<block> wx&#xff1a;if 1.作用 <block>标签&#xff1a;…

UniApp开发的开源工厂设备管理维护系统

本文来自&#xff1a;UniApp开发的开源工厂设备管理维护系统 - 源码1688 前端小程序演示地址&#xff1a; 后台测试网址&#xff1a; https://shebeiguanli.azheteng.cn/pyswkAWtig.php/addon?refaddtabs 测试账户&#xff1a; admin 测试密码&#xff1a; admin888 前端…