When filling nested rect path check for empty inner and empty outer rects
BUG=skia:5221
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1936073003
Review-Url: https://codereview.chromium.org/1936073003
diff --git a/src/gpu/batches/GrAAStrokeRectBatch.cpp b/src/gpu/batches/GrAAStrokeRectBatch.cpp
index e4c4062..cc54408 100644
--- a/src/gpu/batches/GrAAStrokeRectBatch.cpp
+++ b/src/gpu/batches/GrAAStrokeRectBatch.cpp
@@ -580,15 +580,14 @@
namespace GrAAStrokeRectBatch {
-GrDrawBatch* Create(GrColor color,
- const SkMatrix& viewMatrix,
- const SkRect& devOutside,
- const SkRect& devOutsideAssist,
- const SkRect& devInside,
- bool miterStroke,
- bool degenerate) {
- AAStrokeRectBatch* batch = AAStrokeRectBatch::Create(viewMatrix, miterStroke);
- batch->append(color, devOutside, devOutsideAssist, devInside, degenerate);
+GrDrawBatch* CreateFillBetweenRects(GrColor color,
+ const SkMatrix& viewMatrix,
+ const SkRect& devOutside,
+ const SkRect& devInside) {
+ SkASSERT(!devOutside.isEmpty())
+ SkASSERT(!devInside.isEmpty())
+ AAStrokeRectBatch* batch = AAStrokeRectBatch::Create(viewMatrix, true);
+ batch->append(color, devOutside, devOutside, devInside, false);
batch->init();
return batch;
}
@@ -643,19 +642,21 @@
DRAW_BATCH_TEST_DEFINE(AAStrokeRectBatch) {
bool miterStroke = random->nextBool();
- // Create mock stroke rect
- SkRect outside = GrTest::TestRect(random);
- SkScalar minDim = SkMinScalar(outside.width(), outside.height());
- SkScalar strokeWidth = minDim * 0.1f;
- SkRect outsideAssist = outside;
- outsideAssist.outset(strokeWidth, strokeWidth);
- SkRect inside = outside;
- inside.inset(strokeWidth, strokeWidth);
+ // Create either a empty rect or a non-empty rect.
+ SkRect rect = random->nextBool() ? SkRect::MakeXYWH(10, 10, 50, 40) :
+ SkRect::MakeXYWH(6, 7, 0, 0);
+ SkScalar minDim = SkMinScalar(rect.width(), rect.height());
+ SkScalar strokeWidth = random->nextUScalar1() * minDim;
GrColor color = GrRandomColor(random);
- return GrAAStrokeRectBatch::Create(color, GrTest::TestMatrix(random), outside, outsideAssist,
- inside, miterStroke, inside.isFinite() && inside.isEmpty());
+ SkStrokeRec rec(SkStrokeRec::kFill_InitStyle);
+ rec.setStrokeStyle(strokeWidth);
+ rec.setStrokeParams(SkPaint::kButt_Cap,
+ miterStroke ? SkPaint::kMiter_Join : SkPaint::kBevel_Join,
+ 1.f);
+ SkMatrix matrix = GrTest::TestMatrixRectStaysRect(random);
+ return GrAAStrokeRectBatch::Create(color, matrix, rect, rec);
}
#endif