| Index: tests/GpuDrawPathTest.cpp
|
| diff --git a/tests/GpuDrawPathTest.cpp b/tests/GpuDrawPathTest.cpp
|
| index f23f5ef8dcee4d5864f9dc1646eccd7340fb1633..3702a7cc3b03ee45e2c4673efa7b73b43155a2bc 100644
|
| --- a/tests/GpuDrawPathTest.cpp
|
| +++ b/tests/GpuDrawPathTest.cpp
|
| @@ -15,6 +15,8 @@
|
| #include "SkCanvas.h"
|
| #include "SkColor.h"
|
| #include "SkPaint.h"
|
| +#include "SkPath.h"
|
| +#include "SkDashPathEffect.h"
|
| #include "SkRRect.h"
|
| #include "SkRect.h"
|
| #include "SkSurface.h"
|
| @@ -23,11 +25,12 @@
|
| static void test_drawPathEmpty(skiatest::Reporter*, SkCanvas* canvas) {
|
| // Filling an empty path should not crash.
|
| SkPaint paint;
|
| - canvas->drawRect(SkRect(), paint);
|
| + SkRect emptyRect = SkRect::MakeEmpty();
|
| + canvas->drawRect(emptyRect, paint);
|
| canvas->drawPath(SkPath(), paint);
|
| - canvas->drawOval(SkRect(), paint);
|
| - canvas->drawRect(SkRect(), paint);
|
| - canvas->drawRRect(SkRRect(), paint);
|
| + canvas->drawOval(emptyRect, paint);
|
| + canvas->drawRect(emptyRect, paint);
|
| + canvas->drawRRect(SkRRect::MakeRect(emptyRect), paint);
|
|
|
| // Stroking an empty path should not crash.
|
| paint.setAntiAlias(true);
|
| @@ -35,15 +38,44 @@ static void test_drawPathEmpty(skiatest::Reporter*, SkCanvas* canvas) {
|
| paint.setColor(SK_ColorGRAY);
|
| paint.setStrokeWidth(SkIntToScalar(20));
|
| paint.setStrokeJoin(SkPaint::kRound_Join);
|
| - canvas->drawRect(SkRect(), paint);
|
| + canvas->drawRect(emptyRect, paint);
|
| canvas->drawPath(SkPath(), paint);
|
| - canvas->drawOval(SkRect(), paint);
|
| - canvas->drawRect(SkRect(), paint);
|
| - canvas->drawRRect(SkRRect(), paint);
|
| + canvas->drawOval(emptyRect, paint);
|
| + canvas->drawRect(emptyRect, paint);
|
| + canvas->drawRRect(SkRRect::MakeRect(emptyRect), paint);
|
| }
|
|
|
| +static void fill_and_stroke(SkCanvas* canvas, const SkPath& p1, const SkPath& p2,
|
| + SkPathEffect* effect) {
|
| + SkPaint paint;
|
| + paint.setAntiAlias(true);
|
| + paint.setPathEffect(effect);
|
| +
|
| + canvas->drawPath(p1, paint);
|
| + canvas->drawPath(p2, paint);
|
| +
|
| + paint.setStyle(SkPaint::kStroke_Style);
|
| + canvas->drawPath(p1, paint);
|
| + canvas->drawPath(p2, paint);
|
| +}
|
| +
|
| +static void test_drawSameRectOvals(skiatest::Reporter*, SkCanvas* canvas) {
|
| + // Drawing ovals with similar bounds but different points order should not crash.
|
| +
|
| + SkPath oval1, oval2;
|
| + const SkRect rect = SkRect::MakeWH(100, 50);
|
| + oval1.addOval(rect, SkPath::kCW_Direction);
|
| + oval2.addOval(rect, SkPath::kCCW_Direction);
|
| +
|
| + fill_and_stroke(canvas, oval1, oval2, nullptr);
|
| +
|
| + const SkScalar intervals[] = { 1, 1 };
|
| + SkAutoTUnref<SkPathEffect> dashEffect(SkDashPathEffect::Create(intervals, 2, 0));
|
| + fill_and_stroke(canvas, oval1, oval2, dashEffect);
|
| +}
|
|
|
| DEF_GPUTEST(GpuDrawPath, reporter, factory) {
|
| + // https://bugs.chromium.org/p/skia/issues/detail?id=4581
|
| return;
|
|
|
| for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) {
|
| @@ -66,4 +98,16 @@ DEF_GPUTEST(GpuDrawPath, reporter, factory) {
|
| }
|
| }
|
|
|
| +DEF_GPUTEST(GpuDrawPathSameRectOvals, reporter, factory) {
|
| + GrContext* grContext = factory->get(GrContextFactory::kNVPR_GLContextType);
|
| + if (!grContext) {
|
| + return;
|
| + }
|
| +
|
| + SkAutoTUnref<SkSurface> surface(
|
| + SkSurface::NewRenderTarget(grContext, SkSurface::kNo_Budgeted,
|
| + SkImageInfo::MakeN32Premul(255, 255), 4));
|
| + test_drawSameRectOvals(reporter, surface->getCanvas());
|
| +}
|
| +
|
| #endif
|
|
|