Index: src/core/SkPath.cpp |
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp |
index 9df62850fd2eb5bc9cf442dc4675b7091cded8c1..635b50f75d2d22e7223c07a4158a9e43531155d0 100644 |
--- a/src/core/SkPath.cpp |
+++ b/src/core/SkPath.cpp |
@@ -147,7 +147,7 @@ private: |
SkPath::SkPath() |
: fPathRef(SkPathRef::CreateEmpty()) |
#ifdef SK_BUILD_FOR_ANDROID |
- , fGenerationID(0) |
+ , fSourcePath(NULL) |
#endif |
{ |
this->resetFields(); |
@@ -161,18 +161,15 @@ void SkPath::resetFields() { |
fConvexity = kUnknown_Convexity; |
fDirection = kUnknown_Direction; |
fIsOval = false; |
-#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 |
+ |
+ // 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. |
} |
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();) |
@@ -189,7 +186,6 @@ SkPath& SkPath::operator=(const SkPath& that) { |
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 |
} |
@@ -232,10 +228,6 @@ void SkPath::swap(SkPath& that) { |
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 |
} |
@@ -328,11 +320,16 @@ bool SkPath::conservativelyContainsRect(const SkRect& rect) const { |
return check_edge_against_rect(prevPt, firstPt, rect, direction); |
} |
-#ifdef SK_BUILD_FOR_ANDROID |
uint32_t SkPath::getGenerationID() const { |
- return fGenerationID; |
+ 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; |
} |
+#ifdef SK_BUILD_FOR_ANDROID |
const SkPath* SkPath::getSourcePath() const { |
return fSourcePath; |
} |
@@ -633,14 +630,12 @@ void SkPath::setLastPt(SkScalar x, SkScalar y) { |
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; |
} |
} |
@@ -669,8 +664,6 @@ void SkPath::moveTo(SkScalar x, SkScalar y) { |
fLastMoveToIndex = ed.pathRef()->countPoints(); |
ed.growForVerb(kMove_Verb)->set(x, y); |
- |
- GEN_ID_INC; |
} |
void SkPath::rMoveTo(SkScalar x, SkScalar y) { |
@@ -702,7 +695,6 @@ void SkPath::lineTo(SkScalar x, SkScalar y) { |
ed.growForVerb(kLine_Verb)->set(x, y); |
fSegmentMask |= kLine_SegmentMask; |
- GEN_ID_INC; |
DIRTY_AFTER_EDIT; |
} |
@@ -724,7 +716,6 @@ void SkPath::quadTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2) { |
pts[1].set(x2, y2); |
fSegmentMask |= kQuad_SegmentMask; |
- GEN_ID_INC; |
DIRTY_AFTER_EDIT; |
} |
@@ -756,7 +747,6 @@ void SkPath::conicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, |
pts[1].set(x2, y2); |
fSegmentMask |= kConic_SegmentMask; |
- GEN_ID_INC; |
DIRTY_AFTER_EDIT; |
} |
} |
@@ -782,7 +772,6 @@ void SkPath::cubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, |
pts[2].set(x3, y3); |
fSegmentMask |= kCubic_SegmentMask; |
- GEN_ID_INC; |
DIRTY_AFTER_EDIT; |
} |
@@ -808,7 +797,6 @@ void SkPath::close() { |
case kMove_Verb: { |
SkPathRef::Editor ed(&fPathRef); |
ed.growForVerb(kClose_Verb); |
- GEN_ID_INC; |
break; |
} |
case kClose_Verb: |
@@ -894,7 +882,6 @@ void SkPath::addPoly(const SkPoint pts[], int count, bool close) { |
vb[~count] = kClose_Verb; |
} |
- GEN_ID_INC; |
DIRTY_AFTER_EDIT; |
SkDEBUGCODE(this->validate();) |
} |
@@ -1720,12 +1707,6 @@ void SkPath::transform(const SkMatrix& matrix, SkPath* dst) const { |
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 { |
@@ -2134,8 +2115,6 @@ uint32_t SkPath::readFromMemory(const void* storage) { |
buffer.skipToAlign4(); |
- GEN_ID_INC; |
- |
SkDEBUGCODE(this->validate();) |
return SkToU32(buffer.pos()); |
} |