Return color shader instead of 2-color gradient when color count is 1

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2259823005

Committed: https://skia.googlesource.com/skia/+/da082a5767d7edfd3abe74fc683392422565a606
Review-Url: https://codereview.chromium.org/2259823005
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index 6ffe56b..78cdb80 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -742,18 +742,6 @@
     return nullptr != colors && count >= 1 && tileMode < (unsigned)SkShader::kTileModeCount;
 }
 
-// assumes colors is SkColor* and pos is SkScalar*
-#define EXPAND_1_COLOR(count)               \
-    SkColor tmp[2];                         \
-    do {                                    \
-        if (1 == count) {                   \
-            tmp[0] = tmp[1] = colors[0];    \
-            colors = tmp;                   \
-            pos = nullptr;                     \
-            count = 2;                      \
-        }                                   \
-    } while (0)
-
 static void desc_init(SkGradientShaderBase::Descriptor* desc,
                       const SkColor colors[], const SkScalar pos[], int colorCount,
                       SkShader::TileMode mode, uint32_t flags, const SkMatrix* localMatrix) {
@@ -767,6 +755,18 @@
     desc->fLocalMatrix  = localMatrix;
 }
 
+// assumes colors is SkColor* and pos is SkScalar*
+#define EXPAND_1_COLOR(count)                \
+     SkColor tmp[2];                         \
+     do {                                    \
+         if (1 == count) {                   \
+             tmp[0] = tmp[1] = colors[0];    \
+             colors = tmp;                   \
+             pos = nullptr;                  \
+             count = 2;                      \
+         }                                   \
+     } while (0)
+
 sk_sp<SkShader> SkGradientShader::MakeLinear(const SkPoint pts[2],
                                          const SkColor colors[],
                                          const SkScalar pos[], int colorCount,
@@ -779,7 +779,9 @@
     if (!valid_grad(colors, pos, colorCount, mode)) {
         return nullptr;
     }
-    EXPAND_1_COLOR(colorCount);
+    if (1 == colorCount) {
+        return SkShader::MakeColorShader(colors[0]);
+    }
 
     SkGradientShaderBase::Descriptor desc;
     desc_init(&desc, colors, pos, colorCount, mode, flags, localMatrix);
@@ -798,7 +800,9 @@
     if (!valid_grad(colors, pos, colorCount, mode)) {
         return nullptr;
     }
-    EXPAND_1_COLOR(colorCount);
+    if (1 == colorCount) {
+        return SkShader::MakeColorShader(colors[0]);
+    }
 
     SkGradientShaderBase::Descriptor desc;
     desc_init(&desc, colors, pos, colorCount, mode, flags, localMatrix);
@@ -826,7 +830,6 @@
             return SkShader::MakeEmptyShader();
         }
     }
-
     EXPAND_1_COLOR(colorCount);
 
     bool flipGradient = startRadius > endRadius;
@@ -867,7 +870,9 @@
     if (!valid_grad(colors, pos, colorCount, SkShader::kClamp_TileMode)) {
         return nullptr;
     }
-    EXPAND_1_COLOR(colorCount);
+    if (1 == colorCount) {
+        return SkShader::MakeColorShader(colors[0]);
+    }
 
     SkGradientShaderBase::Descriptor desc;
     desc_init(&desc, colors, pos, colorCount, SkShader::kClamp_TileMode, flags, localMatrix);