Fix 9patches, again...
Bug #3365243

Change-Id: Id45a1f1fd5e099b1d691e6064401d3de1b0c5c20
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index 535c0ac..3f0036a 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -154,8 +154,7 @@
     float y1 = 0.0f;
     float v1 = 0.0f;
 
-    uint32_t i = 0;
-    for ( ; i < mYCount; i++) {
+    for (uint32_t i = 0; i < mYCount; i++) {
         float stepY = mYDivs[i];
 
         float y2 = 0.0f;
@@ -167,8 +166,10 @@
         }
         float v2 = fmax(0.0f, stepY - 0.5f) / bitmapHeight;
 
-        generateRow(vertex, y1, y2, v1, v2, stretchX, right - left,
-                bitmapWidth, quadCount, i & 1);
+        if (stepY > 0.0f) {
+            generateRow(vertex, y1, y2, v1, v2, stretchX, right - left,
+                    bitmapWidth, quadCount);
+        }
 
         y1 = y2;
         v1 = (stepY + 0.5f) / bitmapHeight;
@@ -177,7 +178,7 @@
     }
 
     generateRow(vertex, y1, bottom - top, v1, 1.0f, stretchX, right - left,
-            bitmapWidth, quadCount, i & 1);
+            bitmapWidth, quadCount);
 
     if (verticesCount > 0) {
         Caches::getInstance().bindMeshBuffer(meshBuffer);
@@ -195,15 +196,14 @@
 }
 
 void Patch::generateRow(TextureVertex*& vertex, float y1, float y2, float v1, float v2,
-        float stretchX, float width, float bitmapWidth, uint32_t& quadCount, bool isStretch) {
+        float stretchX, float width, float bitmapWidth, uint32_t& quadCount) {
     float previousStepX = 0.0f;
 
     float x1 = 0.0f;
     float u1 = 0.0f;
 
     // Generate the row quad by quad
-    uint32_t i = 0;
-    for ( ; i < mXCount; i++) {
+    for (uint32_t i = 0; i < mXCount; i++) {
         float stepX = mXDivs[i];
 
         float x2 = 0.0f;
@@ -215,7 +215,9 @@
         }
         float u2 = fmax(0.0f, stepX - 0.5f) / bitmapWidth;
 
-        generateQuad(vertex, x1, y1, x2, y2, u1, v1, u2, v2, quadCount, isStretch || (i & 1));
+        if (stepX > 0.0f) {
+            generateQuad(vertex, x1, y1, x2, y2, u1, v1, u2, v2, quadCount);
+        }
 
         x1 = x2;
         u1 = (stepX + 0.5f) / bitmapWidth;
@@ -223,19 +225,16 @@
         previousStepX = stepX;
     }
 
-    generateQuad(vertex, x1, y1, width, y2, u1, v1, 1.0f, v2, quadCount, isStretch || (i & 1));
+    generateQuad(vertex, x1, y1, width, y2, u1, v1, 1.0f, v2, quadCount);
 }
 
 void Patch::generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2,
-            float u1, float v1, float u2, float v2, uint32_t& quadCount, bool isStretch) {
+            float u1, float v1, float u2, float v2, uint32_t& quadCount) {
     const uint32_t oldQuadCount = quadCount;
-    const bool valid = isStretch || (x2 - x1 > 0.9999f && y2 - y1 > 0.9999f);
-    if (valid) {
-        quadCount++;
-    }
+    quadCount++;
 
     // Skip degenerate and transparent (empty) quads
-    if (!valid || ((mColorKey >> oldQuadCount) & 0x1) == 1) {
+    if ((mColorKey >> oldQuadCount) & 0x1) {
 #if DEBUG_PATCHES_EMPTY_VERTICES
         PATCH_LOGD("    quad %d (empty)", oldQuadCount);
         PATCH_LOGD("        left,  top    = %.2f, %.2f\t\tu1, v1 = %.2f, %.2f", x1, y1, u1, v1);
diff --git a/libs/hwui/Patch.h b/libs/hwui/Patch.h
index 4de0c76..0f0ffa2 100644
--- a/libs/hwui/Patch.h
+++ b/libs/hwui/Patch.h
@@ -70,11 +70,11 @@
 
     void generateRow(TextureVertex*& vertex, float y1, float y2,
             float v1, float v2, float stretchX, float width, float bitmapWidth,
-            uint32_t& quadCount, bool isStretch);
+            uint32_t& quadCount);
     void generateQuad(TextureVertex*& vertex,
             float x1, float y1, float x2, float y2,
             float u1, float v1, float u2, float v2,
-            uint32_t& quadCount, bool isStretch);
+            uint32_t& quadCount);
 }; // struct Patch
 
 }; // namespace uirenderer