HWC 合成与Graphics 合成的区别
在 Android 图形系统中,HWC 合成(Hardware Composer 合成) 和 Graphics 合成(GPU 合成) 是两种不同的图层合成方式。它们的主要区别在于谁来负责将多个图层合成为最终显示的图像:
🧱 一、基本概念
合成方式 | 负责者 | 特点 |
---|---|---|
HWC 合成 | 硬件合成器(Hardware Composer) | 高效、低功耗,适合静态图层 |
Graphics 合成(又称 GPU 合成) | GPU(图形处理器) | 灵活、支持复杂效果,但功耗高 |
🧩 二、工作流程对比
✅ HWC 合成(Hardware Composer)
- Android 系统通过 SurfaceFlinger 将多个图层交给 HWC(HAL 层)。
- HWC 判断哪些图层可以直接由 显示控制器(Display Controller) 合成。
- 这些图层不需要 GPU 参与,直接送到屏幕。
优点:
- 节省 GPU 资源
- 更省电
- 合成速度快
适用场景:
- 静态图层(如视频播放、背景图)
- 没有复杂变换或透明度的图层
✅ Graphics 合成(GPU 合成)
- SurfaceFlinger 将图层交给 GPU,使用 OpenGL 或 Vulkan 进行合成。
- GPU 将多个图层绘制到一个 Framebuffer 中,再交给显示器。
优点:
- 支持复杂图层效果(如透明、旋转、动画)
- 灵活性高
缺点:
- GPU 占用高
- 功耗大
- 可能导致掉帧
适用场景:
- 动画、半透明图层、复杂变换
- HWC 不支持的图层
🔄 三、混合使用(混合合成)
在实际应用中,Android 会采用 混合合成策略:
- 能用 HWC 的图层交给 HWC
- 其余图层交给 GPU 合成
- 最终由 SurfaceFlinger 统一提交帧
🧪 四、如何查看合成方式?
你可以通过以下方式查看当前帧的合成方式:
dumpsys SurfaceFlinger
:查看每个图层的合成类型(HWC / GLES)- Systrace / Perfetto:查看合成路径和耗时
- 开发者选项 → GPU 渲染分析:查看每帧的 GPU 压力
📌 总结对比
项目 | HWC 合成 | GPU 合成 |
---|---|---|
合成者 | 显示控制器 | GPU |
性能 | 高效 | 灵活但耗资源 |
功耗 | 低 | 高 |
支持效果 | 有限 | 丰富 |
适用场景 | 静态图层 | 动态/复杂图层 |