| 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;
|
| }
|
|
|