Don't generate EGL fence in single buffer mode
Don't do sync operations or generate an EGLFence in SurfaceFlinger's
GLConsumer if re-using the same slot for consecutive buffers.
Bug 24940410
Change-Id: I1d42c6e1ebb3be241d3e332e726c898e8671cc8d
diff --git a/libs/gui/GLConsumer.cpp b/libs/gui/GLConsumer.cpp
index 83e4d66..39a7ae3 100644
--- a/libs/gui/GLConsumer.cpp
+++ b/libs/gui/GLConsumer.cpp
@@ -408,15 +408,17 @@
}
// Do whatever sync ops we need to do before releasing the old slot.
- err = syncForReleaseLocked(mEglDisplay);
- if (err != NO_ERROR) {
- // Release the buffer we just acquired. It's not safe to
- // release the old buffer, so instead we just drop the new frame.
- // As we are still under lock since acquireBuffer, it is safe to
- // release by slot.
- releaseBufferLocked(slot, mSlots[slot].mGraphicBuffer,
- mEglDisplay, EGL_NO_SYNC_KHR);
- return err;
+ if (!item.mSingleBufferMode || slot != mCurrentTexture) {
+ err = syncForReleaseLocked(mEglDisplay);
+ if (err != NO_ERROR) {
+ // Release the buffer we just acquired. It's not safe to
+ // release the old buffer, so instead we just drop the new frame.
+ // As we are still under lock since acquireBuffer, it is safe to
+ // release by slot.
+ releaseBufferLocked(slot, mSlots[slot].mGraphicBuffer,
+ mEglDisplay, EGL_NO_SYNC_KHR);
+ return err;
+ }
}
GLC_LOGV("updateAndRelease: (slot=%d buf=%p) -> (slot=%d buf=%p)",