status_t BufferQueueLayer::updateActiveBuffer() {
// update the active buffer
mPreviousBufferId = getCurrentBufferId();
mBufferInfo.mBuffer =
mConsumer->getCurrentBuffer(&mBufferInfo.mBufferSlot, &mBufferInfo.mFence);
if (mBufferInfo.mBuffer == nullptr) {
// this can only happen if the very first buffer was rejected.
return BAD_VALUE;
}
return NO_ERROR;
}
调用 Layer::getCurrentBufferId() 更新 mPreviousBufferId。mPreviousBufferId 在 onLayerDisplayed() 中用来跟踪 fence。
调用 BufferLayerConsumer::getCurrentBuffer() 更新 BufferLayer::BufferInfo 的 mBuffer、mBufferSlot 和 mFence 成员。