Fork me on GitHub
侧边栏

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
性能 高效 灵活但耗资源
功耗
支持效果 有限 丰富
适用场景 静态图层 动态/复杂图层
posted @ 2025-07-07 16:40  yooooooo  阅读(259)  评论(0)    收藏  举报