Merge "SF: Clean up updateTransformHint() processing." into pi-dev
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index ea75958..bf76ef5 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2447,7 +2447,7 @@
         processDisplayHotplugEventsLocked();
     }
 
-    if (transactionFlags & (eTraversalNeeded|eDisplayTransactionNeeded)) {
+    if (transactionFlags & (eDisplayLayerStackChanged|eDisplayTransactionNeeded)) {
         // The transform hint might have changed for some layers
         // (either because a display has changed, or because a layer
         // as changed).
@@ -2494,18 +2494,18 @@
                 }
             }
 
-            if (transactionFlags & eDisplayTransactionNeeded) {
-                if (disp == nullptr) {
-                    // NOTE: TEMPORARY FIX ONLY. Real fix should cause layers to
-                    // redraw after transform hint changes. See bug 8508397.
+            if (disp == nullptr) {
+                // NOTE: TEMPORARY FIX ONLY. Real fix should cause layers to
+                // redraw after transform hint changes. See bug 8508397.
 
-                    // could be null when this layer is using a layerStack
-                    // that is not visible on any display. Also can occur at
-                    // screen off/on times.
-                    disp = getDefaultDisplayDeviceLocked();
-                }
-                layer->updateTransformHint(disp);
+                // could be null when this layer is using a layerStack
+                // that is not visible on any display. Also can occur at
+                // screen off/on times.
+                disp = getDefaultDisplayDeviceLocked();
             }
+
+            // disp can be null if there is no display available at all to get
+            // the transform hint from.
             if (disp != nullptr) {
                 layer->updateTransformHint(disp);
             }
@@ -3340,7 +3340,7 @@
             mCurrentState.layersSortedByZ.add(layer);
             // we need traversal (state changed)
             // AND transaction (list changed)
-            flags |= eTransactionNeeded|eTraversalNeeded;
+            flags |= eTransactionNeeded|eTraversalNeeded|eDisplayLayerStackChanged;
         }
     }
     if (what & layer_state_t::eDeferTransaction) {
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 23c9684..89c9cfd 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -116,7 +116,8 @@
     eTransactionNeeded        = 0x01,
     eTraversalNeeded          = 0x02,
     eDisplayTransactionNeeded = 0x04,
-    eTransactionMask          = 0x07
+    eDisplayLayerStackChanged = 0x08,
+    eTransactionMask          = 0x0f,
 };
 
 // A thin interface to abstract creating instances of Surface (gui/Surface.h) to