上一篇文章对 HWC 硬件加载流程进行了分析,在加载完成后开始创建 HAL 实例时,首先需要对 hwc2_device_t 的适配器进行初始化,这里我们主要分析 HWC Adapter 的创建流程。
一、创建HWC Adapter
在创建 HAL 实例之前,我们先来看一下 HWC Adapter 的创建。
1、createHalWithAdapter
源码位置:/hardware/interfaces/graphics/composer/2.1/utils/passthrough/include/composer-passthrough/2.1/HwcLoader.h
// 创建一个ComposerHal实例,必要时插入一个适配器
static std::unique_ptr<hal::ComposerHal> createHalWithAdapter(const hw_module_t* module) {bool adapted;// 打开hwcomposer2设备hwc2_device_t* device = openDeviceWithAdapter(module, &adapted);if (!device) {return nullptr;}auto hal = std::make_unique<HwcHal>();return hal->initWithDevice(std::move(device), !adapted) ? std::move(hal) : nullptr;
}
这个过程做了两件事情,第一件事情就是 openDeviceWithAdapter 初始化 hwc2_device_t 适配器,第二件事情就是实例化 HwcHal 对象并且设置 hwc2_dev