diff options
author | 2015-03-24 07:28:17 -0700 | |
---|---|---|
committer | 2015-03-24 07:28:17 -0700 | |
commit | ccec0f958ffc71a9986d236bc2eb335cb2111119 (patch) | |
tree | f864209e3594293256ac391715d50222ff22d96b /tests/PathOpsTSectDebug.h | |
parent | 62a320c8d444cd04e4f2952c269ea4cbd58dee64 (diff) |
pathops version two
R=reed@google.com
marked 'no commit' to attempt to get trybots to run
TBR=reed@google.com
Review URL: https://codereview.chromium.org/1002693002
Diffstat (limited to 'tests/PathOpsTSectDebug.h')
-rw-r--r-- | tests/PathOpsTSectDebug.h | 161 |
1 files changed, 121 insertions, 40 deletions
diff --git a/tests/PathOpsTSectDebug.h b/tests/PathOpsTSectDebug.h index 5f8915f681..b4715e63e0 100644 --- a/tests/PathOpsTSectDebug.h +++ b/tests/PathOpsTSectDebug.h @@ -8,77 +8,158 @@ #include "SkPathOpsTSect.h" template<typename TCurve> -void SkTSect<TCurve>::dump() const { - SkDebugf("id=%d", debugID()); +const SkTSpan<TCurve>* SkTSect<TCurve>::debugSpan(int id) const { const SkTSpan<TCurve>* test = fHead; - if (!test) { - SkDebugf(" (empty)"); - return; - } do { - SkDebugf(" "); - test->dump(this); + if (test->debugID() == id) { + return test; + } + } while ((test = test->next())); +#ifndef SK_RELEASE + test = fOppSect->fHead; + do { + if (test->debugID() == id) { + return test; + } + } while ((test = test->next())); +#endif + return NULL; +} + +template<typename TCurve> +const SkTSpan<TCurve>* SkTSect<TCurve>::debugT(double t) const { + const SkTSpan<TCurve>* test = fHead; + const SkTSpan<TCurve>* closest = NULL; + double bestDist = DBL_MAX; + do { + if (between(test->fStartT, t, test->fEndT)) { + return test; + } + double testDist = SkTMin(fabs(test->fStartT - t), fabs(test->fEndT - t)); + if (bestDist > testDist) { + bestDist = testDist; + closest = test; + } } while ((test = test->next())); + SkASSERT(closest); + return closest; } template<typename TCurve> -void SkTSect<TCurve>::dumpBoth(const SkTSect& opp) const { - dump(); +void SkTSect<TCurve>::dump() const { + dumpCommon(fHead); +} + +extern int gDumpTSectNum; + +template<typename TCurve> +void SkTSect<TCurve>::dumpBoth(SkTSect* opp) const { +#if DEBUG_T_SECT_DUMP <= 2 +#if DEBUG_T_SECT_DUMP == 2 + SkDebugf("%d ", ++gDumpTSectNum); +#endif + this->dump(); SkDebugf(" "); - opp.dump(); + opp->dump(); SkDebugf("\n"); +#elif DEBUG_T_SECT_DUMP == 3 + SkDebugf("<div id=\"sect%d\">\n", ++gDumpTSectNum); + if (this->fHead) { + this->dumpCurves(); + } + if (opp->fHead) { + PATH_OPS_DEBUG_CODE(opp->dumpCurves()); + } + SkDebugf("</div>\n\n"); +#endif } template<typename TCurve> -void SkTSect<TCurve>::dumpBoth(const SkTSect* opp) const { - dumpBoth(*opp); +void SkTSect<TCurve>::dumpBounds(int id) const { + const SkTSpan<TCurve>* bounded = debugSpan(id); + if (!bounded) { + SkDebugf("no span matches %d\n", id); + return; + } + const SkTSpan<TCurve>* test = bounded->debugOpp()->fHead; + do { + if (test->findOppSpan(bounded)) { + test->dump(); + } + } while ((test = test->next())); } template<typename TCurve> -void SkTSect<TCurve>::dumpCurves() const { - const SkTSpan<TCurve>* test = fHead; +void SkTSect<TCurve>::dumpCoin() const { + dumpCommon(fCoincident); +} + +template<typename TCurve> +void SkTSect<TCurve>::dumpCoinCurves() const { + dumpCommonCurves(fCoincident); +} + +template<typename TCurve> +void SkTSect<TCurve>::dumpCommon(const SkTSpan<TCurve>* test) const { + SkDebugf("id=%d", debugID()); + if (!test) { + SkDebugf(" (empty)"); + return; + } do { - test->fPart.dump(); + SkDebugf(" "); + test->dump(); } while ((test = test->next())); } -#if !DEBUG_T_SECT template<typename TCurve> -int SkTSpan<TCurve>::debugID(const SkTSect<TCurve>* sect) const { - if (!sect) { - return -1; - } - int id = 1; - const SkTSpan* test = sect->fHead; - while (test && test != this) { - ++id; - test = test->fNext; - } - return id; +void SkTSect<TCurve>::dumpCommonCurves(const SkTSpan<TCurve>* test) const { + do { + test->fPart.dumpID(test->debugID()); + } while ((test = test->next())); } -#endif template<typename TCurve> -void SkTSpan<TCurve>::dumpID(const SkTSect<TCurve>* sect) const { - if (fCoinStart.isCoincident()) { - SkDebugf("%c", '*'); - } - SkDebugf("%d", debugID(sect)); - if (fCoinEnd.isCoincident()) { - SkDebugf("%c", '*'); - } +void SkTSect<TCurve>::dumpCurves() const { + dumpCommonCurves(fHead); +} + +template<typename TCurve> +const SkTSpan<TCurve>* SkTSpan<TCurve>::debugSpan(int id) const { + return PATH_OPS_DEBUG_RELEASE(fDebugSect->debugSpan(id), NULL); +} + +template<typename TCurve> +const SkTSpan<TCurve>* SkTSpan<TCurve>::debugT(double t) const { + return PATH_OPS_DEBUG_RELEASE(fDebugSect->debugT(t), NULL); } template<typename TCurve> -void SkTSpan<TCurve>::dump(const SkTSect<TCurve>* sect) const { - dumpID(sect); +void SkTSpan<TCurve>::dump() const { + dumpID(); SkDebugf("=(%g,%g) [", fStartT, fEndT); for (int index = 0; index < fBounded.count(); ++index) { SkTSpan* span = fBounded[index]; - span->dumpID(sect); + span->dumpID(); if (index < fBounded.count() - 1) { SkDebugf(","); } } SkDebugf("]"); } + +template<typename TCurve> +void SkTSpan<TCurve>::dumpBounds(int id) const { + PATH_OPS_DEBUG_CODE(fDebugSect->dumpBounds(id)); +} + +template<typename TCurve> +void SkTSpan<TCurve>::dumpID() const { + if (fCoinStart.isCoincident()) { + SkDebugf("%c", '*'); + } + SkDebugf("%d", debugID()); + if (fCoinEnd.isCoincident()) { + SkDebugf("%c", '*'); + } +} |