赞
踩
明白了 fence 的基本原理,我们可以进一步的探索整个 SurfaceFlinger 的中 fence 在其中处于什么角色。
从启动到屏幕的第一帧的渲染,fence 是不会有任何效果的。因为此时 fence 还没有经过 hwc_set 给 fence 进行赋值。但是到了第二帧开始,已经存在的 Layer 已经经过了 hwc_set 的赋值,存在 Layer 的 releaseFence 中。
SurfaceFlinger 中核心的 4 个流程:
- dequeueBuffer:GraphicBuffer 的出队。
- queueBuffer:GraphicBuffer 的入队。
- updateTexImage:GraphicBuffer 的消费。
- releaseBufferLocked:GraphicBuffer 的释放
下面我们看一下 Fence 在上面几个流程中参与的角色。
我们先来看看 Surface 中的 lock 方法,这个方法是 onDraw 方法之前,ViewRootImpl 绘制之前进行调用。这个方法最终会调用 IGraphicBuffe
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。