HWC = Hardware Composer HAL
HWC 负责决定使用可用的硬件以最有效的方式合成图像缓冲区
HAL 时 Android 系统架构中的一层, Hardware Abstract Layer (硬件抽象层)。硬件抽象层的实现是设备特定的,被设备厂商实现。
当你考虑多个缓冲区的覆盖融合时, HWC 这种方式的价值就很容易理解了。比如一个 Android 手机竖屏时, 有顶部的状态栏,底部的导航条,和其余的部分, 在上层来说,时三个 Window, SurafceFlinger 来说是三个层, 可以有两种方法来处理:
- 渲染所有的层到另一个 缓冲区, 然后将最终的缓冲区给显示器硬件
- 把所有的层给显示器硬件, 它读取不同的部分合成显示出来
后一种当然会更有效,因为融合的工作交给硬件做了。但是并不是所有的硬件都支持这样的操作。所以 HAL 进行了抽象, SurfaceFlinger 会询问 HWC 是否支持,如果支持,就用第二种,如果不支持,就用第一种。
SurfaceFlinger 对层的融合需要 GLES, 这就需要占用显存, 还会更加耗电。
明天: 每天一点点音视频_HWC1