Loading services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp +10 −12 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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(), Loading @@ -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() { Loading Loading @@ -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; } Loading Loading
services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp +10 −12 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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(), Loading @@ -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() { Loading Loading @@ -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; } Loading