| Index: gm/gradients.cpp | 
| diff --git a/gm/gradients.cpp b/gm/gradients.cpp | 
| index c1847d446243b18558c7b25e0684eddfe492b0d8..5fb3465913bf345326473a8baf89364f7b5cc72b 100644 | 
| --- a/gm/gradients.cpp | 
| +++ b/gm/gradients.cpp | 
| @@ -7,6 +7,7 @@ | 
|  | 
| #include "gm.h" | 
| #include "SkGradientShader.h" | 
| +#include "SkLinearGradient.h" | 
|  | 
| namespace skiagm { | 
|  | 
| @@ -593,9 +594,16 @@ DEF_GM( return new LinearGradientGM(true); ) | 
| DEF_GM( return new LinearGradientGM(false); ) | 
|  | 
| class LinearGradientTinyGM : public GM { | 
| +public: | 
| +    LinearGradientTinyGM(uint32_t flags, const char* suffix = nullptr) | 
| +    : fName("linear_gradient_tiny") | 
| +    , fFlags(flags) { | 
| +        fName.append(suffix); | 
| +    } | 
| + | 
| protected: | 
| SkString onShortName() override { | 
| -        return SkString("linear_gradient_tiny"); | 
| +        return fName; | 
| } | 
|  | 
| SkISize onISize() override { | 
| @@ -631,7 +639,7 @@ protected: | 
| SkAutoCanvasRestore acr(canvas, true); | 
| SkAutoTUnref<SkShader> gradient( | 
| SkGradientShader::CreateLinear(configs[i].pts, colors, configs[i].pos, kStopCount, | 
| -                                               SkShader::kClamp_TileMode)); | 
| +                                               SkShader::kClamp_TileMode, fFlags, nullptr)); | 
| canvas->translate(kRectSize * ((i % 4) * 1.5f + 0.25f), | 
| kRectSize * ((i / 4) * 1.5f + 0.25f)); | 
|  | 
| @@ -642,9 +650,12 @@ protected: | 
|  | 
| private: | 
| typedef GM INHERITED; | 
| -}; | 
| -DEF_GM( return new LinearGradientTinyGM(); ) | 
|  | 
| +    SkString fName; | 
| +    uint32_t fFlags; | 
| +}; | 
| +DEF_GM( return new LinearGradientTinyGM(0); ) | 
| +DEF_GM( return new LinearGradientTinyGM(SkLinearGradient::kForce4fContext_PrivateFlag, "_4f"); ) | 
| } | 
|  | 
| /////////////////////////////////////////////////////////////////////////////////////////////////// | 
| @@ -736,3 +747,35 @@ DEF_SIMPLE_GM(gradients_dup_color_stops, canvas, 704, 564) { | 
| } | 
| } | 
| } | 
| + | 
| +static void draw_many_stops(SkCanvas* canvas, uint32_t flags) { | 
| +    const unsigned kStopCount = 200; | 
| +    const SkPoint pts[] = { {50, 50}, {450, 465}}; | 
| + | 
| +    SkColor colors[kStopCount]; | 
| +    for (unsigned i = 0; i < kStopCount; i++) { | 
| +        switch (i % 5) { | 
| +        case 0: colors[i] = SK_ColorRED; break; | 
| +        case 1: colors[i] = SK_ColorGREEN; break; | 
| +        case 2: colors[i] = SK_ColorGREEN; break; | 
| +        case 3: colors[i] = SK_ColorBLUE; break; | 
| +        case 4: colors[i] = SK_ColorRED; break; | 
| +        } | 
| +    } | 
| + | 
| +    SkAutoTUnref<SkShader> shader(SkGradientShader::CreateLinear( | 
| +        pts, colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode, flags, nullptr)); | 
| + | 
| +    SkPaint p; | 
| +    p.setShader(shader); | 
| + | 
| +    canvas->drawRect(SkRect::MakeXYWH(0, 0, 500, 500), p); | 
| +} | 
| + | 
| +DEF_SIMPLE_GM(gradient_many_stops, canvas, 500, 500) { | 
| +    draw_many_stops(canvas, 0); | 
| +} | 
| + | 
| +DEF_SIMPLE_GM(gradient_many_stops_4f, canvas, 500, 500) { | 
| +    draw_many_stops(canvas, SkLinearGradient::kForce4fContext_PrivateFlag); | 
| +} | 
|  |