| Index: src/gpu/GrDrawContext.cpp
 | 
| diff --git a/src/gpu/GrDrawContext.cpp b/src/gpu/GrDrawContext.cpp
 | 
| index 497af7ce9b764fa0b64c21b2759db1e68e1753c7..0874c268a0a025665ae27ef339aa3a0f8e09b54a 100644
 | 
| --- a/src/gpu/GrDrawContext.cpp
 | 
| +++ b/src/gpu/GrDrawContext.cpp
 | 
| @@ -214,11 +214,10 @@ void GrDrawContext::drawPaint(const GrClip& clip,
 | 
|          AutoCheckFlush acf(fDrawingManager);
 | 
|  
 | 
|          GrPipelineBuilder pipelineBuilder(*paint, fRenderTarget, clip);
 | 
| -        this->getDrawTarget()->drawNonAARect(pipelineBuilder,
 | 
| -                                             paint->getColor(),
 | 
| -                                             SkMatrix::I(),
 | 
| -                                             r,
 | 
| -                                             localMatrix);
 | 
| +        SkAutoTUnref<GrDrawBatch> batch(
 | 
| +                GrRectBatchFactory::CreateNonAAFill(paint->getColor(), SkMatrix::I(), r, nullptr,
 | 
| +                                                    &localMatrix));
 | 
| +        this->getDrawTarget()->drawBatch(pipelineBuilder, batch);
 | 
|      }
 | 
|  }
 | 
|  
 | 
| @@ -288,8 +287,8 @@ void GrDrawContext::drawRect(const GrClip& clip,
 | 
|      GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip);
 | 
|      GrColor color = paint.getColor();
 | 
|  
 | 
| +    SkAutoTUnref<GrDrawBatch> batch;
 | 
|      if (should_apply_coverage_aa(paint, fRenderTarget)) {
 | 
| -        SkAutoTUnref<GrDrawBatch> batch;
 | 
|          if (width >= 0) {
 | 
|              // The stroke path needs the rect to remain axis aligned (no rotation or skew).
 | 
|              if (viewMatrix.rectStaysRect()) {
 | 
| @@ -305,34 +304,30 @@ void GrDrawContext::drawRect(const GrClip& clip,
 | 
|                                                               devBoundRect));
 | 
|              }
 | 
|          }
 | 
| -        if (batch) {
 | 
| -            this->getDrawTarget()->drawBatch(pipelineBuilder, batch);
 | 
| -        } else {
 | 
| +        if (!batch) {
 | 
|              SkPath path;
 | 
|              path.setIsVolatile(true);
 | 
|              path.addRect(rect);
 | 
|              this->internalDrawPath(&pipelineBuilder, viewMatrix, color, true, path, *strokeInfo);
 | 
|              SkASSERT(paint.isAntiAlias());
 | 
| +            return;
 | 
|          }
 | 
| -        return;
 | 
| -    }
 | 
| -
 | 
| -    if (width >= 0) {
 | 
| +    } else if (width >= 0) {
 | 
|          // Non-AA hairlines are snapped to pixel centers to make which pixels are hit deterministic
 | 
|          bool snapToPixelCenters = (0 == width && !fRenderTarget->isUnifiedMultisampled());
 | 
| -        SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateNonAAStroke(
 | 
| -                                        color, viewMatrix, rect, width, snapToPixelCenters));
 | 
| +        batch.reset(GrRectBatchFactory::CreateNonAAStroke(color, viewMatrix, rect, width,
 | 
| +                                                          snapToPixelCenters));
 | 
|  
 | 
|          // Depending on sub-pixel coordinates and the particular GPU, we may lose a corner of
 | 
|          // hairline rects. We jam all the vertices to pixel centers to avoid this, but not when MSAA
 | 
|          // is enabled because it can cause ugly artifacts.
 | 
|          pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCenters_Flag,
 | 
|                                   snapToPixelCenters);
 | 
| -        this->getDrawTarget()->drawBatch(pipelineBuilder, batch);
 | 
|      } else {
 | 
|          // filled BW rect
 | 
| -        this->getDrawTarget()->drawNonAARect(pipelineBuilder, color, viewMatrix, rect);
 | 
| +        batch.reset(GrRectBatchFactory::CreateNonAAFill(color, viewMatrix, rect, nullptr, nullptr));
 | 
|      }
 | 
| +    this->getDrawTarget()->drawBatch(pipelineBuilder, batch);
 | 
|  }
 | 
|  
 | 
|  void GrDrawContext::fillRectToRect(const GrClip& clip,
 | 
| @@ -347,19 +342,18 @@ void GrDrawContext::fillRectToRect(const GrClip& clip,
 | 
|      AutoCheckFlush acf(fDrawingManager);
 | 
|  
 | 
|      GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip);
 | 
| +    SkAutoTUnref<GrDrawBatch> batch;
 | 
|      if (should_apply_coverage_aa(paint, fRenderTarget) &&
 | 
|          view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
 | 
| -        SkAutoTUnref<GrDrawBatch> batch(GrAAFillRectBatch::CreateWithLocalRect(
 | 
| -            paint.getColor(), viewMatrix, rectToDraw, localRect));
 | 
| -        if (batch) {
 | 
| -            this->drawBatch(&pipelineBuilder, batch);
 | 
| -        }
 | 
| +        batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), viewMatrix, rectToDraw,
 | 
| +                                                           localRect));
 | 
|      } else {
 | 
| -        this->getDrawTarget()->drawNonAARect(pipelineBuilder,
 | 
| -                                             paint.getColor(),
 | 
| -                                             viewMatrix,
 | 
| -                                             rectToDraw,
 | 
| -                                             localRect);
 | 
| +        batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMatrix, rectToDraw,
 | 
| +                                                        &localRect, nullptr));
 | 
| +    }
 | 
| +
 | 
| +    if (batch) {
 | 
| +        this->drawBatch(&pipelineBuilder, batch);
 | 
|      }
 | 
|  }
 | 
|  
 | 
| @@ -376,18 +370,16 @@ void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip,
 | 
|  
 | 
|      GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip);
 | 
|  
 | 
| +    SkAutoTUnref<GrDrawBatch> batch;
 | 
|      if (should_apply_coverage_aa(paint, fRenderTarget) &&
 | 
|          view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
 | 
| -        SkAutoTUnref<GrDrawBatch> batch(GrAAFillRectBatch::Create(
 | 
| -            paint.getColor(), viewMatrix, localMatrix, rectToDraw));
 | 
| -        this->drawBatch(&pipelineBuilder, batch);
 | 
| +        batch.reset(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, localMatrix,
 | 
| +                                              rectToDraw));
 | 
|      } else {
 | 
| -        this->getDrawTarget()->drawNonAARect(pipelineBuilder,
 | 
| -                                             paint.getColor(),
 | 
| -                                             viewMatrix,
 | 
| -                                             rectToDraw,
 | 
| -                                             localMatrix);
 | 
| +        batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMatrix, rectToDraw,
 | 
| +                                                        nullptr, &localMatrix));
 | 
|      }
 | 
| +    this->getDrawTarget()->drawBatch(pipelineBuilder, batch);
 | 
|  }
 | 
|  
 | 
|  void GrDrawContext::drawVertices(const GrClip& clip,
 | 
| 
 |