在前面的文章中,我们已经介绍了 Android SurfaceFlinger 渲染体系中整体流程,同时在很多代码中都会看到围栏(Fence)的身影,这里我们就来分析一下围栏(Fence)的实现原理。
一、基础概述
在 Android 的 SurfaceFlinger 组件中,围栏(Fence)是一种用于同步不同系统组件间操作完成的机制。围栏的概念来源于硬件图形加速器(如 GPU)和其他系统服务(如 SurfaceFlinger)之间的同步需求。在图形渲染和显示的过程中,多个组件可能会并发地访问共享资源(如缓冲区),为了确保数据的一致性和操作的正确顺序,就需要一种机制来协调这些操作,这就是围栏的作用。
基本概念
- 围栏:是一种同步原语,用于指示一个异步操作的完成状态。在图形渲染的上下文中,它通常用于等待 GPU 完成对缓冲区的渲染操作,或者等待显示设备完成对缓冲区的显示操作。
- 信号(Signal):当一个异步操作完成时,围栏会被“信号”(signaled),这意