Don't compute path keys for volatile paths in GrShape.
Otherwise, we will compute cache keys for internally transformed paths that don't repeat (e.g. clip paths transformed into device space with a changing view matrix).
BUG=chromium:649562
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2369513002
Review-Url: https://codereview.chromium.org/2369513002
diff --git a/tests/GpuDrawPathTest.cpp b/tests/GpuDrawPathTest.cpp
index 1a42a49..83641cb 100644
--- a/tests/GpuDrawPathTest.cpp
+++ b/tests/GpuDrawPathTest.cpp
@@ -104,18 +104,15 @@
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.
+ // We expect these small paths to be keyed based on their data.
+ bool isVolatile;
GrPath::ComputeKey(GrShape(path1, GrStyle::SimpleFill()), &key1, &isVolatile);
REPORTER_ASSERT(reporter, !isVolatile);
REPORTER_ASSERT(reporter, key1.isValid());
@@ -123,12 +120,19 @@
REPORTER_ASSERT(reporter, !isVolatile);
REPORTER_ASSERT(reporter, key1.isValid());
REPORTER_ASSERT(reporter, key1 != key2);
+ {
+ GrUniqueKey tempKey;
+ path1.setIsVolatile(true);
+ GrPath::ComputeKey(GrShape(path1, style), &key1, &isVolatile);
+ REPORTER_ASSERT(reporter, isVolatile);
+ REPORTER_ASSERT(reporter, !tempKey.isValid());
+ }
// 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);
+ GrPath::ComputeKey(GrShape(path2, GrStyle::SimpleFill()), &tempKey, &isVolatile);
+ REPORTER_ASSERT(reporter, key2 == tempKey);
}
// Try a large path that is too big to be keyed off its data.