| Index: tests/GpuDrawPathTest.cpp
|
| diff --git a/tests/GpuDrawPathTest.cpp b/tests/GpuDrawPathTest.cpp
|
| index c0b31f0737ab7a9283d0d7878eed19fe7d19d795..af708a0195c6e7cc9657821d1956d83d396cab9c 100644
|
| --- a/tests/GpuDrawPathTest.cpp
|
| +++ b/tests/GpuDrawPathTest.cpp
|
| @@ -11,7 +11,7 @@
|
|
|
| #include "GrContext.h"
|
| #include "GrPath.h"
|
| -#include "GrStyle.h"
|
| +#include "GrShape.h"
|
| #include "SkBitmap.h"
|
| #include "SkCanvas.h"
|
| #include "SkColor.h"
|
| @@ -92,21 +92,71 @@ DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(GpuDrawPath, reporter, ctxInfo) {
|
| }
|
|
|
| DEF_GPUTEST(GrPathKeys, reporter, /*factory*/) {
|
| - // Keys should not ignore conic weights.
|
| - SkPath path1, path2;
|
| - path1.setIsVolatile(true);
|
| - path2.setIsVolatile(true);
|
| - SkPoint p0 = SkPoint::Make(100, 0);
|
| - SkPoint p1 = SkPoint::Make(100, 100);
|
| -
|
| - path1.conicTo(p0, p1, .5f);
|
| - path2.conicTo(p0, p1, .7f);
|
| -
|
| - bool isVolatile;
|
| - GrUniqueKey key1, key2;
|
| - GrPath::ComputeKey(path1, GrStyle::SimpleFill(), &key1, &isVolatile);
|
| - GrPath::ComputeKey(path2, GrStyle::SimpleFill(), &key2, &isVolatile);
|
| - REPORTER_ASSERT(reporter, key1 != key2);
|
| + SkPaint strokePaint;
|
| + strokePaint.setStyle(SkPaint::kStroke_Style);
|
| + strokePaint.setStrokeWidth(10.f);
|
| + GrStyle styles[] = {
|
| + GrStyle::SimpleFill(),
|
| + GrStyle::SimpleHairline(),
|
| + GrStyle(strokePaint)
|
| + };
|
| +
|
| + for (const GrStyle& style : styles) {
|
| + // Keys should not ignore conic weights.
|
| + SkPath path1, path2;
|
| + path1.setIsVolatile(true);
|
| + path2.setIsVolatile(true);
|
| + SkPoint p0 = SkPoint::Make(100, 0);
|
| + SkPoint p1 = SkPoint::Make(100, 100);
|
| +
|
| + path1.conicTo(p0, p1, .5f);
|
| + path2.conicTo(p0, p1, .7f);
|
| +
|
| + bool isVolatile;
|
| + GrUniqueKey key1, key2;
|
| + // Even though the paths are marked volatile, they should have keys based on the path data
|
| + // because they have a small amount of data.
|
| + GrPath::ComputeKey(GrShape(path1, GrStyle::SimpleFill()), &key1, &isVolatile);
|
| + REPORTER_ASSERT(reporter, !isVolatile);
|
| + REPORTER_ASSERT(reporter, key1.isValid());
|
| + GrPath::ComputeKey(GrShape(path2, GrStyle::SimpleFill()), &key2, &isVolatile);
|
| + REPORTER_ASSERT(reporter, !isVolatile);
|
| + REPORTER_ASSERT(reporter, key1.isValid());
|
| + REPORTER_ASSERT(reporter, key1 != key2);
|
| +
|
| + // Ensure that recreating the GrShape doesn't change the key.
|
| + {
|
| + GrUniqueKey tempKey;
|
| + GrPath::ComputeKey(GrShape(path1, GrStyle::SimpleFill()), &tempKey, &isVolatile);
|
| + REPORTER_ASSERT(reporter, key1 == tempKey);
|
| + }
|
| +
|
| + // Try a large path that is too big to be keyed off its data.
|
| + SkPath path3;
|
| + SkPath path4;
|
| + for (int i = 0; i < 1000; ++i) {
|
| + path3.conicTo(i, 3.f *i/4, i + 1, i, 0.5 + i / 2000.f);
|
| + path4.conicTo(i, 3.f *i/4, i + 1, i, 0.3 + i / 2000.f);
|
| + }
|
| +
|
| + GrUniqueKey key3, key4;
|
| + // These aren't marked volatile and so should have keys
|
| + GrPath::ComputeKey(GrShape(path3, style), &key3, &isVolatile);
|
| + REPORTER_ASSERT(reporter, !isVolatile);
|
| + REPORTER_ASSERT(reporter, key3.isValid());
|
| + GrPath::ComputeKey(GrShape(path4, style), &key4, &isVolatile);
|
| + REPORTER_ASSERT(reporter, !isVolatile);
|
| + REPORTER_ASSERT(reporter, key4.isValid());
|
| + REPORTER_ASSERT(reporter, key3 != key4);
|
| +
|
| + {
|
| + GrUniqueKey tempKey;
|
| + path3.setIsVolatile(true);
|
| + GrPath::ComputeKey(GrShape(path3, style), &key1, &isVolatile);
|
| + REPORTER_ASSERT(reporter, isVolatile);
|
| + REPORTER_ASSERT(reporter, !tempKey.isValid());
|
| + }
|
| + }
|
| }
|
|
|
| #endif
|
|
|