| Index: src/pathops/SkPathOpsDebug.cpp
|
| diff --git a/src/pathops/SkPathOpsDebug.cpp b/src/pathops/SkPathOpsDebug.cpp
|
| index b5b42c40e7d90301df8fed284b4cd2fdbcb94a58..22ea12ea338541656956f2bbd5b88400b1a45468 100644
|
| --- a/src/pathops/SkPathOpsDebug.cpp
|
| +++ b/src/pathops/SkPathOpsDebug.cpp
|
| @@ -269,7 +269,8 @@ void SkPathOpsDebug::CheckHealth(SkOpContourHead* contourList, const char* id) {
|
| contour->debugMissingCoincidence(id, &glitches);
|
| } while ((contour = contour->next()));
|
| coincidence->debugRemoveCollapsed(id, &glitches);
|
| - coincidence->debugAddMissing(id, &glitches);
|
| + bool added;
|
| + coincidence->debugAddMissing(id, &glitches, &added);
|
| coincidence->debugExpand(id, &glitches);
|
| coincidence->debugAddExpanded(id, &glitches);
|
| coincidence->debugMark(id, &glitches);
|
| @@ -1393,7 +1394,7 @@ void SkOpCoincidence::debugAddIfMissing(const char* id, SkPathOpsDebug::GlitchLo
|
| /* Commented-out lines keep this in sync addIfMissing() */
|
| // note that over1s, over1e, over2s, over2e are ordered
|
| void SkOpCoincidence::debugAddIfMissing(const char* id, SkPathOpsDebug::GlitchLog* log, const SkOpPtT* over1s, const SkOpPtT* over2s,
|
| - double tStart, double tEnd, const SkOpSegment* coinSeg, const SkOpSegment* oppSeg,
|
| + double tStart, double tEnd, const SkOpSegment* coinSeg, const SkOpSegment* oppSeg, bool* added,
|
| const SkOpPtT* over1e, const SkOpPtT* over2e) const {
|
| SkASSERT(tStart < tEnd);
|
| SkASSERT(over1s->fT < over1e->fT);
|
| @@ -1423,7 +1424,7 @@ void SkOpCoincidence::debugAddIfMissing(const char* id, SkPathOpsDebug::GlitchLo
|
| SkTSwap(coinTs, coinTe);
|
| SkTSwap(oppTs, oppTe);
|
| }
|
| - return this->debugAddOrOverlap(id, log, coinSeg, oppSeg, coinTs, coinTe, oppTs, oppTe
|
| + return this->debugAddOrOverlap(id, log, coinSeg, oppSeg, coinTs, coinTe, oppTs, oppTe, added
|
| );
|
| }
|
|
|
| @@ -1432,10 +1433,11 @@ void SkOpCoincidence::debugAddIfMissing(const char* id, SkPathOpsDebug::GlitchLo
|
| // If this is called by AddIfMissing(), a returned false indicates there was nothing to add
|
| void SkOpCoincidence::debugAddOrOverlap(const char* id, SkPathOpsDebug::GlitchLog* log,
|
| const SkOpSegment* coinSeg, const SkOpSegment* oppSeg,
|
| - double coinTs, double coinTe, double oppTs, double oppTe) const {
|
| + double coinTs, double coinTe, double oppTs, double oppTe, bool* added) const {
|
| SkTDArray<SkCoincidentSpans*> overlaps;
|
| SkASSERT(!fTop); // this is (correctly) reversed in addifMissing()
|
| - if (fTop && !this->checkOverlap(fTop, coinSeg, oppSeg, coinTs, coinTe, oppTs, oppTe, &overlaps)) {
|
| + if (fTop && !this->checkOverlap(fTop, coinSeg, oppSeg, coinTs, coinTe, oppTs, oppTe,
|
| + &overlaps)) {
|
| return;
|
| }
|
| if (fHead && !this->checkOverlap(fHead, coinSeg, oppSeg, coinTs,
|
| @@ -1548,7 +1550,7 @@ void SkOpCoincidence::debugAddOrOverlap(const char* id, SkPathOpsDebug::GlitchLo
|
| /* detects overlaps of different coincident runs on same segment */
|
| /* does not detect overlaps for pairs without any segments in common */
|
| // returns true if caller should loop again
|
| -void SkOpCoincidence::debugAddMissing(const char* id, SkPathOpsDebug::GlitchLog* log) const {
|
| +void SkOpCoincidence::debugAddMissing(const char* id, SkPathOpsDebug::GlitchLog* log, bool* added) const {
|
| const SkCoincidentSpans* outer = fHead;
|
| if (!outer) {
|
| return;
|
| @@ -1591,7 +1593,7 @@ void SkOpCoincidence::debugAddMissing(const char* id, SkPathOpsDebug::GlitchLog*
|
| SkASSERT(!ice->deleted());
|
| if (outerOpp != innerOpp && this->overlap(ocs, oce, ics, ice, &overS, &overE)) {
|
| this->debugAddIfMissing(id, log, ocs->starter(oce), ics->starter(ice),
|
| - overS, overE, outerOpp, innerOpp,
|
| + overS, overE, outerOpp, innerOpp, added,
|
| ocs->debugEnder(oce),
|
| ics->debugEnder(ice));
|
| }
|
| @@ -1602,7 +1604,7 @@ void SkOpCoincidence::debugAddMissing(const char* id, SkPathOpsDebug::GlitchLog*
|
| SkASSERT(!ioe->deleted());
|
| if (outerOpp != innerCoin && this->overlap(ocs, oce, ios, ioe, &overS, &overE)) {
|
| this->debugAddIfMissing(id, log, ocs->starter(oce), ios->starter(ioe),
|
| - overS, overE, outerOpp, innerCoin,
|
| + overS, overE, outerOpp, innerCoin, added,
|
| ocs->debugEnder(oce),
|
| ios->debugEnder(ioe));
|
| }
|
| @@ -1614,7 +1616,7 @@ void SkOpCoincidence::debugAddMissing(const char* id, SkPathOpsDebug::GlitchLog*
|
| SkASSERT(outerCoin != innerOpp);
|
| if (this->overlap(oos, ooe, ics, ice, &overS, &overE)) {
|
| this->debugAddIfMissing(id, log, oos->starter(ooe), ics->starter(ice),
|
| - overS, overE, outerCoin, innerOpp,
|
| + overS, overE, outerCoin, innerOpp, added,
|
| oos->debugEnder(ooe),
|
| ics->debugEnder(ice));
|
| }
|
| @@ -1626,7 +1628,7 @@ void SkOpCoincidence::debugAddMissing(const char* id, SkPathOpsDebug::GlitchLog*
|
| SkASSERT(outerCoin != innerCoin);
|
| if (this->overlap(oos, ooe, ios, ioe, &overS, &overE)) {
|
| this->debugAddIfMissing(id, log, oos->starter(ooe), ios->starter(ioe),
|
| - overS, overE, outerCoin, innerCoin,
|
| + overS, overE, outerCoin, innerCoin, added,
|
| oos->debugEnder(ooe),
|
| ios->debugEnder(ioe));
|
| }
|
| @@ -1973,13 +1975,6 @@ static void DebugCheckOverlapTop(const SkCoincidentSpans* head, const SkCoincide
|
| }
|
| }
|
|
|
| -#if DEBUG_COINCIDENCE_VERBOSE
|
| -void SkOpCoincidence::debugCheckOverlap(const char* id, SkPathOpsDebug::GlitchLog* log) const {
|
| - DebugCheckOverlapTop(fHead, fTop, id, log);
|
| - DebugCheckOverlapTop(fTop, nullptr, id, log);
|
| -}
|
| -#endif
|
| -
|
| static void DebugValidate(const SkCoincidentSpans* head, const SkCoincidentSpans* opt,
|
| const char* id, SkPathOpsDebug::GlitchLog* log) {
|
| // look for pts inside coincident spans that are not inside the opposite spans
|
|
|