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)
----------------后续有时间再补充