clamp & round alpha

 Bug: 16842521

Change-Id: Ifd93f40b5751746835c9d56bb3c2b5ba700bdccc
diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h
index 9898bde..41f48cd 100644
--- a/libs/hwui/RenderProperties.h
+++ b/libs/hwui/RenderProperties.h
@@ -209,7 +209,7 @@
     }
 
     bool setAlpha(float alpha) {
-        alpha = fminf(1.0f, fmaxf(0.0f, alpha));
+        alpha = MathUtils::clampAlpha(alpha);
         return RP_SET(mPrimitiveFields.mAlpha, alpha);
     }
 
diff --git a/libs/hwui/utils/MathUtils.h b/libs/hwui/utils/MathUtils.h
index 2dfe9c6..66bc127 100644
--- a/libs/hwui/utils/MathUtils.h
+++ b/libs/hwui/utils/MathUtils.h
@@ -20,6 +20,7 @@
 namespace uirenderer {
 
 #define NON_ZERO_EPSILON (0.001f)
+#define ALPHA_EPSILON (0.001f)
 
 class MathUtils {
 public:
@@ -34,6 +35,16 @@
         return value >= NON_ZERO_EPSILON;
     }
 
+    inline static float clampAlpha(float alpha) {
+        if (alpha <= ALPHA_EPSILON) {
+            return 0;
+        } else if (alpha >= (1 - ALPHA_EPSILON)) {
+            return 1;
+        } else {
+            return alpha;
+        }
+    }
+
     inline static bool areEqual(float valueA, float valueB) {
         return isZero(valueA - valueB);
     }