am f7613743: Merge "Don\'t call hwc set() if there is nothing new to do" into ics-mr0

* commit 'f7613743f29f38cbbaf4ae09996c380845a17daf':
  Don't call hwc set() if there is nothing new to do
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index e2b671a..a28fd54 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -411,6 +411,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();
@@ -444,6 +449,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;
@@ -892,7 +900,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;
@@ -1687,7 +1695,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();
 }