Promote RenderProperties with an alpha to have a RenderLayer

bug:20254728
Change-Id: I0bd1d440fe46683b291d4c8ab07a630c34b2eadc
diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h
index 61e98d2..a43566d 100644
--- a/libs/hwui/RenderProperties.h
+++ b/libs/hwui/RenderProperties.h
@@ -73,10 +73,6 @@
         return false;
     }
 
-    LayerType type() const {
-        return mType;
-    }
-
     bool setOpaque(bool opaque) {
         return RP_SET(mOpaque, opaque);
     }
@@ -122,6 +118,11 @@
     ~LayerProperties();
     void reset();
 
+    // Private since external users should go through properties().effectiveLayerType()
+    LayerType type() const {
+        return mType;
+    }
+
     friend class RenderProperties;
 
     LayerType mType = LayerType::None;
@@ -575,6 +576,17 @@
                 && getOutline().getAlpha() != 0.0f;
     }
 
+    LayerType effectiveLayerType() const {
+        LayerType type = mLayerProperties.mType;
+        if (type == LayerType::None
+                && !MathUtils::isZero(mPrimitiveFields.mAlpha)
+                && mPrimitiveFields.mAlpha < 1
+                && mPrimitiveFields.mHasOverlappingRendering) {
+            return LayerType::RenderLayer;
+        }
+        return type;
+    }
+
 private:
     // Rendering properties
     struct PrimitiveFields {