| Index: src/pathops/SkPathOpsTSect.h
|
| diff --git a/src/pathops/SkPathOpsTSect.h b/src/pathops/SkPathOpsTSect.h
|
| index db2e865a121fc1c9df61b9a1cba9097d0cf85857..07b983a1fa35052fbb74e1d127941079b6cb01ea 100644
|
| --- a/src/pathops/SkPathOpsTSect.h
|
| +++ b/src/pathops/SkPathOpsTSect.h
|
| @@ -218,10 +218,11 @@ private:
|
| template<typename TCurve, typename OppCurve>
|
| class SkTSect {
|
| public:
|
| - SkTSect(const TCurve& c PATH_OPS_DEBUG_T_SECT_PARAMS(int id));
|
| + SkTSect(const TCurve& c SkDEBUGPARAMS(SkOpGlobalState* ) PATH_OPS_DEBUG_T_SECT_PARAMS(int id));
|
| static void BinarySearch(SkTSect* sect1, SkTSect<OppCurve, TCurve>* sect2,
|
| SkIntersections* intersections);
|
|
|
| + SkDEBUGCODE(SkOpGlobalState* globalState() { return fDebugGlobalState; })
|
| // for testing only
|
| bool debugHasBounded(const SkTSpan<OppCurve, TCurve>* ) const;
|
|
|
| @@ -319,6 +320,7 @@ private:
|
| SkTSpan<TCurve, OppCurve>* fCoincident;
|
| SkTSpan<TCurve, OppCurve>* fDeleted;
|
| int fActiveCount;
|
| + SkDEBUGCODE(SkOpGlobalState* fDebugGlobalState);
|
| SkDEBUGCODE_(SkTSect<OppCurve, TCurve>* fOppSect);
|
| PATH_OPS_DEBUG_T_SECT_CODE(int fID);
|
| PATH_OPS_DEBUG_T_SECT_CODE(int fDebugCount);
|
| @@ -828,12 +830,15 @@ void SkTSpan<TCurve, OppCurve>::validatePerpPt(double t, const SkDPoint& pt) con
|
|
|
|
|
| template<typename TCurve, typename OppCurve>
|
| -SkTSect<TCurve, OppCurve>::SkTSect(const TCurve& c PATH_OPS_DEBUG_T_SECT_PARAMS(int id))
|
| +SkTSect<TCurve, OppCurve>::SkTSect(const TCurve& c
|
| + SkDEBUGPARAMS(SkOpGlobalState* debugGlobalState)
|
| + PATH_OPS_DEBUG_T_SECT_PARAMS(int id))
|
| : fCurve(c)
|
| , fHeap(sizeof(SkTSpan<TCurve, OppCurve>) * 4)
|
| , fCoincident(nullptr)
|
| , fDeleted(nullptr)
|
| , fActiveCount(0)
|
| + SkDEBUGPARAMS(fDebugGlobalState(debugGlobalState))
|
| PATH_OPS_DEBUG_T_SECT_PARAMS(fID(id))
|
| PATH_OPS_DEBUG_T_SECT_PARAMS(fDebugCount(0))
|
| PATH_OPS_DEBUG_T_SECT_PARAMS(fDebugAllocatedCount(0))
|
| @@ -1179,7 +1184,7 @@ SkTSpan<TCurve, OppCurve>* SkTSect<TCurve, OppCurve>::extractCoincident(
|
| SkTSwap(oppFirst, oppLast);
|
| SkTSwap(oppStartT, oppEndT);
|
| }
|
| - SkASSERT(oppStartT < oppEndT);
|
| + SkOPASSERT(oppStartT < oppEndT);
|
| SkASSERT(coinStart == first->fStartT);
|
| SkASSERT(coinEnd == last->fEndT);
|
| SkASSERT(oppStartT == oppFirst->fStartT);
|
| @@ -1251,7 +1256,9 @@ SkTSpan<TCurve, OppCurve>* SkTSect<TCurve, OppCurve>::findCoincidentRun(
|
| return first;
|
| }
|
| work = work->fNext;
|
| - SkASSERT(work);
|
| + if (!work) {
|
| + return nullptr;
|
| + }
|
| } while (true);
|
| if (lastCandidate) {
|
| *lastPtr = lastCandidate;
|
| @@ -1503,7 +1510,7 @@ void SkTSect<TCurve, OppCurve>::markSpanGone(SkTSpan<TCurve, OppCurve>* span) {
|
| --fActiveCount;
|
| span->fNext = fDeleted;
|
| fDeleted = span;
|
| - SkASSERT(!span->fDeleted);
|
| + SkOPASSERT(!span->fDeleted);
|
| span->fDeleted = true;
|
| }
|
|
|
| @@ -1794,7 +1801,7 @@ bool SkTSect<TCurve, OppCurve>::updateBounded(SkTSpan<TCurve, OppCurve>* first,
|
| bool deleteSpan = false;
|
| do {
|
| deleteSpan |= test->removeAllBounded();
|
| - } while ((test = test->fNext) != final);
|
| + } while ((test = test->fNext) != final && test);
|
| first->fBounded = nullptr;
|
| first->addBounded(oppFirst, &fHeap);
|
| // cannot call validate until remove span range is called
|
|
|