在 SurfaceFlinger 的 Layer 处理逻辑中,除了常见的 Client Composition(GPU合成) 和 Device Composition(HWC合成),还存在一些特殊的合成方式,比如 Sideband、Solid Color 和 Display Decoration。这些都是通过 CompositionType
进行区分的:
Sideband Composition(旁路流 Sideband 流)
🔹 定义:
-
这是一种 外部流输入(Sideband Stream) 的合成方式,通常用于 低延迟的多媒体流(例如 IPTV、外部解码器视频)。
-
数据源不是常规的 Graphic Buffer,而是一个 Sideband Stream,它会通过
sideband stream
字段传递,而不是buffer
。
🔹 常见应用:
-
硬件视频解码器(比如 MediaTek、Qualcomm 等方案的 Zero-Copy 视频)
-
Wi-Fi Display(Miracast 无线投屏)
-
低延迟视频流,比如 IPTV 播放
🔹 Dumpsys 里的表现:
buffer: buffer=0x0
sideband stream=0xb40000770a9efe60
-
buffer=0x0
:表示这个 Layer 没有普通的 GraphicBuffer,而是依赖sideband stream
。 -
sideband stream
:表示该 Layer 绑定了一个 外部数据流,SurfaceFlinger 不会自己合成,而是交由 HWC 处理。
2️⃣ Solid Color Composition(纯色填充)
🔹 定义:
-
用于绘制 纯色 Layer,通常用于 UI 组件,比如背景、蒙版等,不需要绑定 Buffer。
-
颜色信息存储在
color
字段,而不是buffer
里。
🔹 常见应用:
-
透明遮罩(比如暗淡背景层)
-
渐变背景(如果不使用着色器的话)
-
系统 UI(比如通知栏背景)
🔹 Dumpsys 里的表现:
buffer: buffer=0x0
color=[0.000000 0.000000 0.000000]
-
buffer=0x0
:这个 Layer 不使用 Buffer,直接填充颜色。 -
color=[R G B]
:RGB 颜色值(范围 0.0 - 1.0)。
3️⃣ Display Decoration(显示装饰)
🔹 定义:
-
这是 专门用于系统装饰的 Layer,通常和 圆角裁剪(Rounded Corners)、水滴屏(Notch)、屏下指纹动画 相关。
-
这些 Layer 通常不会参与普通应用的合成,而是专门用于屏幕的 UI 效果。
🔹 常见应用:
-
屏幕圆角遮罩
-
挖孔屏的 UI 裁剪
-
屏下指纹动画
-
Always-On Display(AOD,息屏显示)
🔹 Dumpsys 里的表现:
* Layer 0xb40000776aa87410 (Display Overlays#65)
-
这个 Layer 一般和 Display Overlays 相关,是 SurfaceFlinger 额外创建的系统 UI 组件。
-
可能包含特殊的
Dataspace
(比如Dataspace::DISPLAY_DECORATION
)。
总结
Composition 类型 | 描述 | 典型应用 | 是否绑定 Buffer |
---|---|---|---|
Sideband Composition | 旁路流输入,直接由 HWC 处理 | 硬件解码视频流(IPTV、Wi-Fi Display) | ❌ 绑定 sideband stream |
Solid Color Composition | 纯色填充 | UI 背景、透明蒙版 | ❌ 绑定 color |
Display Decoration | 系统 UI 装饰 | 圆角、挖孔、水滴屏、AOD | ✅ 可能绑定特殊 Buffer |
实际上一般的Video硬解播放也不会走sideband stream,可能只能tunnel mode才会走。