Pre-multiply color components for 2-stop gradients
Bug #7033344

Change-Id: Ia168501f1dc56ba7a1bb0c55078320432309a66a
diff --git a/libs/hwui/GradientCache.cpp b/libs/hwui/GradientCache.cpp
index 726b57c7..2e4e349 100644
--- a/libs/hwui/GradientCache.cpp
+++ b/libs/hwui/GradientCache.cpp
@@ -217,10 +217,12 @@
         float amount = (pos - start) / distance;
         float oppAmount = 1.0f - amount;
 
-        *p++ = uint8_t(startR * oppAmount + endR * amount);
-        *p++ = uint8_t(startG * oppAmount + endG * amount);
-        *p++ = uint8_t(startB * oppAmount + endB * amount);
-        *p++ = uint8_t(startA * oppAmount + endA * amount);
+        const float alpha = startA * oppAmount + endA * amount;
+        const float a = alpha / 255.0f;
+        *p++ = uint8_t(a * (startR * oppAmount + endR * amount));
+        *p++ = uint8_t(a * (startG * oppAmount + endG * amount));
+        *p++ = uint8_t(a * (startB * oppAmount + endB * amount));
+        *p++ = uint8_t(alpha);
     }
 
     for (int i = 1; i < GRADIENT_TEXTURE_HEIGHT; i++) {