sp<GraphicBuffer> BufferLayerConsumer::getCurrentBuffer(int* outSlot, sp<Fence>* outFence) const {
Mutex::Autolock lock(mMutex);
if (outSlot != nullptr) {
*outSlot = mCurrentTexture;
}
if (outFence != nullptr) {
*outFence = mCurrentFence;
}
return mCurrentTextureBuffer == nullptr ? nullptr : mCurrentTextureBuffer->graphicBuffer();
}
实现很简单,把 mCurrentTexture
、mCurrentFence
赋值给 outSlot
和 outFence
,如果 mCurrentTextureBuffer
是非空,则返回 mCurrentTextureBuffer->graphicBuffer()
。
它们是在 BufferLayerConsumer::updateAndReleaseLocked() 中更新的,其实就是从 BufferQueueConsumer::acquireBuffer() 返回的 buffer 信息。