SurfaceFlinger, RenderEngine和Skia

Skia 主要负责 图形绘制,而 合成(Composition) 主要由 SurfaceFlinger 和 HWC(Hardware Composer) 负责。两者是 不同层级 的概念,但它们确实有 联系,因为 Skia 生成的图像最终需要通过 SurfaceFlinger 进行合成并显示到屏幕上。

1. Skia 的作用(绘制)

Skia 是 Android 的 2D 图形库,它主要用于:

  • 绘制 UI 元素(文本、图形、路径等)。
  • 生成 GPU BufferCPU Bitmap,供 SurfaceFlinger 进一步处理。
  • Canvas API 的底层实现(Java 层 Canvas.drawXXX() 方法最终由 Skia 负责绘制)。

💡 简单来说,Skia 负责 "画",但不负责 "贴"(合成)


2. SurfaceFlinger 的作用(合成)

  • 收集不同应用提交的 buffer(通常是 Skia 绘制的图像)。
  • 决定哪些 layer(窗口)显示在屏幕上,如何合成它们
  • 调用 HWC(Hardware Composer) 尽量用硬件合成,提高效率

💡 SurfaceFlinger 负责 "贴",决定怎么把不同 APP 画的内容组合在一起显示


3. Skia 和合成的联系

虽然 Skia 不直接参与合成,但它 绘制的内容最终会被 SurfaceFlinger 处理

  1. APP 通过 Skia 绘制 UI 到 Surface(GPU buffer 或 CPU Bitmap)。
  2. 这个 Surface 通过 SurfaceControl 传递给 SurfaceFlinger。
  3. 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 的内容会被提交到

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值