Index: src/core/SkPathRef.cpp |
diff --git a/src/core/SkPathRef.cpp b/src/core/SkPathRef.cpp |
index e60f618b4f656203ecf4dc7b9b6db898acc5f72e..de7a8f56ae07a8939f56a05b26f6b034a2ae5f5c 100644 |
--- a/src/core/SkPathRef.cpp |
+++ b/src/core/SkPathRef.cpp |
@@ -30,7 +30,9 @@ |
////////////////////////////////////////////////////////////////////////////// |
SkPathRef* SkPathRef::CreateEmptyImpl() { |
- return SkNEW(SkPathRef); |
+ SkPathRef* p = SkNEW(SkPathRef); |
+ p->computeBounds(); // Preemptively avoid a race to clear fBoundsIsDirty. |
+ return p; |
} |
SkPathRef* SkPathRef::CreateEmpty() { |
@@ -83,13 +85,13 @@ |
if (canXformBounds) { |
(*dst)->fBoundsIsDirty = false; |
if (src.fIsFinite) { |
- matrix.mapRect((*dst)->fBounds.get(), src.fBounds); |
- if (!((*dst)->fIsFinite = (*dst)->fBounds->isFinite())) { |
- (*dst)->fBounds->setEmpty(); |
+ matrix.mapRect(&(*dst)->fBounds, src.fBounds); |
+ if (!((*dst)->fIsFinite = (*dst)->fBounds.isFinite())) { |
+ (*dst)->fBounds.setEmpty(); |
} |
} else { |
(*dst)->fIsFinite = false; |
- (*dst)->fBounds->setEmpty(); |
+ (*dst)->fBounds.setEmpty(); |
} |
} else { |
(*dst)->fBoundsIsDirty = true; |
@@ -439,14 +441,14 @@ |
SkASSERT(this->currSize() == |
fFreeSpace + sizeof(SkPoint) * fPointCnt + sizeof(uint8_t) * fVerbCnt); |
- if (!fBoundsIsDirty && !fBounds->isEmpty()) { |
+ if (!fBoundsIsDirty && !fBounds.isEmpty()) { |
bool isFinite = true; |
for (int i = 0; i < fPointCnt; ++i) { |
SkASSERT(!fPoints[i].isFinite() || ( |
- fBounds->fLeft - fPoints[i].fX < SK_ScalarNearlyZero && |
- fPoints[i].fX - fBounds->fRight < SK_ScalarNearlyZero && |
- fBounds->fTop - fPoints[i].fY < SK_ScalarNearlyZero && |
- fPoints[i].fY - fBounds->fBottom < SK_ScalarNearlyZero)); |
+ fBounds.fLeft - fPoints[i].fX < SK_ScalarNearlyZero && |
+ fPoints[i].fX - fBounds.fRight < SK_ScalarNearlyZero && |
+ fBounds.fTop - fPoints[i].fY < SK_ScalarNearlyZero && |
+ fPoints[i].fY - fBounds.fBottom < SK_ScalarNearlyZero)); |
if (!fPoints[i].isFinite()) { |
isFinite = false; |
} |