HWC 简介
HWC
这个东西, 之前也是比较困扰我理解的东西, 一直想问个明白, 这东西是个啥, 具体有啥作用。
看图扯淡下
hwc
设备, 可以想象成一个物理混合器, SF
把多个Surface
输出给hwc
, hwc
按照Surface
的属性, 把多个Surface
混合成一个Surface
, 最后输出到Display
.
代码层可以分为两部分去看:
1: HWComposer
先从VSync
的角度看, 这是SF
与hwc
交互的一个桥梁。
2: hwc_composer_device_1
物理设备与上层交互的接口。
VSync初始化流程
之前看代码的时候一直不是太喜欢看整个初始化流程, 只喜欢看关键调用流程, 这样看问题的话, 不容易理解的全面。 想了解VSync
的整个运作流程, 其实看完初始化的流程再看VSync
的响应流程, 就特别清晰明了。
关键看图中的红线
SF
初始化的时候, 先创建 HWComposer
。
HWComposer
是一个桥梁的作用, 具体由cb_context
进行连接。
mCBContext->hwc = this;
mCBContext->procs.invalidate = &hook_invalidate;
mCBContext->procs.vsync = &hook_vsync;
if (hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_1))
mCBContext->procs.hotplug = &hook_hotplug;
else
mCBContext->procs.hotplug = NULL;
memset(mCBContext->procs.zero, 0, sizeof(mCBContext->procs.zero));
mHwc->registerProcs(mHwc, &mCBContext->procs);
代码逻辑其实就是红线部分, 把回调接口连接上。
VSync响应流程
流程就是蓝色线条。
硬件产生信号, 最后传到SF
。