Sever fOriginalPath connection whenever a GrShape becomes a simple type

When drawing a round-rect, for example, we may end up in drawPath with a
temporary path that was created with the rrect added. We ended up putting
a genID listener on that (stack allocated) path, so we would evict cache
entries immediately. This restores the old behavior, where cache entries
for paths derived from simple types are never invalidated.

Bug: skia:7087
Change-Id: I3eed9c3a289241bfe1e42036be3362f592256693
Reviewed-on: https://skia-review.googlesource.com/54460
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/GrShape.cpp b/src/gpu/GrShape.cpp
index 9636427..91cd3c8 100644
--- a/src/gpu/GrShape.cpp
+++ b/src/gpu/GrShape.cpp
@@ -386,7 +386,6 @@
                                                  scale)) {
             tmpParent.init(*srcForPathEffect, GrStyle(strokeRec, nullptr));
             *this = tmpParent.get()->applyStyle(apply, scale);
-            fOriginalPath = parent.fOriginalPath;
             return;
         }
         // A path effect has access to change the res scale but we aren't expecting it to and it
@@ -498,6 +497,10 @@
     }
     if (Type::kPath != fType) {
         fInheritedKey.reset(0);
+        // Whenever we simplify to a non-path, break the chain so we no longer refer to the
+        // original path. This prevents attaching genID listeners to temporary paths created when
+        // drawing simple shapes.
+        fOriginalPath.reset();
         if (Type::kRRect == fType) {
             this->attemptToSimplifyRRect();
         } else if (Type::kLine == fType) {
diff --git a/src/gpu/GrShape.h b/src/gpu/GrShape.h
index dd8aa85..032c4d5 100644
--- a/src/gpu/GrShape.h
+++ b/src/gpu/GrShape.h
@@ -373,9 +373,11 @@
     void addGenIDChangeListener(SkPathRef::GenIDChangeListener* listener) const;
 
     /**
-     * Gets the generation ID of the *original* path. This is only exposed for unit tests.
+     * Helpers that are only exposed for unit tests, to determine if the shape is a path, and get
+     * the generation ID of the *original* path.
      */
     uint32_t testingOnly_getOriginalGenerationID() const;
+    bool testingOnly_isPath() const;
 
 private: