Skia 主要负责 图形绘制,而 合成(Composition) 主要由 SurfaceFlinger 和 HWC(Hardware Composer) 负责。两者是 不同层级 的概念,但它们确实有 联系,因为 Skia 生成的图像最终需要通过 SurfaceFlinger 进行合成并显示到屏幕上。
1. Skia 的作用(绘制)
Skia 是 Android 的 2D 图形库,它主要用于:
- 绘制 UI 元素(文本、图形、路径等)。
- 生成
GPU Buffer或CPU Bitmap,供 SurfaceFlinger 进一步处理。 - Canvas API 的底层实现(Java 层
Canvas.drawXXX()方法最终由 Skia 负责绘制)。
💡 简单来说,Skia 负责 "画",但不负责 "贴"(合成)。
2. SurfaceFlinger 的作用(合成)
- 收集不同应用提交的
buffer(通常是 Skia 绘制的图像)。 - 决定哪些
layer(窗口)显示在屏幕上,如何合成它们。 - 调用
HWC(Hardware Composer) 尽量用硬件合成,提高效率。
💡 SurfaceFlinger 负责 "贴",决定怎么把不同 APP 画的内容组合在一起显示。
3. Skia 和合成的联系
虽然 Skia 不直接参与合成,但它 绘制的内容最终会被 SurfaceFlinger 处理:
- APP 通过 Skia 绘制 UI 到
Surface(GPU buffer 或 CPU Bitmap)。 - 这个
Surface通过 SurfaceControl 传递给 SurfaceFlinger。 - SurfaceFlinger 读取这个 buffer,决定如何合成,再交给 HWC 进行最终显示。
可以理解成:
- Skia 负责"画图" 🎨
- SurfaceFlinger 负责"排版" 📌
- HWC 负责"贴图" 🖼️
4. 代码示例:Skia 绘制 + 提交到 SurfaceFlinger
假设你在 APP 里用 Skia 直接绘制:
void draw(SkCanvas* canvas) {
SkPaint paint;
paint.setColor(SK_ColorRED);
canvas->drawRect(SkRect::MakeWH(100, 100), paint); // 画一个红色方块
}
然后这个 canvas 的内容会被提交到


1735

被折叠的 条评论
为什么被折叠?



