马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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)
----------------后续有时间再补充
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |