Merge "Don't call hwc set() if there is nothing new to do" into ics-mr0
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 3c48b7e..595ec1e 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -445,6 +445,11 @@
     // 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 @@
 
 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 @@
         // 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 @@
 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();
 }