| Index: gm/dstreadshuffle.cpp
 | 
| diff --git a/gm/dstreadshuffle.cpp b/gm/dstreadshuffle.cpp
 | 
| index 5a7768590c39405c7f060a763a76682d80d1a73b..756e922ea9cc55ef2cbf01ff7c06a13eb010fd62 100644
 | 
| --- a/gm/dstreadshuffle.cpp
 | 
| +++ b/gm/dstreadshuffle.cpp
 | 
| @@ -94,24 +94,32 @@ protected:
 | 
|          }
 | 
|      }
 | 
|  
 | 
| -    static SkColor GetColor(SkRandom* random, int i) {
 | 
| +    static SkColor GetColor(SkRandom* random, int i, int nextColor) {
 | 
| +        static SkColor colors[] = { SK_ColorRED,
 | 
| +                                    0xFFFF7F00, // Orange
 | 
| +                                    SK_ColorYELLOW,
 | 
| +                                    SK_ColorGREEN,
 | 
| +                                    SK_ColorBLUE,
 | 
| +                                    0xFF4B0082, // indigo
 | 
| +                                    0xFF7F00FF }; // violet
 | 
|          SkColor color;
 | 
| +        int index = nextColor % SK_ARRAY_COUNT(colors);
 | 
|          switch (i) {
 | 
|              case 0:
 | 
|                  color = SK_ColorTRANSPARENT;
 | 
|                  break;
 | 
|              case 1:
 | 
|                  color = SkColorSetARGB(0xff,
 | 
| -                                       random->nextULessThan(256),
 | 
| -                                       random->nextULessThan(256),
 | 
| -                                       random->nextULessThan(256));
 | 
| +                                       SkColorGetR(colors[index]),
 | 
| +                                       SkColorGetG(colors[index]),
 | 
| +                                       SkColorGetB(colors[index]));
 | 
|                  break;
 | 
|              default:
 | 
| -                uint8_t alpha = random->nextULessThan(256);
 | 
| +                uint8_t alpha = 0x80;
 | 
|                  color = SkColorSetARGB(alpha,
 | 
| -                                       random->nextRangeU(0, alpha),
 | 
| -                                       random->nextRangeU(0, alpha),
 | 
| -                                       random->nextRangeU(0, alpha));
 | 
| +                                       SkColorGetR(colors[index]),
 | 
| +                                       SkColorGetG(colors[index]),
 | 
| +                                       SkColorGetB(colors[index]));
 | 
|                  break;
 | 
|          }
 | 
|          return color;
 | 
| @@ -143,12 +151,14 @@ protected:
 | 
|                  for (int width = 0; width <= 1; width++) {
 | 
|                      for (int alpha = 0; alpha <= 2; alpha++) {
 | 
|                          for (int r = 0; r <= 5; r++) {
 | 
| -                            SkColor color = GetColor(&random, alpha);
 | 
| +                            SkColor color = GetColor(&random, alpha, style + width + alpha + r);
 | 
|  
 | 
|                              SkPaint p;
 | 
|                              p.setAntiAlias(true);
 | 
|                              p.setColor(color);
 | 
| -                            p.setXfermodeMode(r % 3 == 0 ? SkXfermode::kHardLight_Mode :
 | 
| +                            // In order to get some batching on the GPU backend we do 2 src over for
 | 
| +                            // each xfer mode which requires a dst read
 | 
| +                            p.setXfermodeMode(r % 3 == 0 ? SkXfermode::kLighten_Mode :
 | 
|                                                             SkXfermode::kSrcOver_Mode);
 | 
|                              SetStyle(&p, style, width);
 | 
|                              canvas->save();
 | 
| 
 |