Reverting r12010 (Use SkPathRef gen id for SkPath::getGenerationID https://codereview.chromium.org/49693002) due to test failures in PathTest on Android



git-svn-id: http://skia.googlecode.com/svn/trunk@12012 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index 635b50f..9df6285 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -147,7 +147,7 @@
 SkPath::SkPath()
     : fPathRef(SkPathRef::CreateEmpty())
 #ifdef SK_BUILD_FOR_ANDROID
-    , fSourcePath(NULL)
+    , fGenerationID(0)
 #endif
 {
     this->resetFields();
@@ -161,15 +161,18 @@
     fConvexity = kUnknown_Convexity;
     fDirection = kUnknown_Direction;
     fIsOval = false;
-
-    // We don't touch Android's fSourcePath.  It's used to track texture garbage collection, so we
-    // don't want to muck with it if it's been set to something non-NULL.
+#ifdef SK_BUILD_FOR_ANDROID
+    GEN_ID_INC;
+    // We don't touch fSourcePath.  It's used to track texture garbage collection, so we don't
+    // want to muck with it if it's been set to something non-NULL.
+#endif
 }
 
 SkPath::SkPath(const SkPath& that)
     : fPathRef(SkRef(that.fPathRef.get())) {
     this->copyFields(that);
 #ifdef SK_BUILD_FOR_ANDROID
+    fGenerationID = that.fGenerationID;
     fSourcePath   = that.fSourcePath;
 #endif
     SkDEBUGCODE(that.validate();)
@@ -186,6 +189,7 @@
         fPathRef.reset(SkRef(that.fPathRef.get()));
         this->copyFields(that);
 #ifdef SK_BUILD_FOR_ANDROID
+        GEN_ID_INC;  // Similar to swap, we can't just copy this or it could go back in time.
         fSourcePath = that.fSourcePath;
 #endif
     }
@@ -228,6 +232,10 @@
         SkTSwap<uint8_t>(fDirection, that.fDirection);
         SkTSwap<SkBool8>(fIsOval, that.fIsOval);
 #ifdef SK_BUILD_FOR_ANDROID
+        // It doesn't really make sense to swap the generation IDs here, because they might go
+        // backwards.  To be safe we increment both to mark them both as changed.
+        GEN_ID_INC;
+        GEN_ID_PTR_INC(&that);
         SkTSwap<const SkPath*>(fSourcePath, that.fSourcePath);
 #endif
     }
@@ -320,16 +328,11 @@
     return check_edge_against_rect(prevPt, firstPt, rect, direction);
 }
 
-uint32_t SkPath::getGenerationID() const {
-    uint32_t genID = fPathRef->genID();
 #ifdef SK_BUILD_FOR_ANDROID
-    SkASSERT((unsigned)fFillType < (1 << (32 - kPathRefGenIDBitCnt)));
-    genID |= static_cast<uint32_t>(fFillType) << kPathRefGenIDBitCnt;
-#endif
-    return genID;
+uint32_t SkPath::getGenerationID() const {
+    return fGenerationID;
 }
 
-#ifdef SK_BUILD_FOR_ANDROID
 const SkPath* SkPath::getSourcePath() const {
     return fSourcePath;
 }
@@ -630,12 +633,14 @@
         fIsOval = false;
         SkPathRef::Editor ed(&fPathRef);
         ed.atPoint(count-1)->set(x, y);
+        GEN_ID_INC;
     }
 }
 
 void SkPath::setConvexity(Convexity c) {
     if (fConvexity != c) {
         fConvexity = c;
+        GEN_ID_INC;
     }
 }
 
@@ -664,6 +669,8 @@
     fLastMoveToIndex = ed.pathRef()->countPoints();
 
     ed.growForVerb(kMove_Verb)->set(x, y);
+
+    GEN_ID_INC;
 }
 
 void SkPath::rMoveTo(SkScalar x, SkScalar y) {
@@ -695,6 +702,7 @@
     ed.growForVerb(kLine_Verb)->set(x, y);
     fSegmentMask |= kLine_SegmentMask;
 
+    GEN_ID_INC;
     DIRTY_AFTER_EDIT;
 }
 
@@ -716,6 +724,7 @@
     pts[1].set(x2, y2);
     fSegmentMask |= kQuad_SegmentMask;
 
+    GEN_ID_INC;
     DIRTY_AFTER_EDIT;
 }
 
@@ -747,6 +756,7 @@
         pts[1].set(x2, y2);
         fSegmentMask |= kConic_SegmentMask;
 
+        GEN_ID_INC;
         DIRTY_AFTER_EDIT;
     }
 }
@@ -772,6 +782,7 @@
     pts[2].set(x3, y3);
     fSegmentMask |= kCubic_SegmentMask;
 
+    GEN_ID_INC;
     DIRTY_AFTER_EDIT;
 }
 
@@ -797,6 +808,7 @@
             case kMove_Verb: {
                 SkPathRef::Editor ed(&fPathRef);
                 ed.growForVerb(kClose_Verb);
+                GEN_ID_INC;
                 break;
             }
             case kClose_Verb:
@@ -882,6 +894,7 @@
         vb[~count] = kClose_Verb;
     }
 
+    GEN_ID_INC;
     DIRTY_AFTER_EDIT;
     SkDEBUGCODE(this->validate();)
 }
@@ -1707,6 +1720,12 @@
             dst->fConvexity = fConvexity;
         }
 
+#ifdef SK_BUILD_FOR_ANDROID
+        if (!matrix.isIdentity() && !dst->hasComputedBounds()) {
+            GEN_ID_PTR_INC(dst);
+        }
+#endif
+
         if (kUnknown_Direction == fDirection) {
             dst->fDirection = kUnknown_Direction;
         } else {
@@ -2115,6 +2134,8 @@
 
     buffer.skipToAlign4();
 
+    GEN_ID_INC;
+
     SkDEBUGCODE(this->validate();)
     return SkToU32(buffer.pos());
 }