Chromium Code Reviews| Index: src/core/SkPathRef.h |
| =================================================================== |
| --- src/core/SkPathRef.h (revision 10052) |
| +++ src/core/SkPathRef.h (working copy) |
| @@ -37,15 +37,16 @@ |
| public: |
| Editor(SkAutoTUnref<SkPathRef>* pathRef, |
| int incReserveVerbs = 0, |
| - int incReservePoints = 0) { |
| - if (pathRef->get()->getRefCnt() > 1) { |
| + int incReservePoints = 0) |
| + { |
| + if ((*pathRef)->unique()) { |
| + (*pathRef)->incReserve(incReserveVerbs, incReservePoints); |
|
Dmitry Vyukov
2013/07/16 15:26:23
Won't it be modified after this unique() check?
bungeman-skia
2013/07/16 15:50:57
Yes, but it will only be modified when unique retu
|
| + } else { |
| SkPathRef* copy = SkNEW(SkPathRef); |
| - copy->copy(*pathRef->get(), incReserveVerbs, incReservePoints); |
| + copy->copy(**pathRef, incReserveVerbs, incReservePoints); |
| pathRef->reset(copy); |
| - } else { |
| - (*pathRef)->incReserve(incReserveVerbs, incReservePoints); |
| } |
| - fPathRef = pathRef->get(); |
| + fPathRef = *pathRef; |
| fPathRef->fGenerationID = 0; |
| SkDEBUGCODE(sk_atomic_inc(&fPathRef->fEditorsAttached);) |
| } |
| @@ -135,18 +136,18 @@ |
| const SkMatrix& matrix) { |
| src.validate(); |
| if (matrix.isIdentity()) { |
| - if (dst->get() != &src) { |
| + if (*dst != &src) { |
| src.ref(); |
| dst->reset(const_cast<SkPathRef*>(&src)); |
| (*dst)->validate(); |
| } |
| return; |
| } |
| - int32_t rcnt = dst->get()->getRefCnt(); |
| - if (&src == dst->get() && 1 == rcnt) { |
| + bool dstUnique = (*dst)->unique(); |
| + if (&src == *dst && dstUnique) { |
| matrix.mapPoints((*dst)->fPoints, (*dst)->fPointCnt); |
| return; |
| - } else if (rcnt > 1) { |
| + } else if (!dstUnique) { |
| dst->reset(SkNEW(SkPathRef)); |
| } |
| (*dst)->resetToSize(src.fVerbCnt, src.fPointCnt, src.fConicWeights.count()); |
| @@ -179,7 +180,7 @@ |
| * only if necessary. |
| */ |
| static void Rewind(SkAutoTUnref<SkPathRef>* pathRef) { |
| - if (1 == (*pathRef)->getRefCnt()) { |
| + if ((*pathRef)->unique()) { |
| (*pathRef)->validate(); |
| (*pathRef)->fVerbCnt = 0; |
| (*pathRef)->fPointCnt = 0; |