Index: tests/GpuDrawPathTest.cpp |
diff --git a/tests/GpuDrawPathTest.cpp b/tests/GpuDrawPathTest.cpp |
index c0b31f0737ab7a9283d0d7878eed19fe7d19d795..1a42a49efd99d2d7cc5707da7a08389e98dd0190 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,72 @@ 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) { |
+ SkScalar s = SkIntToScalar(i); |
+ path3.conicTo(s, 3.f * s / 4, s + 1.f, s, 0.5f + s / 2000.f); |
+ path4.conicTo(s, 3.f * s / 4, s + 1.f, s, 0.3f + s / 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 |