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

HWC

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

android 14

c 复制代码
/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进程事件。

c 复制代码
 registerCallback(IComposerCallback callback);

IComposerCallback在IComposerCallback .hal中定义

c 复制代码
/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同步信号

硬件混合渲染器合成

创建图层

cpp 复制代码
/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)

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

相关推荐
zgyhc20503 小时前
【Android Audio】dumpsys media.metrics分析
android
nono牛3 小时前
Android Binder 详解与实践指南
android·binder
小镇学者3 小时前
【PHP】PHP WebShell(网页木马)分析
android·开发语言·php
思成不止于此4 小时前
【C++ 数据结构】二叉搜索树:原理、实现与核心操作全解析
开发语言·数据结构·c++·笔记·学习·搜索二叉树·c++40周年
2501_916007474 小时前
iOS 压力测试的工程化体系,构建高强度、多维度、跨工具协同的真实负载测试流程
android·ios·小程序·uni-app·cocoa·压力测试·iphone
碧海潮生_CC5 小时前
【CUDA笔记】03 CUDA GPU 架构与一般的程序优化思路(下)
笔记·架构·cuda
钟屿5 小时前
Back to Basics: Let Denoising Generative Models Denoise 论文阅读学习
论文阅读·人工智能·笔记·学习·计算机视觉
d111111111d5 小时前
SPI通信协议--在STM32中介绍(学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习
毕设源码-钟学长6 小时前
【开题答辩全过程】以 浮生馆汉服租赁管理系统为例,包含答辩的问题和答案
android·java·tomcat
愚昧之山绝望之谷开悟之坡6 小时前
业务接待-公务接待-商务接待
笔记