HWUI 和 Skia

📌 HWUI 和 Skia 的关系

  1. Skia 是 Android 的底层 2D 图形库 ,提供 CPU 和 GPU 渲染能力,支持 OpenGL、Vulkan、Metal 等后端。
  2. HWUI 是 Android UI 组件的 GPU 渲染引擎 ,主要用于 加速 View、动画、阴影等 UI 元素的绘制。
  3. 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 显示)

🔹 关键点

  1. 应用调用 View.draw(Canvas)

    • Canvas.drawXXX() 其实是 HWUI 提供的 Skia Canvas,不是纯 Skia。
    • HWUI 维护了一套 DisplayList,用于存储绘制指令。
  2. HWUI 使用 Skia 进行 GPU 绘制

    • HWUI 通过 SkiaGLPipeline 或 SkiaVulkanPipeline 将 DisplayList 转换成 Skia 绘制命令。
    • Skia 生成 OpenGL/Vulkan 渲染指令,交给 GPU 进行计算。
  3. 最终输出到 SurfaceFlinger

    • HWUI 处理完成后,将渲染结果写入 Surface,再由 SurfaceFlinger 进行合成。

📌 结论

✅ HWUI 依赖 Skia 进行 GPU 渲染 ,但它有自己的一套绘制逻辑,并不是简单的 Skia 封装。

✅ Skia 负责底层绘制 ,而 HWUI 负责 UI 组件的绘制管理(比如 DisplayList、动画、缓存) 。

✅ Android 10 之后,HWUI 不再直接操作 OpenGL,而是完全基于 Skia GPU 渲染。

使用 adb shell dumpsys gfxinfo 命令,查看 GPU 渲染状态:

复制代码
adb shell dumpsys gfxinfo <应用包名>
相关推荐
思码梁田2 个月前
CSS display 属性:从元素类型转换到隐藏元素的实用指南
前端·css·display·inline·block·none·inline-block
持续学习和阅读10 个月前
【OpenGL】OpenGL ES 应用开发实践指南
gpu·display·opengles·gles 应用
alwaysrun1 年前
Rust中字符串与格式化
rust·display·格式化·string·str·精度
高心星1 年前
鸿蒙项目开发——Window和Display获取屏幕信息
华为·harmonyos·display·window·屏幕管理·harmony5.1
Damon_X2 年前
DRM_CLIENT_CAP_UNIVERSAL_PLANES和DRM_CLIENT_CAP_ATOMIC
display
Damon_X2 年前
SurfaceFlinger代码笔记
display
Damon_X2 年前
帧缓存的分配
display
锦天2 年前
弹性布局 flex layout HTML CSS
css·html·display·flex·弹性布局·justify-content·flex layout
唐诺3 年前
Android 获取屏幕方向,根据屏幕旋转角度判断屏幕实际方向
android·display·windowmanager·rotation