| Index: tests/PathOpsDebug.cpp
|
| diff --git a/tests/PathOpsDebug.cpp b/tests/PathOpsDebug.cpp
|
| index 0f96ef4f885b317a84ac918985e211f809b7a274..7770b00c6a35e749c8792d189d723ee2b82c29cc 100755
|
| --- a/tests/PathOpsDebug.cpp
|
| +++ b/tests/PathOpsDebug.cpp
|
| @@ -50,6 +50,14 @@ void SkPathOpsDebug::WindingPrintf(int wind) {
|
| }
|
| #endif
|
|
|
| +static void DumpID(int id) {
|
| + SkDebugf("} ");
|
| + if (id >= 0) {
|
| + SkDebugf("id=%d", id);
|
| + }
|
| + SkDebugf("\n");
|
| +}
|
| +
|
| void SkDConic::dump() const {
|
| dumpInner();
|
| SkDebugf("},\n");
|
| @@ -57,7 +65,7 @@ void SkDConic::dump() const {
|
|
|
| void SkDConic::dumpID(int id) const {
|
| dumpInner();
|
| - SkDebugf("} id=%d\n", id);
|
| + DumpID(id);
|
| }
|
|
|
| void SkDConic::dumpInner() const {
|
| @@ -73,7 +81,8 @@ void SkDCubic::dump() const {
|
|
|
| void SkDCubic::dumpID(int id) const {
|
| this->dumpInner();
|
| - SkDebugf("}} id=%d\n", id);
|
| + SkDebugf("}");
|
| + DumpID(id);
|
| }
|
|
|
| static inline bool double_is_NaN(double x) { return x != x; }
|
| @@ -97,6 +106,10 @@ void SkDCubic::dumpInner() const {
|
| fPts[index].dump();
|
| }
|
|
|
| +void SkDCurve::dump() const {
|
| + dumpID(-1);
|
| +}
|
| +
|
| void SkDCurve::dumpID(int id) const {
|
| #ifndef SK_RELEASE
|
| switch(fVerb) {
|
| @@ -127,7 +140,8 @@ void SkDLine::dump() const {
|
|
|
| void SkDLine::dumpID(int id) const {
|
| this->dumpInner();
|
| - SkDebugf("}} id=%d\n", id);
|
| + SkDebugf("}");
|
| + DumpID(id);
|
| }
|
|
|
| void SkDLine::dumpInner() const {
|
| @@ -168,7 +182,8 @@ void SkDQuad::dump() const {
|
|
|
| void SkDQuad::dumpID(int id) const {
|
| dumpInner();
|
| - SkDebugf("}} id=%d\n", id);
|
| + SkDebugf("}");
|
| + DumpID(id);
|
| }
|
|
|
| void SkDQuad::dumpInner() const {
|
| @@ -787,6 +802,10 @@ const SkOpAngle* SkOpAngle::debugAngle(int id) const {
|
| return this->segment()->debugAngle(id);
|
| }
|
|
|
| +const SkOpCoincidence* SkOpAngle::debugCoincidence() const {
|
| + return this->segment()->debugCoincidence();
|
| +}
|
| +
|
| SkOpContour* SkOpAngle::debugContour(int id) {
|
| return this->segment()->debugContour(id);
|
| }
|
| @@ -925,6 +944,10 @@ SkOpContour* SkOpPtT::debugContour(int id) {
|
| return this->span()->debugContour(id);
|
| }
|
|
|
| +const SkOpCoincidence* SkOpPtT::debugCoincidence() const {
|
| + return this->span()->debugCoincidence();
|
| +}
|
| +
|
| const SkOpPtT* SkOpPtT::debugPtT(int id) const {
|
| return this->span()->debugPtT(id);
|
| }
|
| @@ -964,7 +987,8 @@ void SkOpPtT::dumpAll() const {
|
| }
|
|
|
| void SkOpPtT::dumpBase() const {
|
| - SkDebugf(" t=%1.9g pt=(%1.9g,%1.9g)%s%s", this->fT, this->fPt.fX, this->fPt.fY,
|
| + SkDebugf(" t=%1.9g pt=(%1.9g,%1.9g)%s%s%s", this->fT, this->fPt.fX, this->fPt.fY,
|
| + this->fCoincident ? " coin" : "",
|
| this->fDuplicatePt ? " dup" : "", this->fDeleted ? " deleted" : "");
|
| }
|
|
|
| @@ -972,6 +996,10 @@ const SkOpAngle* SkOpSpanBase::debugAngle(int id) const {
|
| return this->segment()->debugAngle(id);
|
| }
|
|
|
| +const SkOpCoincidence* SkOpSpanBase::debugCoincidence() const {
|
| + return this->segment()->debugCoincidence();
|
| +}
|
| +
|
| SkOpContour* SkOpSpanBase::debugContour(int id) {
|
| return this->segment()->debugContour(id);
|
| }
|
| @@ -989,15 +1017,19 @@ const SkOpSpanBase* SkOpSpanBase::debugSpan(int id) const {
|
| }
|
|
|
| void SkOpSpanBase::dump() const {
|
| - this->dumpAll();
|
| - SkDebugf("\n");
|
| + this->dumpHead();
|
| + this->fPtT.dump();
|
| }
|
|
|
| -void SkOpSpanBase::dumpAll() const {
|
| +void SkOpSpanBase::dumpHead() const {
|
| SkDebugf("%.*s", contour()->debugIndent(), " ");
|
| SkDebugf("seg=%d span=%d", this->segment()->debugID(), this->debugID());
|
| this->dumpBase();
|
| SkDebugf("\n");
|
| +}
|
| +
|
| +void SkOpSpanBase::dumpAll() const {
|
| + this->dumpHead();
|
| this->fPtT.dumpAll();
|
| }
|
|
|
| @@ -1008,6 +1040,11 @@ void SkOpSpanBase::dumpBase() const {
|
| if (this->fChased) {
|
| SkDebugf(" chased");
|
| }
|
| +#ifdef SK_DEBUG
|
| + if (this->fDeleted) {
|
| + SkDebugf(" deleted");
|
| + }
|
| +#endif
|
| if (!this->final()) {
|
| this->upCast()->dumpSpan();
|
| }
|
| @@ -1069,6 +1106,11 @@ const SkOpAngle* SkOpSegment::debugAngle(int id) const {
|
| return this->contour()->debugAngle(id);
|
| }
|
|
|
| +
|
| +const SkOpCoincidence* SkOpSegment::debugCoincidence() const {
|
| + return this->contour()->debugCoincidence();
|
| +}
|
| +
|
| SkOpContour* SkOpSegment::debugContour(int id) {
|
| return this->contour()->debugContour(id);
|
| }
|
| @@ -1188,20 +1230,26 @@ void SkOpCoincidence::dump() const {
|
| SkCoincidentSpans* span = fHead;
|
| while (span) {
|
| span->dump();
|
| - span = span->fNext;
|
| + span = span->next();
|
| }
|
| if (!fTop || fHead == fTop) {
|
| return;
|
| }
|
| SkDebugf("top:\n");
|
| span = fTop;
|
| - if (fHead) {
|
| - span->dump();
|
| - return;
|
| - }
|
| + int count = 0;
|
| while (span) {
|
| span->dump();
|
| - span = span->fNext;
|
| + span = span->next();
|
| + SkCoincidentSpans* check = fTop;
|
| + ++count;
|
| + for (int index = 0; index < count; ++index) {
|
| + if (span == check) {
|
| + SkDebugf("(loops to #%d)\n", index);
|
| + return;
|
| + }
|
| + check = check->next();
|
| + }
|
| }
|
| }
|
|
|
|
|