明白了 fence 的基本原理,我们可以进一步的探索整个 SurfaceFlinger 的中 fence 在其中处于什么角色。
一、流转状态
从启动到屏幕的第一帧的渲染,fence 是不会有任何效果的。因为此时 fence 还没有经过 hwc_set 给 fence 进行赋值。但是到了第二帧开始,已经存在的 Layer 已经经过了 hwc_set 的赋值,存在 Layer 的 releaseFence 中。
SurfaceFlinger 中核心的 4 个流程:
- dequeueBuffer:GraphicBuffer 的出队。
- queueBuffer:GraphicBuffer 的入队。
- updateTexImage:GraphicBuffer 的消费。
- releaseBufferLocked:GraphicBuffer 的释放
下面我们看一下 Fence 在上面几个流程中参与的角色。
1、dequeueBuffer
我们先来看看 Surface 中的 lock 方法,这个方法是 onDraw 方法之前,ViewRootImpl 绘制之前进行调用。这个方法最终会调用 IGraphicBuffe
标签:dequeueBuffer,set,Fence,fence,hwc,SurfaceFlinger,Android,GraphicBuffer From: https://blog.csdn.net/c19344881x/article/details/140826570