am 14e8b01a: Don\'t change the framebuffer target until we render a new one

* commit '14e8b01a761180250671f3d6494532d8bd04fa8e':
  Don't change the framebuffer target until we render a new one
This commit is contained in:
Jesse Hall 2013-11-08 12:58:20 -08:00 committed by Android Git Automerger
commit 1ee45c2d2d

View File

@ -174,14 +174,8 @@ status_t VirtualDisplaySurface::advanceFrame() {
}
mDbgState = DBG_STATE_HWC;
if (mCompositionType == COMPOSITION_HWC) {
// Use the output buffer for the FB as well, though conceptually the
// FB is unused on this frame.
mFbProducerSlot = mOutputProducerSlot;
mFbFence = mOutputFence;
}
if (mFbProducerSlot < 0 || mOutputProducerSlot < 0) {
if (mOutputProducerSlot < 0 ||
(mCompositionType != COMPOSITION_HWC && mFbProducerSlot < 0)) {
// Last chance bailout if something bad happened earlier. For example,
// in a GLES configuration, if the sink disappears then dequeueBuffer
// will fail, the GLES driver won't queue a buffer, but SurfaceFlinger
@ -191,7 +185,8 @@ status_t VirtualDisplaySurface::advanceFrame() {
return NO_MEMORY;
}
sp<GraphicBuffer> fbBuffer = mProducerBuffers[mFbProducerSlot];
sp<GraphicBuffer> fbBuffer = mFbProducerSlot >= 0 ?
mProducerBuffers[mFbProducerSlot] : sp<GraphicBuffer>(NULL);
sp<GraphicBuffer> outBuffer = mProducerBuffers[mOutputProducerSlot];
VDS_LOGV("advanceFrame: fb=%d(%p) out=%d(%p)",
mFbProducerSlot, fbBuffer.get(),
@ -201,7 +196,12 @@ status_t VirtualDisplaySurface::advanceFrame() {
// so update HWC state with it.
mHwc.setOutputBuffer(mDisplayId, mOutputFence, outBuffer);
return mHwc.fbPost(mDisplayId, mFbFence, fbBuffer);
status_t result = NO_ERROR;
if (fbBuffer != NULL) {
result = mHwc.fbPost(mDisplayId, mFbFence, fbBuffer);
}
return result;
}
void VirtualDisplaySurface::onFrameCommitted() {
@ -458,9 +458,7 @@ void VirtualDisplaySurface::resetPerFrameState() {
mCompositionType = COMPOSITION_UNKNOWN;
mSinkBufferWidth = 0;
mSinkBufferHeight = 0;
mFbFence = Fence::NO_FENCE;
mOutputFence = Fence::NO_FENCE;
mFbProducerSlot = -1;
mOutputProducerSlot = -1;
}