HWUI 和 Skia
📌 HWUI 和 Skia 的关系
- Skia 是 Android 的底层 2D 图形库,提供 CPU 和 GPU 渲染能力,支持 OpenGL、Vulkan、Metal 等后端。
- HWUI 是 Android UI 组件的 GPU 渲染引擎,主要用于 加速 View、动画、阴影等 UI 元素的绘制。
- HWUI 依赖 Skia 进行实际的绘制,但它有自己的一套绘制管理逻辑,并优化了 Android UI 的绘制流程。
📌 HWUI 如何使用 Skia
从 Android 10(API 级别 29)开始,HWUI 完全迁移到 Skia GPU 渲染,主要基于 Skia 的 OpenGL/Vulkan 后端 进行 GPU 计算。
🔹 主要架构
Android UI 绘制
├── 应用层:View (TextView, ImageView, etc.)
├── Framework:Canvas API (drawXXX)
├── **HWUI(渲染引擎)**
│ ├── RenderThread
│ ├── DisplayListRenderer
│ ├── SkiaGL/VulkanPipeline <--- 这里使用 Skia 进行 GPU 渲染
│ └── OpenGL/Vulkan(GPU 计算)
├── SurfaceFlinger(合成)
├── 硬件层(GPU/DPU 显示)
🔹 关键点
-
应用调用 View.draw(Canvas)
Canvas.drawXXX()
其实是 HWUI 提供的 Skia Canvas,不是纯 Skia。- HWUI 维护了一套
DisplayList
,用于存储绘制指令。
-
HWUI 使用 Skia 进行 GPU 绘制
- HWUI 通过
SkiaGLPipeline
或SkiaVulkanPipeline
将 DisplayList 转换成 Skia 绘制命令。 - Skia 生成 OpenGL/Vulkan 渲染指令,交给 GPU 进行计算。
- HWUI 通过
-
最终输出到 SurfaceFlinger
- HWUI 处理完成后,将渲染结果写入
Surface
,再由 SurfaceFlinger 进行合成。
- HWUI 处理完成后,将渲染结果写入
📌 结论
✅ HWUI 依赖 Skia 进行 GPU 渲染,但它有自己的一套绘制逻辑,并不是简单的 Skia 封装。
✅ Skia 负责底层绘制,而 HWUI 负责 UI 组件的绘制管理(比如 DisplayList、动画、缓存)。
✅ Android 10 之后,HWUI 不再直接操作 OpenGL,而是完全基于 Skia GPU 渲染。
使用 adb shell dumpsys gfxinfo
命令,查看 GPU 渲染状态:
adb shell dumpsys gfxinfo <应用包名>