Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(936)

Unified Diff: src/pathops/SkPathOpsDebug.cpp

Issue 2273293004: path ops stream-lining (Closed)
Patch Set: remove commented out code Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pathops/SkPathOpsDebug.h ('k') | src/pathops/SkPathOpsTypes.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/pathops/SkPathOpsDebug.cpp
diff --git a/src/pathops/SkPathOpsDebug.cpp b/src/pathops/SkPathOpsDebug.cpp
index df35be0cfe441e1a5f2b881c92186a03d8990b3e..212e2bcc79637246eb754a68c8e8218e09931e91 100644
--- a/src/pathops/SkPathOpsDebug.cpp
+++ b/src/pathops/SkPathOpsDebug.cpp
@@ -582,39 +582,21 @@ void SkDRect::debugInit() {
#if DEBUG_COINCIDENCE
// commented-out lines keep this in sync with addT()
- const SkOpPtT* SkOpSegment::debugAddT(double t, bool* allocated) const {
+ const SkOpPtT* SkOpSegment::debugAddT(double t) const {
debugValidate();
SkPoint pt = this->ptAtT(t);
const SkOpSpanBase* span = &fHead;
do {
const SkOpPtT* result = span->ptT();
- const SkOpPtT* loop;
- bool duplicatePt;
- if (t == result->fT) {
- goto bumpSpan;
- }
- if (this->match(result, this, t, pt)) {
- // see if any existing alias matches segment, pt, and t
- loop = result->next();
- duplicatePt = false;
- while (loop != result) {
- bool ptMatch = loop->fPt == pt;
- if (loop->segment() == this && loop->fT == t && ptMatch) {
- goto bumpSpan;
- }
- duplicatePt |= ptMatch;
- loop = loop->next();
- }
- bumpSpan:
+ if (t == result->fT || this->match(result, this, t, pt)) {
// span->bumpSpanAdds();
return result;
}
if (t < result->fT) {
const SkOpSpan* prev = result->span()->prev();
- if (!prev) {
- return nullptr; // FIXME: this is a fail case; nullptr return elsewhere means result was allocated in non-const version
- }
-// SkOpSpan* span = insert(prev, allocator);
+ FAIL_WITH_NULL_IF(!prev);
+ // marks in global state that new op span has been allocated
+ this->globalState()->setAllocatedOpSpan();
// span->init(this, prev, t, pt);
this->debugValidate();
// #if DEBUG_ADD_T
@@ -622,15 +604,12 @@ void SkDRect::debugInit() {
// span->segment()->debugID(), span->debugID());
// #endif
// span->bumpSpanAdds();
- if (allocated) {
- *allocated = true;
- }
return nullptr;
}
- SkASSERT(span != &fTail);
+ FAIL_WITH_NULL_IF(span != &fTail);
} while ((span = span->upCast()->next()));
SkASSERT(0);
- return nullptr;
+ return nullptr; // we never get here, but need this to satisfy compiler
}
#endif
@@ -1493,9 +1472,9 @@ void SkOpCoincidence::debugAddOrOverlap(const SkOpSegment* coinSeg, const SkOpSe
this->debugValidate();
if (!cs || !os) {
if (!cs)
- cs = coinSeg->debugAddT(coinTs, nullptr);
+ cs = coinSeg->debugAddT(coinTs);
if (!os)
- os = oppSeg->debugAddT(oppTs, nullptr);
+ os = oppSeg->debugAddT(oppTs);
if (cs && os) cs->span()->debugAddOppAndMerge(id, log, os->span(), &csDeleted, &osDeleted);
// cs = csWritable;
// os = osWritable;
@@ -1505,9 +1484,9 @@ void SkOpCoincidence::debugAddOrOverlap(const SkOpSegment* coinSeg, const SkOpSe
}
if (!ce || !oe) {
if (!ce)
- ce = coinSeg->debugAddT(coinTe, nullptr);
+ ce = coinSeg->debugAddT(coinTe);
if (!oe)
- oe = oppSeg->debugAddT(oppTe, nullptr);
+ oe = oppSeg->debugAddT(oppTe);
if (ce && oe) ce->span()->debugAddOppAndMerge(id, log, oe->span(), &ceDeleted, &oeDeleted);
// ce = ceWritable;
// oe = oeWritable;
@@ -2059,7 +2038,9 @@ void SkOpSegment::debugValidate() const {
// Commented-out lines keep this in sync with addOppAndMerge()
// If the added points envelop adjacent spans, merge them in.
void SkOpSpanBase::debugAddOppAndMerge(const char* id, SkPathOpsDebug::GlitchLog* log, const SkOpSpanBase* opp, bool* spanDeleted, bool* oppDeleted) const {
- if (this->ptT()->debugAddOpp(opp->ptT())) {
+ const SkOpPtT* oppPrev = this->ptT()->debugOppPrev(opp->ptT());
+ if (oppPrev) {
+ this->ptT()->debugAddOpp(opp->ptT(), oppPrev);
this->debugCheckForCollapsedCoincidence(id, log);
}
// compute bounds of points in span
@@ -2315,24 +2296,12 @@ int SkIntersections::debugCoincidentUsed() const {
#include "SkOpContour.h"
// Commented-out lines keep this in sync with addOpp()
-bool SkOpPtT::debugAddOpp(const SkOpPtT* opp) const {
- // find the fOpp ptr to opp
- const SkOpPtT* oppPrev = opp->fNext;
- if (oppPrev == this) {
- return false;
- }
- while (oppPrev->fNext != opp) {
- oppPrev = oppPrev->fNext;
- if (oppPrev == this) {
- return false;
- }
- }
-// const SkOpPtT* oldNext = this->fNext;
+void SkOpPtT::debugAddOpp(const SkOpPtT* opp, const SkOpPtT* oppPrev) const {
+ SkDEBUGCODE(const SkOpPtT* oldNext = this->fNext);
SkASSERT(this != opp);
// this->fNext = opp;
-// SkASSERT(oppPrev != oldNext);
+ SkASSERT(oppPrev != oldNext);
// oppPrev->fNext = oldNext;
- return true;
}
bool SkOpPtT::debugContains(const SkOpPtT* check) const {
@@ -2403,6 +2372,10 @@ int SkOpPtT::debugLoopLimit(bool report) const {
return 0;
}
+const SkOpPtT* SkOpPtT::debugOppPrev(const SkOpPtT* opp) const {
+ return this->oppPrev(const_cast<SkOpPtT*>(opp));
+}
+
void SkOpPtT::debugResetCoinT() const {
#if DEBUG_COINCIDENCE_ORDER
this->segment()->debugResetCoinT();
« no previous file with comments | « src/pathops/SkPathOpsDebug.h ('k') | src/pathops/SkPathOpsTypes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698