diff options
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 3c48b7e270..595ec1e121 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -445,6 +445,11 @@ bool SurfaceFlinger::threadLoop() // post surfaces (if needed) handlePageFlip(); + if (mDirtyRegion.isEmpty()) { + // nothing new to do. + return true; + } + if (UNLIKELY(mHwWorkListDirty)) { // build the h/w work list handleWorkList(); @@ -478,6 +483,9 @@ bool SurfaceFlinger::threadLoop() void SurfaceFlinger::postFramebuffer() { + // this should never happen. we do the flip anyways so we don't + // risk to cause a deadlock with hwc + LOGW_IF(mSwapRegion.isEmpty(), "mSwapRegion is empty"); const DisplayHardware& hw(graphicPlane(0).displayHardware()); const nsecs_t now = systemTime(); mDebugInSwapBuffers = now; @@ -938,7 +946,7 @@ void SurfaceFlinger::setupHardwareComposer(Region& dirtyInOut) // data. // // Also we want to make sure to not clear areas that belong to - // layers above that won't redraw (we would just erasing them), + // layers above that won't redraw (we would just be erasing them), // that is, we can't erase anything outside the dirty region. Region transparent; @@ -1769,7 +1777,7 @@ status_t SurfaceFlinger::onTransact( void SurfaceFlinger::repaintEverything() { Mutex::Autolock _l(mStateLock); const DisplayHardware& hw(graphicPlane(0).displayHardware()); - mDirtyRegion.set(hw.bounds()); // careful that's not thread-safe + mDirtyRegion.set(hw.bounds()); signalEvent(); } |