我一直在阅读此URL以了解表面fling。
https://source.android.com/devices/graphics/arch-sf-hwc
其中,以下块我无法理解。如果有人用例子解释,那将是很棒的。
覆盖平面的效率可能不如什么 屏幕上正在改变。当覆盖时尤其如此 内容具有透明像素,重叠层被混合 一起。在这种情况下,HWC可以选择请求GLES 某些或所有层的组成,并保留合成的缓冲液。 如果SurfaceFlinger回来要求将相同的一组 缓冲区,HWC可以继续显示以前的复合 刮擦缓冲区。这可以改善空闲设备的电池寿命。
想象一下组合两架飞机。
如果您使用显示控制器覆盖平面,那么每个输出框架扫描到面板上都会读取两架飞机。
如果您使用GPU组成,则更改后的第一帧更昂贵:
- gpu读了两架飞机
- gpu写一架平面
- 显示控制器读取一架平面
...因此,四组内存访问,而不仅仅是两个。但是,如果下一次扫描没有任何更改,您可以跳过GPU组成步骤,然后让Display Controller读取先前复合的缓冲区:
- 显示控制器读取一架平面
...与一直使用覆盖平面相比,在扫描过程中节省了一个帧。