我爱普洱茶 发表于 2024-8-8 22:27:03

android display 条记(五)HWC(Hardware 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
358Error 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)
----------------后续有时间再补充

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: android display 条记(五)HWC(Hardware Composer)