1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2014 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "include/core/SkString.h" 9cb93a386Sopenharmony_ci#include "include/private/SkMutex.h" 10cb93a386Sopenharmony_ci#include "src/pathops/SkIntersectionHelper.h" 11cb93a386Sopenharmony_ci#include "src/pathops/SkOpCoincidence.h" 12cb93a386Sopenharmony_ci#include "src/pathops/SkOpContour.h" 13cb93a386Sopenharmony_ci#include "src/pathops/SkOpSegment.h" 14cb93a386Sopenharmony_ci#include "tests/PathOpsDebug.h" 15cb93a386Sopenharmony_ci#include "tests/PathOpsTSectDebug.h" 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_cibool PathOpsDebug::gJson; 18cb93a386Sopenharmony_cibool PathOpsDebug::gMarkJsonFlaky; 19cb93a386Sopenharmony_cibool PathOpsDebug::gOutFirst; 20cb93a386Sopenharmony_cibool PathOpsDebug::gCheckForDuplicateNames; 21cb93a386Sopenharmony_cibool PathOpsDebug::gOutputSVG; 22cb93a386Sopenharmony_ciFILE* PathOpsDebug::gOut; 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ciinline void DebugDumpDouble(double x) { 25cb93a386Sopenharmony_ci if (x == floor(x)) { 26cb93a386Sopenharmony_ci SkDebugf("%.0f", x); 27cb93a386Sopenharmony_ci } else { 28cb93a386Sopenharmony_ci SkDebugf("%1.19g", x); 29cb93a386Sopenharmony_ci } 30cb93a386Sopenharmony_ci} 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ciinline void DebugDumpFloat(float x) { 33cb93a386Sopenharmony_ci if (x == floorf(x)) { 34cb93a386Sopenharmony_ci SkDebugf("%.0f", x); 35cb93a386Sopenharmony_ci } else { 36cb93a386Sopenharmony_ci SkDebugf("%1.9gf", x); 37cb93a386Sopenharmony_ci } 38cb93a386Sopenharmony_ci} 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ciinline void DebugDumpHexFloat(float x) { 41cb93a386Sopenharmony_ci SkDebugf("SkBits2Float(0x%08x)", SkFloat2Bits(x)); 42cb93a386Sopenharmony_ci} 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci// if not defined by PathOpsDebug.cpp ... 45cb93a386Sopenharmony_ci#if !defined SK_DEBUG && FORCE_RELEASE 46cb93a386Sopenharmony_cibool SkPathOpsDebug::ValidWind(int wind) { 47cb93a386Sopenharmony_ci return wind > SK_MinS32 + 0xFFFF && wind < SK_MaxS32 - 0xFFFF; 48cb93a386Sopenharmony_ci} 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_civoid SkPathOpsDebug::WindingPrintf(int wind) { 51cb93a386Sopenharmony_ci if (wind == SK_MinS32) { 52cb93a386Sopenharmony_ci SkDebugf("?"); 53cb93a386Sopenharmony_ci } else { 54cb93a386Sopenharmony_ci SkDebugf("%d", wind); 55cb93a386Sopenharmony_ci } 56cb93a386Sopenharmony_ci} 57cb93a386Sopenharmony_ci#endif 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_cistatic void DumpID(int id) { 60cb93a386Sopenharmony_ci SkDebugf("} "); 61cb93a386Sopenharmony_ci if (id >= 0) { 62cb93a386Sopenharmony_ci SkDebugf("id=%d", id); 63cb93a386Sopenharmony_ci } 64cb93a386Sopenharmony_ci SkDebugf("\n"); 65cb93a386Sopenharmony_ci} 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_civoid SkDConic::dump() const { 68cb93a386Sopenharmony_ci dumpInner(); 69cb93a386Sopenharmony_ci SkDebugf("},\n"); 70cb93a386Sopenharmony_ci} 71cb93a386Sopenharmony_ci 72cb93a386Sopenharmony_civoid SkDConic::dumpID(int id) const { 73cb93a386Sopenharmony_ci dumpInner(); 74cb93a386Sopenharmony_ci DumpID(id); 75cb93a386Sopenharmony_ci} 76cb93a386Sopenharmony_ci 77cb93a386Sopenharmony_civoid SkDConic::dumpInner() const { 78cb93a386Sopenharmony_ci SkDebugf("{"); 79cb93a386Sopenharmony_ci fPts.dumpInner(); 80cb93a386Sopenharmony_ci SkDebugf("}}, %1.9gf", fWeight); 81cb93a386Sopenharmony_ci} 82cb93a386Sopenharmony_ci 83cb93a386Sopenharmony_civoid SkDCubic::dump() const { 84cb93a386Sopenharmony_ci this->dumpInner(); 85cb93a386Sopenharmony_ci SkDebugf("}},\n"); 86cb93a386Sopenharmony_ci} 87cb93a386Sopenharmony_ci 88cb93a386Sopenharmony_civoid SkDCubic::dumpID(int id) const { 89cb93a386Sopenharmony_ci this->dumpInner(); 90cb93a386Sopenharmony_ci SkDebugf("}"); 91cb93a386Sopenharmony_ci DumpID(id); 92cb93a386Sopenharmony_ci} 93cb93a386Sopenharmony_ci 94cb93a386Sopenharmony_cistatic inline bool double_is_NaN(double x) { return x != x; } 95cb93a386Sopenharmony_ci 96cb93a386Sopenharmony_civoid SkDCubic::dumpInner() const { 97cb93a386Sopenharmony_ci SkDebugf("{{"); 98cb93a386Sopenharmony_ci int index = 0; 99cb93a386Sopenharmony_ci do { 100cb93a386Sopenharmony_ci if (index != 0) { 101cb93a386Sopenharmony_ci if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY)) { 102cb93a386Sopenharmony_ci return; 103cb93a386Sopenharmony_ci } 104cb93a386Sopenharmony_ci SkDebugf(", "); 105cb93a386Sopenharmony_ci } 106cb93a386Sopenharmony_ci fPts[index].dump(); 107cb93a386Sopenharmony_ci } while (++index < 3); 108cb93a386Sopenharmony_ci if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY)) { 109cb93a386Sopenharmony_ci return; 110cb93a386Sopenharmony_ci } 111cb93a386Sopenharmony_ci SkDebugf(", "); 112cb93a386Sopenharmony_ci fPts[index].dump(); 113cb93a386Sopenharmony_ci} 114cb93a386Sopenharmony_ci 115cb93a386Sopenharmony_civoid SkDCurve::dump() const { 116cb93a386Sopenharmony_ci dumpID(-1); 117cb93a386Sopenharmony_ci} 118cb93a386Sopenharmony_ci 119cb93a386Sopenharmony_civoid SkDCurve::dumpID(int id) const { 120cb93a386Sopenharmony_ci#ifndef SK_RELEASE 121cb93a386Sopenharmony_ci switch(fVerb) { 122cb93a386Sopenharmony_ci case SkPath::kLine_Verb: 123cb93a386Sopenharmony_ci fLine.dumpID(id); 124cb93a386Sopenharmony_ci break; 125cb93a386Sopenharmony_ci case SkPath::kQuad_Verb: 126cb93a386Sopenharmony_ci fQuad.dumpID(id); 127cb93a386Sopenharmony_ci break; 128cb93a386Sopenharmony_ci case SkPath::kConic_Verb: 129cb93a386Sopenharmony_ci fConic.dumpID(id); 130cb93a386Sopenharmony_ci break; 131cb93a386Sopenharmony_ci case SkPath::kCubic_Verb: 132cb93a386Sopenharmony_ci fCubic.dumpID(id); 133cb93a386Sopenharmony_ci break; 134cb93a386Sopenharmony_ci default: 135cb93a386Sopenharmony_ci SkASSERT(0); 136cb93a386Sopenharmony_ci } 137cb93a386Sopenharmony_ci#else 138cb93a386Sopenharmony_ci fCubic.dumpID(id); 139cb93a386Sopenharmony_ci#endif 140cb93a386Sopenharmony_ci} 141cb93a386Sopenharmony_ci 142cb93a386Sopenharmony_civoid SkDLine::dump() const { 143cb93a386Sopenharmony_ci this->dumpInner(); 144cb93a386Sopenharmony_ci SkDebugf("}},\n"); 145cb93a386Sopenharmony_ci} 146cb93a386Sopenharmony_ci 147cb93a386Sopenharmony_civoid SkDLine::dumpID(int id) const { 148cb93a386Sopenharmony_ci this->dumpInner(); 149cb93a386Sopenharmony_ci SkDebugf("}"); 150cb93a386Sopenharmony_ci DumpID(id); 151cb93a386Sopenharmony_ci} 152cb93a386Sopenharmony_ci 153cb93a386Sopenharmony_civoid SkDLine::dumpInner() const { 154cb93a386Sopenharmony_ci SkDebugf("{{"); 155cb93a386Sopenharmony_ci fPts[0].dump(); 156cb93a386Sopenharmony_ci SkDebugf(", "); 157cb93a386Sopenharmony_ci fPts[1].dump(); 158cb93a386Sopenharmony_ci} 159cb93a386Sopenharmony_ci 160cb93a386Sopenharmony_civoid SkDPoint::dump() const { 161cb93a386Sopenharmony_ci SkDebugf("{"); 162cb93a386Sopenharmony_ci DebugDumpDouble(fX); 163cb93a386Sopenharmony_ci SkDebugf(", "); 164cb93a386Sopenharmony_ci DebugDumpDouble(fY); 165cb93a386Sopenharmony_ci SkDebugf("}"); 166cb93a386Sopenharmony_ci} 167cb93a386Sopenharmony_ci 168cb93a386Sopenharmony_civoid SkDPoint::Dump(const SkPoint& pt) { 169cb93a386Sopenharmony_ci SkDebugf("{"); 170cb93a386Sopenharmony_ci DebugDumpFloat(pt.fX); 171cb93a386Sopenharmony_ci SkDebugf(", "); 172cb93a386Sopenharmony_ci DebugDumpFloat(pt.fY); 173cb93a386Sopenharmony_ci SkDebugf("}"); 174cb93a386Sopenharmony_ci} 175cb93a386Sopenharmony_ci 176cb93a386Sopenharmony_civoid SkDPoint::DumpHex(const SkPoint& pt) { 177cb93a386Sopenharmony_ci SkDebugf("{"); 178cb93a386Sopenharmony_ci DebugDumpHexFloat(pt.fX); 179cb93a386Sopenharmony_ci SkDebugf(", "); 180cb93a386Sopenharmony_ci DebugDumpHexFloat(pt.fY); 181cb93a386Sopenharmony_ci SkDebugf("}"); 182cb93a386Sopenharmony_ci} 183cb93a386Sopenharmony_ci 184cb93a386Sopenharmony_civoid SkDQuad::dump() const { 185cb93a386Sopenharmony_ci dumpInner(); 186cb93a386Sopenharmony_ci SkDebugf("}},\n"); 187cb93a386Sopenharmony_ci} 188cb93a386Sopenharmony_ci 189cb93a386Sopenharmony_civoid SkDQuad::dumpID(int id) const { 190cb93a386Sopenharmony_ci dumpInner(); 191cb93a386Sopenharmony_ci SkDebugf("}"); 192cb93a386Sopenharmony_ci DumpID(id); 193cb93a386Sopenharmony_ci} 194cb93a386Sopenharmony_ci 195cb93a386Sopenharmony_civoid SkDQuad::dumpInner() const { 196cb93a386Sopenharmony_ci SkDebugf("{{"); 197cb93a386Sopenharmony_ci int index = 0; 198cb93a386Sopenharmony_ci do { 199cb93a386Sopenharmony_ci fPts[index].dump(); 200cb93a386Sopenharmony_ci SkDebugf(", "); 201cb93a386Sopenharmony_ci } while (++index < 2); 202cb93a386Sopenharmony_ci fPts[index].dump(); 203cb93a386Sopenharmony_ci} 204cb93a386Sopenharmony_ci 205cb93a386Sopenharmony_civoid SkIntersections::dump() const { 206cb93a386Sopenharmony_ci SkDebugf("used=%d of %d", fUsed, fMax); 207cb93a386Sopenharmony_ci for (int index = 0; index < fUsed; ++index) { 208cb93a386Sopenharmony_ci SkDebugf(" t=(%s%1.9g,%s%1.9g) pt=(%1.9g,%1.9g)", 209cb93a386Sopenharmony_ci fIsCoincident[0] & (1 << index) ? "*" : "", fT[0][index], 210cb93a386Sopenharmony_ci fIsCoincident[1] & (1 << index) ? "*" : "", fT[1][index], 211cb93a386Sopenharmony_ci fPt[index].fX, fPt[index].fY); 212cb93a386Sopenharmony_ci if (index < 2 && fNearlySame[index]) { 213cb93a386Sopenharmony_ci SkDebugf(" pt2=(%1.9g,%1.9g)",fPt2[index].fX, fPt2[index].fY); 214cb93a386Sopenharmony_ci } 215cb93a386Sopenharmony_ci } 216cb93a386Sopenharmony_ci SkDebugf("\n"); 217cb93a386Sopenharmony_ci} 218cb93a386Sopenharmony_ci 219cb93a386Sopenharmony_ciconst SkOpAngle* AngleAngle(const SkOpAngle* angle, int id) { 220cb93a386Sopenharmony_ci return angle->debugAngle(id); 221cb93a386Sopenharmony_ci} 222cb93a386Sopenharmony_ci 223cb93a386Sopenharmony_ciSkOpContour* AngleContour(SkOpAngle* angle, int id) { 224cb93a386Sopenharmony_ci return angle->debugContour(id); 225cb93a386Sopenharmony_ci} 226cb93a386Sopenharmony_ci 227cb93a386Sopenharmony_ciconst SkOpPtT* AnglePtT(const SkOpAngle* angle, int id) { 228cb93a386Sopenharmony_ci return angle->debugPtT(id); 229cb93a386Sopenharmony_ci} 230cb93a386Sopenharmony_ci 231cb93a386Sopenharmony_ciconst SkOpSegment* AngleSegment(const SkOpAngle* angle, int id) { 232cb93a386Sopenharmony_ci return angle->debugSegment(id); 233cb93a386Sopenharmony_ci} 234cb93a386Sopenharmony_ci 235cb93a386Sopenharmony_ciconst SkOpSpanBase* AngleSpan(const SkOpAngle* angle, int id) { 236cb93a386Sopenharmony_ci return angle->debugSpan(id); 237cb93a386Sopenharmony_ci} 238cb93a386Sopenharmony_ci 239cb93a386Sopenharmony_ciconst SkOpAngle* ContourAngle(SkOpContour* contour, int id) { 240cb93a386Sopenharmony_ci return contour->debugAngle(id); 241cb93a386Sopenharmony_ci} 242cb93a386Sopenharmony_ci 243cb93a386Sopenharmony_ciSkOpContour* ContourContour(SkOpContour* contour, int id) { 244cb93a386Sopenharmony_ci return contour->debugContour(id); 245cb93a386Sopenharmony_ci} 246cb93a386Sopenharmony_ci 247cb93a386Sopenharmony_ciconst SkOpPtT* ContourPtT(SkOpContour* contour, int id) { 248cb93a386Sopenharmony_ci return contour->debugPtT(id); 249cb93a386Sopenharmony_ci} 250cb93a386Sopenharmony_ci 251cb93a386Sopenharmony_ciconst SkOpSegment* ContourSegment(SkOpContour* contour, int id) { 252cb93a386Sopenharmony_ci return contour->debugSegment(id); 253cb93a386Sopenharmony_ci} 254cb93a386Sopenharmony_ci 255cb93a386Sopenharmony_ciconst SkOpSpanBase* ContourSpan(SkOpContour* contour, int id) { 256cb93a386Sopenharmony_ci return contour->debugSpan(id); 257cb93a386Sopenharmony_ci} 258cb93a386Sopenharmony_ci 259cb93a386Sopenharmony_ciconst SkOpAngle* CoincidenceAngle(SkOpCoincidence* coin, int id) { 260cb93a386Sopenharmony_ci return coin->debugAngle(id); 261cb93a386Sopenharmony_ci} 262cb93a386Sopenharmony_ci 263cb93a386Sopenharmony_ciSkOpContour* CoincidenceContour(SkOpCoincidence* coin, int id) { 264cb93a386Sopenharmony_ci return coin->debugContour(id); 265cb93a386Sopenharmony_ci} 266cb93a386Sopenharmony_ci 267cb93a386Sopenharmony_ciconst SkOpPtT* CoincidencePtT(SkOpCoincidence* coin, int id) { 268cb93a386Sopenharmony_ci return coin->debugPtT(id); 269cb93a386Sopenharmony_ci} 270cb93a386Sopenharmony_ci 271cb93a386Sopenharmony_ciconst SkOpSegment* CoincidenceSegment(SkOpCoincidence* coin, int id) { 272cb93a386Sopenharmony_ci return coin->debugSegment(id); 273cb93a386Sopenharmony_ci} 274cb93a386Sopenharmony_ci 275cb93a386Sopenharmony_ciconst SkOpSpanBase* CoincidenceSpan(SkOpCoincidence* coin, int id) { 276cb93a386Sopenharmony_ci return coin->debugSpan(id); 277cb93a386Sopenharmony_ci} 278cb93a386Sopenharmony_ci 279cb93a386Sopenharmony_ciconst SkOpAngle* PtTAngle(const SkOpPtT* ptT, int id) { 280cb93a386Sopenharmony_ci return ptT->debugAngle(id); 281cb93a386Sopenharmony_ci} 282cb93a386Sopenharmony_ci 283cb93a386Sopenharmony_ciSkOpContour* PtTContour(SkOpPtT* ptT, int id) { 284cb93a386Sopenharmony_ci return ptT->debugContour(id); 285cb93a386Sopenharmony_ci} 286cb93a386Sopenharmony_ci 287cb93a386Sopenharmony_ciconst SkOpPtT* PtTPtT(const SkOpPtT* ptT, int id) { 288cb93a386Sopenharmony_ci return ptT->debugPtT(id); 289cb93a386Sopenharmony_ci} 290cb93a386Sopenharmony_ci 291cb93a386Sopenharmony_ciconst SkOpSegment* PtTSegment(const SkOpPtT* ptT, int id) { 292cb93a386Sopenharmony_ci return ptT->debugSegment(id); 293cb93a386Sopenharmony_ci} 294cb93a386Sopenharmony_ci 295cb93a386Sopenharmony_ciconst SkOpSpanBase* PtTSpan(const SkOpPtT* ptT, int id) { 296cb93a386Sopenharmony_ci return ptT->debugSpan(id); 297cb93a386Sopenharmony_ci} 298cb93a386Sopenharmony_ci 299cb93a386Sopenharmony_ciconst SkOpAngle* SegmentAngle(const SkOpSegment* span, int id) { 300cb93a386Sopenharmony_ci return span->debugAngle(id); 301cb93a386Sopenharmony_ci} 302cb93a386Sopenharmony_ci 303cb93a386Sopenharmony_ciSkOpContour* SegmentContour(SkOpSegment* span, int id) { 304cb93a386Sopenharmony_ci return span->debugContour(id); 305cb93a386Sopenharmony_ci} 306cb93a386Sopenharmony_ci 307cb93a386Sopenharmony_ciconst SkOpPtT* SegmentPtT(const SkOpSegment* span, int id) { 308cb93a386Sopenharmony_ci return span->debugPtT(id); 309cb93a386Sopenharmony_ci} 310cb93a386Sopenharmony_ci 311cb93a386Sopenharmony_ciconst SkOpSegment* SegmentSegment(const SkOpSegment* span, int id) { 312cb93a386Sopenharmony_ci return span->debugSegment(id); 313cb93a386Sopenharmony_ci} 314cb93a386Sopenharmony_ci 315cb93a386Sopenharmony_ciconst SkOpSpanBase* SegmentSpan(const SkOpSegment* span, int id) { 316cb93a386Sopenharmony_ci return span->debugSpan(id); 317cb93a386Sopenharmony_ci} 318cb93a386Sopenharmony_ci 319cb93a386Sopenharmony_ciconst SkOpAngle* SpanAngle(const SkOpSpanBase* span, int id) { 320cb93a386Sopenharmony_ci return span->debugAngle(id); 321cb93a386Sopenharmony_ci} 322cb93a386Sopenharmony_ci 323cb93a386Sopenharmony_ciSkOpContour* SpanContour(SkOpSpanBase* span, int id) { 324cb93a386Sopenharmony_ci return span->debugContour(id); 325cb93a386Sopenharmony_ci} 326cb93a386Sopenharmony_ci 327cb93a386Sopenharmony_ciconst SkOpPtT* SpanPtT(const SkOpSpanBase* span, int id) { 328cb93a386Sopenharmony_ci return span->debugPtT(id); 329cb93a386Sopenharmony_ci} 330cb93a386Sopenharmony_ci 331cb93a386Sopenharmony_ciconst SkOpSegment* SpanSegment(const SkOpSpanBase* span, int id) { 332cb93a386Sopenharmony_ci return span->debugSegment(id); 333cb93a386Sopenharmony_ci} 334cb93a386Sopenharmony_ci 335cb93a386Sopenharmony_ciconst SkOpSpanBase* SpanSpan(const SkOpSpanBase* span, int id) { 336cb93a386Sopenharmony_ci return span->debugSpan(id); 337cb93a386Sopenharmony_ci} 338cb93a386Sopenharmony_ci 339cb93a386Sopenharmony_ci#if DEBUG_COIN 340cb93a386Sopenharmony_civoid SkPathOpsDebug::DumpCoinDict() { 341cb93a386Sopenharmony_ci SkPathOpsDebug::gCoinSumChangedDict.dump("unused coin algorithm", false); 342cb93a386Sopenharmony_ci SkPathOpsDebug::gCoinSumVisitedDict.dump("visited coin function", true); 343cb93a386Sopenharmony_ci} 344cb93a386Sopenharmony_ci 345cb93a386Sopenharmony_civoid SkPathOpsDebug::CoinDict::dump(const char* str, bool visitCheck) const { 346cb93a386Sopenharmony_ci int count = fDict.count(); 347cb93a386Sopenharmony_ci for (int index = 0; index < count; ++index) { 348cb93a386Sopenharmony_ci const auto& entry = fDict[index]; 349cb93a386Sopenharmony_ci if (visitCheck || entry.fGlitchType == kUninitialized_Glitch) { 350cb93a386Sopenharmony_ci SkDebugf("%s %s : line %d iteration %d", str, entry.fFunctionName, 351cb93a386Sopenharmony_ci entry.fLineNumber, entry.fIteration); 352cb93a386Sopenharmony_ci DumpGlitchType(entry.fGlitchType); 353cb93a386Sopenharmony_ci SkDebugf("\n"); 354cb93a386Sopenharmony_ci } 355cb93a386Sopenharmony_ci } 356cb93a386Sopenharmony_ci} 357cb93a386Sopenharmony_ci#endif 358cb93a386Sopenharmony_ci 359cb93a386Sopenharmony_civoid SkOpContour::dumpContours() const { 360cb93a386Sopenharmony_ci SkOpContour* contour = this->globalState()->contourHead(); 361cb93a386Sopenharmony_ci do { 362cb93a386Sopenharmony_ci contour->dump(); 363cb93a386Sopenharmony_ci } while ((contour = contour->next())); 364cb93a386Sopenharmony_ci} 365cb93a386Sopenharmony_ci 366cb93a386Sopenharmony_civoid SkOpContour::dumpContoursAll() const { 367cb93a386Sopenharmony_ci SkOpContour* contour = this->globalState()->contourHead(); 368cb93a386Sopenharmony_ci do { 369cb93a386Sopenharmony_ci contour->dumpAll(); 370cb93a386Sopenharmony_ci } while ((contour = contour->next())); 371cb93a386Sopenharmony_ci} 372cb93a386Sopenharmony_ci 373cb93a386Sopenharmony_civoid SkOpContour::dumpContoursAngles() const { 374cb93a386Sopenharmony_ci SkOpContour* contour = this->globalState()->contourHead(); 375cb93a386Sopenharmony_ci do { 376cb93a386Sopenharmony_ci contour->dumpAngles(); 377cb93a386Sopenharmony_ci } while ((contour = contour->next())); 378cb93a386Sopenharmony_ci} 379cb93a386Sopenharmony_ci 380cb93a386Sopenharmony_civoid SkOpContour::dumpContoursPts() const { 381cb93a386Sopenharmony_ci SkOpContour* contour = this->globalState()->contourHead(); 382cb93a386Sopenharmony_ci do { 383cb93a386Sopenharmony_ci contour->dumpPts(); 384cb93a386Sopenharmony_ci } while ((contour = contour->next())); 385cb93a386Sopenharmony_ci} 386cb93a386Sopenharmony_ci 387cb93a386Sopenharmony_civoid SkOpContour::dumpContoursPt(int segmentID) const { 388cb93a386Sopenharmony_ci SkOpContour* contour = this->globalState()->contourHead(); 389cb93a386Sopenharmony_ci do { 390cb93a386Sopenharmony_ci contour->dumpPt(segmentID); 391cb93a386Sopenharmony_ci } while ((contour = contour->next())); 392cb93a386Sopenharmony_ci} 393cb93a386Sopenharmony_ci 394cb93a386Sopenharmony_civoid SkOpContour::dumpContoursSegment(int segmentID) const { 395cb93a386Sopenharmony_ci SkOpContour* contour = this->globalState()->contourHead(); 396cb93a386Sopenharmony_ci do { 397cb93a386Sopenharmony_ci contour->dumpSegment(segmentID); 398cb93a386Sopenharmony_ci } while ((contour = contour->next())); 399cb93a386Sopenharmony_ci} 400cb93a386Sopenharmony_ci 401cb93a386Sopenharmony_civoid SkOpContour::dumpContoursSpan(int spanID) const { 402cb93a386Sopenharmony_ci SkOpContour* contour = this->globalState()->contourHead(); 403cb93a386Sopenharmony_ci do { 404cb93a386Sopenharmony_ci contour->dumpSpan(spanID); 405cb93a386Sopenharmony_ci } while ((contour = contour->next())); 406cb93a386Sopenharmony_ci} 407cb93a386Sopenharmony_ci 408cb93a386Sopenharmony_civoid SkOpContour::dumpContoursSpans() const { 409cb93a386Sopenharmony_ci SkOpContour* contour = this->globalState()->contourHead(); 410cb93a386Sopenharmony_ci do { 411cb93a386Sopenharmony_ci contour->dumpSpans(); 412cb93a386Sopenharmony_ci } while ((contour = contour->next())); 413cb93a386Sopenharmony_ci} 414cb93a386Sopenharmony_ci 415cb93a386Sopenharmony_ci#ifdef SK_DEBUG 416cb93a386Sopenharmony_ciconst SkTSpan* DebugSpan(const SkTSect* sect, int id) { 417cb93a386Sopenharmony_ci return sect->debugSpan(id); 418cb93a386Sopenharmony_ci} 419cb93a386Sopenharmony_ci 420cb93a386Sopenharmony_ciconst SkTSpan* DebugT(const SkTSect* sect, double t) { 421cb93a386Sopenharmony_ci return sect->debugT(t); 422cb93a386Sopenharmony_ci} 423cb93a386Sopenharmony_ci#endif 424cb93a386Sopenharmony_ci 425cb93a386Sopenharmony_civoid Dump(const SkTSect* sect) { 426cb93a386Sopenharmony_ci sect->dump(); 427cb93a386Sopenharmony_ci} 428cb93a386Sopenharmony_ci 429cb93a386Sopenharmony_civoid DumpBoth(SkTSect* sect1, SkTSect* sect2) { 430cb93a386Sopenharmony_ci sect1->dumpBoth(sect2); 431cb93a386Sopenharmony_ci} 432cb93a386Sopenharmony_ci 433cb93a386Sopenharmony_civoid DumpBounded(SkTSect* sect1, int id) { 434cb93a386Sopenharmony_ci sect1->dumpBounded(id); 435cb93a386Sopenharmony_ci} 436cb93a386Sopenharmony_ci 437cb93a386Sopenharmony_civoid DumpBounds(SkTSect* sect1) { 438cb93a386Sopenharmony_ci sect1->dumpBounds(); 439cb93a386Sopenharmony_ci} 440cb93a386Sopenharmony_ci 441cb93a386Sopenharmony_civoid DumpCoin(SkTSect* sect1) { 442cb93a386Sopenharmony_ci sect1->dumpCoin(); 443cb93a386Sopenharmony_ci} 444cb93a386Sopenharmony_ci 445cb93a386Sopenharmony_civoid DumpCoinCurves(SkTSect* sect1) { 446cb93a386Sopenharmony_ci sect1->dumpCoinCurves(); 447cb93a386Sopenharmony_ci} 448cb93a386Sopenharmony_ci 449cb93a386Sopenharmony_civoid DumpCurves(const SkTSect* sect) { 450cb93a386Sopenharmony_ci sect->dumpCurves(); 451cb93a386Sopenharmony_ci} 452cb93a386Sopenharmony_ci 453cb93a386Sopenharmony_civoid Dump(const SkTSpan* span) { 454cb93a386Sopenharmony_ci span->dump(); 455cb93a386Sopenharmony_ci} 456cb93a386Sopenharmony_ci 457cb93a386Sopenharmony_civoid DumpAll(const SkTSpan* span) { 458cb93a386Sopenharmony_ci span->dumpAll(); 459cb93a386Sopenharmony_ci} 460cb93a386Sopenharmony_ci 461cb93a386Sopenharmony_civoid DumpBounded(const SkTSpan* span) { 462cb93a386Sopenharmony_ci span->dumpBounded(0); 463cb93a386Sopenharmony_ci} 464cb93a386Sopenharmony_ci 465cb93a386Sopenharmony_civoid DumpCoin(const SkTSpan* span) { 466cb93a386Sopenharmony_ci span->dumpCoin(); 467cb93a386Sopenharmony_ci} 468cb93a386Sopenharmony_ci 469cb93a386Sopenharmony_cistatic void dumpTestCase(const SkDQuad& quad1, const SkDQuad& quad2, int testNo) { 470cb93a386Sopenharmony_ci SkDebugf("\n<div id=\"quad%d\">\n", testNo); 471cb93a386Sopenharmony_ci quad1.dumpInner(); 472cb93a386Sopenharmony_ci SkDebugf("}}, "); 473cb93a386Sopenharmony_ci quad2.dump(); 474cb93a386Sopenharmony_ci SkDebugf("</div>\n\n"); 475cb93a386Sopenharmony_ci} 476cb93a386Sopenharmony_ci 477cb93a386Sopenharmony_cistatic void dumpTestTrailer() { 478cb93a386Sopenharmony_ci SkDebugf("</div>\n\n<script type=\"text/javascript\">\n\n"); 479cb93a386Sopenharmony_ci SkDebugf(" var testDivs = [\n"); 480cb93a386Sopenharmony_ci} 481cb93a386Sopenharmony_ci 482cb93a386Sopenharmony_cistatic void dumpTestList(int testNo, double min) { 483cb93a386Sopenharmony_ci SkDebugf(" quad%d,", testNo); 484cb93a386Sopenharmony_ci if (min > 0) { 485cb93a386Sopenharmony_ci SkDebugf(" // %1.9g", min); 486cb93a386Sopenharmony_ci } 487cb93a386Sopenharmony_ci SkDebugf("\n"); 488cb93a386Sopenharmony_ci} 489cb93a386Sopenharmony_ci 490cb93a386Sopenharmony_civoid DumpQ(const SkDQuad& quad1, const SkDQuad& quad2, int testNo) { 491cb93a386Sopenharmony_ci SkDebugf("\n"); 492cb93a386Sopenharmony_ci dumpTestCase(quad1, quad2, testNo); 493cb93a386Sopenharmony_ci dumpTestTrailer(); 494cb93a386Sopenharmony_ci dumpTestList(testNo, 0); 495cb93a386Sopenharmony_ci SkDebugf("\n"); 496cb93a386Sopenharmony_ci} 497cb93a386Sopenharmony_ci 498cb93a386Sopenharmony_civoid DumpT(const SkDQuad& quad, double t) { 499cb93a386Sopenharmony_ci SkDLine line = {{quad.ptAtT(t), quad[0]}}; 500cb93a386Sopenharmony_ci line.dump(); 501cb93a386Sopenharmony_ci} 502cb93a386Sopenharmony_ci 503cb93a386Sopenharmony_ciconst SkOpAngle* SkOpAngle::debugAngle(int id) const { 504cb93a386Sopenharmony_ci return this->segment()->debugAngle(id); 505cb93a386Sopenharmony_ci} 506cb93a386Sopenharmony_ci 507cb93a386Sopenharmony_ciconst SkOpCoincidence* SkOpAngle::debugCoincidence() const { 508cb93a386Sopenharmony_ci return this->segment()->debugCoincidence(); 509cb93a386Sopenharmony_ci} 510cb93a386Sopenharmony_ci 511cb93a386Sopenharmony_ciSkOpContour* SkOpAngle::debugContour(int id) const { 512cb93a386Sopenharmony_ci return this->segment()->debugContour(id); 513cb93a386Sopenharmony_ci} 514cb93a386Sopenharmony_ci 515cb93a386Sopenharmony_ciconst SkOpPtT* SkOpAngle::debugPtT(int id) const { 516cb93a386Sopenharmony_ci return this->segment()->debugPtT(id); 517cb93a386Sopenharmony_ci} 518cb93a386Sopenharmony_ci 519cb93a386Sopenharmony_ciconst SkOpSegment* SkOpAngle::debugSegment(int id) const { 520cb93a386Sopenharmony_ci return this->segment()->debugSegment(id); 521cb93a386Sopenharmony_ci} 522cb93a386Sopenharmony_ci 523cb93a386Sopenharmony_ciint SkOpAngle::debugSign() const { 524cb93a386Sopenharmony_ci SkASSERT(fStart->t() != fEnd->t()); 525cb93a386Sopenharmony_ci return fStart->t() < fEnd->t() ? -1 : 1; 526cb93a386Sopenharmony_ci} 527cb93a386Sopenharmony_ci 528cb93a386Sopenharmony_ciconst SkOpSpanBase* SkOpAngle::debugSpan(int id) const { 529cb93a386Sopenharmony_ci return this->segment()->debugSpan(id); 530cb93a386Sopenharmony_ci} 531cb93a386Sopenharmony_ci 532cb93a386Sopenharmony_civoid SkOpAngle::dump() const { 533cb93a386Sopenharmony_ci dumpOne(true); 534cb93a386Sopenharmony_ci SkDebugf("\n"); 535cb93a386Sopenharmony_ci} 536cb93a386Sopenharmony_ci 537cb93a386Sopenharmony_civoid SkOpAngle::dumpOne(bool functionHeader) const { 538cb93a386Sopenharmony_ci// fSegment->debugValidate(); 539cb93a386Sopenharmony_ci const SkOpSegment* segment = this->segment(); 540cb93a386Sopenharmony_ci const SkOpSpan& mSpan = *fStart->starter(fEnd); 541cb93a386Sopenharmony_ci if (functionHeader) { 542cb93a386Sopenharmony_ci SkDebugf("%s ", __FUNCTION__); 543cb93a386Sopenharmony_ci } 544cb93a386Sopenharmony_ci SkDebugf("[%d", segment->debugID()); 545cb93a386Sopenharmony_ci SkDebugf("/%d", debugID()); 546cb93a386Sopenharmony_ci SkDebugf("] next="); 547cb93a386Sopenharmony_ci if (fNext) { 548cb93a386Sopenharmony_ci SkDebugf("%d", fNext->fStart->segment()->debugID()); 549cb93a386Sopenharmony_ci SkDebugf("/%d", fNext->debugID()); 550cb93a386Sopenharmony_ci } else { 551cb93a386Sopenharmony_ci SkDebugf("?"); 552cb93a386Sopenharmony_ci } 553cb93a386Sopenharmony_ci SkDebugf(" sect=%d/%d ", fSectorStart, fSectorEnd); 554cb93a386Sopenharmony_ci SkDebugf(" s=%1.9g [%d] e=%1.9g [%d]", fStart->t(), fStart->debugID(), 555cb93a386Sopenharmony_ci fEnd->t(), fEnd->debugID()); 556cb93a386Sopenharmony_ci SkDebugf(" sgn=%d windVal=%d", this->debugSign(), mSpan.windValue()); 557cb93a386Sopenharmony_ci 558cb93a386Sopenharmony_ci SkDebugf(" windSum="); 559cb93a386Sopenharmony_ci SkPathOpsDebug::WindingPrintf(mSpan.windSum()); 560cb93a386Sopenharmony_ci if (mSpan.oppValue() != 0 || mSpan.oppSum() != SK_MinS32) { 561cb93a386Sopenharmony_ci SkDebugf(" oppVal=%d", mSpan.oppValue()); 562cb93a386Sopenharmony_ci SkDebugf(" oppSum="); 563cb93a386Sopenharmony_ci SkPathOpsDebug::WindingPrintf(mSpan.oppSum()); 564cb93a386Sopenharmony_ci } 565cb93a386Sopenharmony_ci if (mSpan.done()) { 566cb93a386Sopenharmony_ci SkDebugf(" done"); 567cb93a386Sopenharmony_ci } 568cb93a386Sopenharmony_ci if (unorderable()) { 569cb93a386Sopenharmony_ci SkDebugf(" unorderable"); 570cb93a386Sopenharmony_ci } 571cb93a386Sopenharmony_ci if (segment->operand()) { 572cb93a386Sopenharmony_ci SkDebugf(" operand"); 573cb93a386Sopenharmony_ci } 574cb93a386Sopenharmony_ci} 575cb93a386Sopenharmony_ci 576cb93a386Sopenharmony_civoid SkOpAngle::dumpTo(const SkOpSegment* segment, const SkOpAngle* to) const { 577cb93a386Sopenharmony_ci const SkOpAngle* first = this; 578cb93a386Sopenharmony_ci const SkOpAngle* next = this; 579cb93a386Sopenharmony_ci const char* indent = ""; 580cb93a386Sopenharmony_ci do { 581cb93a386Sopenharmony_ci SkDebugf("%s", indent); 582cb93a386Sopenharmony_ci next->dumpOne(false); 583cb93a386Sopenharmony_ci if (segment == next->fStart->segment()) { 584cb93a386Sopenharmony_ci if (this == fNext) { 585cb93a386Sopenharmony_ci SkDebugf(" << from"); 586cb93a386Sopenharmony_ci } 587cb93a386Sopenharmony_ci if (to == fNext) { 588cb93a386Sopenharmony_ci SkDebugf(" << to"); 589cb93a386Sopenharmony_ci } 590cb93a386Sopenharmony_ci } 591cb93a386Sopenharmony_ci SkDebugf("\n"); 592cb93a386Sopenharmony_ci indent = " "; 593cb93a386Sopenharmony_ci next = next->fNext; 594cb93a386Sopenharmony_ci } while (next && next != first); 595cb93a386Sopenharmony_ci} 596cb93a386Sopenharmony_ci 597cb93a386Sopenharmony_civoid SkOpAngle::dumpCurves() const { 598cb93a386Sopenharmony_ci const SkOpAngle* first = this; 599cb93a386Sopenharmony_ci const SkOpAngle* next = this; 600cb93a386Sopenharmony_ci do { 601cb93a386Sopenharmony_ci next->fPart.fCurve.dumpID(next->segment()->debugID()); 602cb93a386Sopenharmony_ci next = next->fNext; 603cb93a386Sopenharmony_ci } while (next && next != first); 604cb93a386Sopenharmony_ci} 605cb93a386Sopenharmony_ci 606cb93a386Sopenharmony_civoid SkOpAngle::dumpLoop() const { 607cb93a386Sopenharmony_ci const SkOpAngle* first = this; 608cb93a386Sopenharmony_ci const SkOpAngle* next = this; 609cb93a386Sopenharmony_ci do { 610cb93a386Sopenharmony_ci next->dumpOne(false); 611cb93a386Sopenharmony_ci SkDebugf("\n"); 612cb93a386Sopenharmony_ci next = next->fNext; 613cb93a386Sopenharmony_ci } while (next && next != first); 614cb93a386Sopenharmony_ci} 615cb93a386Sopenharmony_ci 616cb93a386Sopenharmony_civoid SkOpAngle::dumpTest() const { 617cb93a386Sopenharmony_ci const SkOpAngle* first = this; 618cb93a386Sopenharmony_ci const SkOpAngle* next = this; 619cb93a386Sopenharmony_ci do { 620cb93a386Sopenharmony_ci SkDebugf("{ "); 621cb93a386Sopenharmony_ci SkOpSegment* segment = next->segment(); 622cb93a386Sopenharmony_ci segment->dumpPts(); 623cb93a386Sopenharmony_ci SkDebugf(", %d, %1.9g, %1.9g, {} },\n", SkPathOpsVerbToPoints(segment->verb()) + 1, 624cb93a386Sopenharmony_ci next->start()->t(), next->end()->t()); 625cb93a386Sopenharmony_ci next = next->fNext; 626cb93a386Sopenharmony_ci } while (next && next != first); 627cb93a386Sopenharmony_ci} 628cb93a386Sopenharmony_ci 629cb93a386Sopenharmony_cibool SkOpPtT::debugMatchID(int id) const { 630cb93a386Sopenharmony_ci int limit = this->debugLoopLimit(false); 631cb93a386Sopenharmony_ci int loop = 0; 632cb93a386Sopenharmony_ci const SkOpPtT* ptT = this; 633cb93a386Sopenharmony_ci do { 634cb93a386Sopenharmony_ci if (ptT->debugID() == id) { 635cb93a386Sopenharmony_ci return true; 636cb93a386Sopenharmony_ci } 637cb93a386Sopenharmony_ci } while ((!limit || ++loop <= limit) && (ptT = ptT->next()) && ptT != this); 638cb93a386Sopenharmony_ci return false; 639cb93a386Sopenharmony_ci} 640cb93a386Sopenharmony_ci 641cb93a386Sopenharmony_ciconst SkOpAngle* SkOpPtT::debugAngle(int id) const { 642cb93a386Sopenharmony_ci return this->span()->debugAngle(id); 643cb93a386Sopenharmony_ci} 644cb93a386Sopenharmony_ci 645cb93a386Sopenharmony_ciSkOpContour* SkOpPtT::debugContour(int id) const { 646cb93a386Sopenharmony_ci return this->span()->debugContour(id); 647cb93a386Sopenharmony_ci} 648cb93a386Sopenharmony_ci 649cb93a386Sopenharmony_ciconst SkOpCoincidence* SkOpPtT::debugCoincidence() const { 650cb93a386Sopenharmony_ci return this->span()->debugCoincidence(); 651cb93a386Sopenharmony_ci} 652cb93a386Sopenharmony_ci 653cb93a386Sopenharmony_ciconst SkOpPtT* SkOpPtT::debugPtT(int id) const { 654cb93a386Sopenharmony_ci return this->span()->debugPtT(id); 655cb93a386Sopenharmony_ci} 656cb93a386Sopenharmony_ci 657cb93a386Sopenharmony_ciconst SkOpSegment* SkOpPtT::debugSegment(int id) const { 658cb93a386Sopenharmony_ci return this->span()->debugSegment(id); 659cb93a386Sopenharmony_ci} 660cb93a386Sopenharmony_ci 661cb93a386Sopenharmony_ciconst SkOpSpanBase* SkOpPtT::debugSpan(int id) const { 662cb93a386Sopenharmony_ci return this->span()->debugSpan(id); 663cb93a386Sopenharmony_ci} 664cb93a386Sopenharmony_ci 665cb93a386Sopenharmony_civoid SkOpPtT::dump() const { 666cb93a386Sopenharmony_ci SkDebugf("seg=%d span=%d ptT=%d", 667cb93a386Sopenharmony_ci this->segment()->debugID(), this->span()->debugID(), this->debugID()); 668cb93a386Sopenharmony_ci this->dumpBase(); 669cb93a386Sopenharmony_ci SkDebugf("\n"); 670cb93a386Sopenharmony_ci} 671cb93a386Sopenharmony_ci 672cb93a386Sopenharmony_civoid SkOpPtT::dumpAll() const { 673cb93a386Sopenharmony_ci contour()->indentDump(); 674cb93a386Sopenharmony_ci const SkOpPtT* next = this; 675cb93a386Sopenharmony_ci int limit = debugLoopLimit(true); 676cb93a386Sopenharmony_ci int loop = 0; 677cb93a386Sopenharmony_ci do { 678cb93a386Sopenharmony_ci SkDebugf("%.*s", contour()->debugIndent(), " "); 679cb93a386Sopenharmony_ci SkDebugf("seg=%d span=%d ptT=%d", 680cb93a386Sopenharmony_ci next->segment()->debugID(), next->span()->debugID(), next->debugID()); 681cb93a386Sopenharmony_ci next->dumpBase(); 682cb93a386Sopenharmony_ci SkDebugf("\n"); 683cb93a386Sopenharmony_ci if (limit && ++loop >= limit) { 684cb93a386Sopenharmony_ci SkDebugf("*** abort loop ***\n"); 685cb93a386Sopenharmony_ci break; 686cb93a386Sopenharmony_ci } 687cb93a386Sopenharmony_ci } while ((next = next->fNext) && next != this); 688cb93a386Sopenharmony_ci contour()->outdentDump(); 689cb93a386Sopenharmony_ci} 690cb93a386Sopenharmony_ci 691cb93a386Sopenharmony_civoid SkOpPtT::dumpBase() const { 692cb93a386Sopenharmony_ci SkDebugf(" t=%1.9g pt=(%1.9g,%1.9g)%s%s%s", this->fT, this->fPt.fX, this->fPt.fY, 693cb93a386Sopenharmony_ci this->fCoincident ? " coin" : "", 694cb93a386Sopenharmony_ci this->fDuplicatePt ? " dup" : "", this->fDeleted ? " deleted" : ""); 695cb93a386Sopenharmony_ci} 696cb93a386Sopenharmony_ci 697cb93a386Sopenharmony_ciconst SkOpAngle* SkOpSpanBase::debugAngle(int id) const { 698cb93a386Sopenharmony_ci return this->segment()->debugAngle(id); 699cb93a386Sopenharmony_ci} 700cb93a386Sopenharmony_ci 701cb93a386Sopenharmony_ciconst SkOpCoincidence* SkOpSpanBase::debugCoincidence() const { 702cb93a386Sopenharmony_ci return this->segment()->debugCoincidence(); 703cb93a386Sopenharmony_ci} 704cb93a386Sopenharmony_ci 705cb93a386Sopenharmony_ciSkOpContour* SkOpSpanBase::debugContour(int id) const { 706cb93a386Sopenharmony_ci return this->segment()->debugContour(id); 707cb93a386Sopenharmony_ci} 708cb93a386Sopenharmony_ci 709cb93a386Sopenharmony_ciconst SkOpPtT* SkOpSpanBase::debugPtT(int id) const { 710cb93a386Sopenharmony_ci return this->segment()->debugPtT(id); 711cb93a386Sopenharmony_ci} 712cb93a386Sopenharmony_ci 713cb93a386Sopenharmony_ciconst SkOpSegment* SkOpSpanBase::debugSegment(int id) const { 714cb93a386Sopenharmony_ci return this->segment()->debugSegment(id); 715cb93a386Sopenharmony_ci} 716cb93a386Sopenharmony_ci 717cb93a386Sopenharmony_ciconst SkOpSpanBase* SkOpSpanBase::debugSpan(int id) const { 718cb93a386Sopenharmony_ci return this->segment()->debugSpan(id); 719cb93a386Sopenharmony_ci} 720cb93a386Sopenharmony_ci 721cb93a386Sopenharmony_civoid SkOpSpanBase::dump() const { 722cb93a386Sopenharmony_ci this->dumpHead(); 723cb93a386Sopenharmony_ci this->fPtT.dump(); 724cb93a386Sopenharmony_ci} 725cb93a386Sopenharmony_ci 726cb93a386Sopenharmony_civoid SkOpSpanBase::dumpHead() const { 727cb93a386Sopenharmony_ci SkDebugf("%.*s", contour()->debugIndent(), " "); 728cb93a386Sopenharmony_ci SkDebugf("seg=%d span=%d", this->segment()->debugID(), this->debugID()); 729cb93a386Sopenharmony_ci this->dumpBase(); 730cb93a386Sopenharmony_ci SkDebugf("\n"); 731cb93a386Sopenharmony_ci} 732cb93a386Sopenharmony_ci 733cb93a386Sopenharmony_civoid SkOpSpanBase::dumpAll() const { 734cb93a386Sopenharmony_ci this->dumpHead(); 735cb93a386Sopenharmony_ci this->fPtT.dumpAll(); 736cb93a386Sopenharmony_ci} 737cb93a386Sopenharmony_ci 738cb93a386Sopenharmony_civoid SkOpSpanBase::dumpBase() const { 739cb93a386Sopenharmony_ci if (this->fAligned) { 740cb93a386Sopenharmony_ci SkDebugf(" aligned"); 741cb93a386Sopenharmony_ci } 742cb93a386Sopenharmony_ci if (this->fChased) { 743cb93a386Sopenharmony_ci SkDebugf(" chased"); 744cb93a386Sopenharmony_ci } 745cb93a386Sopenharmony_ci#ifdef SK_DEBUG 746cb93a386Sopenharmony_ci if (this->fDebugDeleted) { 747cb93a386Sopenharmony_ci SkDebugf(" deleted"); 748cb93a386Sopenharmony_ci } 749cb93a386Sopenharmony_ci#endif 750cb93a386Sopenharmony_ci if (!this->final()) { 751cb93a386Sopenharmony_ci this->upCast()->dumpSpan(); 752cb93a386Sopenharmony_ci } 753cb93a386Sopenharmony_ci const SkOpSpanBase* coin = this->coinEnd(); 754cb93a386Sopenharmony_ci if (this != coin) { 755cb93a386Sopenharmony_ci SkDebugf(" coinEnd seg/span=%d/%d", coin->segment()->debugID(), coin->debugID()); 756cb93a386Sopenharmony_ci } else if (this->final() || !this->upCast()->isCoincident()) { 757cb93a386Sopenharmony_ci const SkOpPtT* oPt = this->ptT()->next(); 758cb93a386Sopenharmony_ci SkDebugf(" seg/span=%d/%d", oPt->segment()->debugID(), oPt->span()->debugID()); 759cb93a386Sopenharmony_ci } 760cb93a386Sopenharmony_ci SkDebugf(" adds=%d", fSpanAdds); 761cb93a386Sopenharmony_ci} 762cb93a386Sopenharmony_ci 763cb93a386Sopenharmony_civoid SkOpSpanBase::dumpCoin() const { 764cb93a386Sopenharmony_ci const SkOpSpan* span = this->upCastable(); 765cb93a386Sopenharmony_ci if (!span) { 766cb93a386Sopenharmony_ci return; 767cb93a386Sopenharmony_ci } 768cb93a386Sopenharmony_ci if (!span->isCoincident()) { 769cb93a386Sopenharmony_ci return; 770cb93a386Sopenharmony_ci } 771cb93a386Sopenharmony_ci span->dumpCoin(); 772cb93a386Sopenharmony_ci} 773cb93a386Sopenharmony_ci 774cb93a386Sopenharmony_civoid SkOpSpan::dumpCoin() const { 775cb93a386Sopenharmony_ci const SkOpSpan* coincident = fCoincident; 776cb93a386Sopenharmony_ci bool ok = debugCoinLoopCheck(); 777cb93a386Sopenharmony_ci this->dump(); 778cb93a386Sopenharmony_ci int loop = 0; 779cb93a386Sopenharmony_ci do { 780cb93a386Sopenharmony_ci coincident->dump(); 781cb93a386Sopenharmony_ci if (!ok && ++loop > 10) { 782cb93a386Sopenharmony_ci SkDebugf("*** abort loop ***\n"); 783cb93a386Sopenharmony_ci break; 784cb93a386Sopenharmony_ci } 785cb93a386Sopenharmony_ci } while ((coincident = coincident->fCoincident) != this); 786cb93a386Sopenharmony_ci} 787cb93a386Sopenharmony_ci 788cb93a386Sopenharmony_cibool SkOpSpan::dumpSpan() const { 789cb93a386Sopenharmony_ci SkOpSpan* coin = fCoincident; 790cb93a386Sopenharmony_ci if (this != coin) { 791cb93a386Sopenharmony_ci SkDebugf(" coinStart seg/span=%d/%d", coin->segment()->debugID(), coin->debugID()); 792cb93a386Sopenharmony_ci } 793cb93a386Sopenharmony_ci SkDebugf(" windVal=%d", this->windValue()); 794cb93a386Sopenharmony_ci SkDebugf(" windSum="); 795cb93a386Sopenharmony_ci SkPathOpsDebug::WindingPrintf(this->windSum()); 796cb93a386Sopenharmony_ci if (this->oppValue() != 0 || this->oppSum() != SK_MinS32) { 797cb93a386Sopenharmony_ci SkDebugf(" oppVal=%d", this->oppValue()); 798cb93a386Sopenharmony_ci SkDebugf(" oppSum="); 799cb93a386Sopenharmony_ci SkPathOpsDebug::WindingPrintf(this->oppSum()); 800cb93a386Sopenharmony_ci } 801cb93a386Sopenharmony_ci if (this->done()) { 802cb93a386Sopenharmony_ci SkDebugf(" done"); 803cb93a386Sopenharmony_ci } 804cb93a386Sopenharmony_ci return this != coin; 805cb93a386Sopenharmony_ci} 806cb93a386Sopenharmony_ci 807cb93a386Sopenharmony_ciconst SkOpAngle* SkOpSegment::debugAngle(int id) const { 808cb93a386Sopenharmony_ci return this->contour()->debugAngle(id); 809cb93a386Sopenharmony_ci} 810cb93a386Sopenharmony_ci 811cb93a386Sopenharmony_ciconst SkOpCoincidence* SkOpSegment::debugCoincidence() const { 812cb93a386Sopenharmony_ci return this->contour()->debugCoincidence(); 813cb93a386Sopenharmony_ci} 814cb93a386Sopenharmony_ci 815cb93a386Sopenharmony_ciSkOpContour* SkOpSegment::debugContour(int id) const { 816cb93a386Sopenharmony_ci return this->contour()->debugContour(id); 817cb93a386Sopenharmony_ci} 818cb93a386Sopenharmony_ci 819cb93a386Sopenharmony_ciconst SkOpPtT* SkOpSegment::debugPtT(int id) const { 820cb93a386Sopenharmony_ci return this->contour()->debugPtT(id); 821cb93a386Sopenharmony_ci} 822cb93a386Sopenharmony_ci 823cb93a386Sopenharmony_ciconst SkOpSegment* SkOpSegment::debugSegment(int id) const { 824cb93a386Sopenharmony_ci return this->contour()->debugSegment(id); 825cb93a386Sopenharmony_ci} 826cb93a386Sopenharmony_ci 827cb93a386Sopenharmony_ciconst SkOpSpanBase* SkOpSegment::debugSpan(int id) const { 828cb93a386Sopenharmony_ci return this->contour()->debugSpan(id); 829cb93a386Sopenharmony_ci} 830cb93a386Sopenharmony_ci 831cb93a386Sopenharmony_civoid SkOpSegment::dump() const { 832cb93a386Sopenharmony_ci SkDebugf("%.*s", contour()->debugIndent(), " "); 833cb93a386Sopenharmony_ci this->dumpPts(); 834cb93a386Sopenharmony_ci const SkOpSpanBase* span = &fHead; 835cb93a386Sopenharmony_ci contour()->indentDump(); 836cb93a386Sopenharmony_ci do { 837cb93a386Sopenharmony_ci SkDebugf("%.*s span=%d ", contour()->debugIndent(), " ", span->debugID()); 838cb93a386Sopenharmony_ci span->ptT()->dumpBase(); 839cb93a386Sopenharmony_ci span->dumpBase(); 840cb93a386Sopenharmony_ci SkDebugf("\n"); 841cb93a386Sopenharmony_ci } while (!span->final() && (span = span->upCast()->next())); 842cb93a386Sopenharmony_ci contour()->outdentDump(); 843cb93a386Sopenharmony_ci} 844cb93a386Sopenharmony_ci 845cb93a386Sopenharmony_civoid SkOpSegment::dumpAll() const { 846cb93a386Sopenharmony_ci SkDebugf("%.*s", contour()->debugIndent(), " "); 847cb93a386Sopenharmony_ci this->dumpPts(); 848cb93a386Sopenharmony_ci const SkOpSpanBase* span = &fHead; 849cb93a386Sopenharmony_ci contour()->indentDump(); 850cb93a386Sopenharmony_ci do { 851cb93a386Sopenharmony_ci span->dumpAll(); 852cb93a386Sopenharmony_ci } while (!span->final() && (span = span->upCast()->next())); 853cb93a386Sopenharmony_ci contour()->outdentDump(); 854cb93a386Sopenharmony_ci} 855cb93a386Sopenharmony_ci 856cb93a386Sopenharmony_civoid SkOpSegment::dumpAngles() const { 857cb93a386Sopenharmony_ci SkDebugf("seg=%d\n", debugID()); 858cb93a386Sopenharmony_ci const SkOpSpanBase* span = &fHead; 859cb93a386Sopenharmony_ci do { 860cb93a386Sopenharmony_ci const SkOpAngle* fAngle = span->fromAngle(); 861cb93a386Sopenharmony_ci const SkOpAngle* tAngle = span->final() ? nullptr : span->upCast()->toAngle(); 862cb93a386Sopenharmony_ci if (fAngle) { 863cb93a386Sopenharmony_ci SkDebugf(" span=%d from=%d ", span->debugID(), fAngle->debugID()); 864cb93a386Sopenharmony_ci fAngle->dumpTo(this, tAngle); 865cb93a386Sopenharmony_ci } 866cb93a386Sopenharmony_ci if (tAngle) { 867cb93a386Sopenharmony_ci SkDebugf(" span=%d to=%d ", span->debugID(), tAngle->debugID()); 868cb93a386Sopenharmony_ci tAngle->dumpTo(this, fAngle); 869cb93a386Sopenharmony_ci } 870cb93a386Sopenharmony_ci } while (!span->final() && (span = span->upCast()->next())); 871cb93a386Sopenharmony_ci} 872cb93a386Sopenharmony_ci 873cb93a386Sopenharmony_civoid SkOpSegment::dumpCoin() const { 874cb93a386Sopenharmony_ci const SkOpSpan* span = &fHead; 875cb93a386Sopenharmony_ci do { 876cb93a386Sopenharmony_ci span->dumpCoin(); 877cb93a386Sopenharmony_ci } while ((span = span->next()->upCastable())); 878cb93a386Sopenharmony_ci} 879cb93a386Sopenharmony_ci 880cb93a386Sopenharmony_civoid SkOpSegment::dumpPtsInner(const char* prefix) const { 881cb93a386Sopenharmony_ci int last = SkPathOpsVerbToPoints(fVerb); 882cb93a386Sopenharmony_ci SkDebugf("%s=%d {{", prefix, this->debugID()); 883cb93a386Sopenharmony_ci if (fVerb == SkPath::kConic_Verb) { 884cb93a386Sopenharmony_ci SkDebugf("{"); 885cb93a386Sopenharmony_ci } 886cb93a386Sopenharmony_ci int index = 0; 887cb93a386Sopenharmony_ci do { 888cb93a386Sopenharmony_ci SkDPoint::Dump(fPts[index]); 889cb93a386Sopenharmony_ci SkDebugf(", "); 890cb93a386Sopenharmony_ci } while (++index < last); 891cb93a386Sopenharmony_ci SkDPoint::Dump(fPts[index]); 892cb93a386Sopenharmony_ci SkDebugf("}}"); 893cb93a386Sopenharmony_ci if (fVerb == SkPath::kConic_Verb) { 894cb93a386Sopenharmony_ci SkDebugf(", %1.9gf}", fWeight); 895cb93a386Sopenharmony_ci } 896cb93a386Sopenharmony_ci} 897cb93a386Sopenharmony_ci 898cb93a386Sopenharmony_civoid SkOpSegment::dumpPts(const char* prefix) const { 899cb93a386Sopenharmony_ci dumpPtsInner(prefix); 900cb93a386Sopenharmony_ci SkDebugf("\n"); 901cb93a386Sopenharmony_ci} 902cb93a386Sopenharmony_ci 903cb93a386Sopenharmony_civoid SkCoincidentSpans::dump() const { 904cb93a386Sopenharmony_ci SkDebugf("- seg=%d span=%d ptT=%d ", fCoinPtTStart->segment()->debugID(), 905cb93a386Sopenharmony_ci fCoinPtTStart->span()->debugID(), fCoinPtTStart->debugID()); 906cb93a386Sopenharmony_ci fCoinPtTStart->dumpBase(); 907cb93a386Sopenharmony_ci SkDebugf(" span=%d ptT=%d ", fCoinPtTEnd->span()->debugID(), fCoinPtTEnd->debugID()); 908cb93a386Sopenharmony_ci fCoinPtTEnd->dumpBase(); 909cb93a386Sopenharmony_ci if (fCoinPtTStart->segment()->operand()) { 910cb93a386Sopenharmony_ci SkDebugf(" operand"); 911cb93a386Sopenharmony_ci } 912cb93a386Sopenharmony_ci if (fCoinPtTStart->segment()->isXor()) { 913cb93a386Sopenharmony_ci SkDebugf(" xor"); 914cb93a386Sopenharmony_ci } 915cb93a386Sopenharmony_ci SkDebugf("\n"); 916cb93a386Sopenharmony_ci SkDebugf("+ seg=%d span=%d ptT=%d ", fOppPtTStart->segment()->debugID(), 917cb93a386Sopenharmony_ci fOppPtTStart->span()->debugID(), fOppPtTStart->debugID()); 918cb93a386Sopenharmony_ci fOppPtTStart->dumpBase(); 919cb93a386Sopenharmony_ci SkDebugf(" span=%d ptT=%d ", fOppPtTEnd->span()->debugID(), fOppPtTEnd->debugID()); 920cb93a386Sopenharmony_ci fOppPtTEnd->dumpBase(); 921cb93a386Sopenharmony_ci if (fOppPtTStart->segment()->operand()) { 922cb93a386Sopenharmony_ci SkDebugf(" operand"); 923cb93a386Sopenharmony_ci } 924cb93a386Sopenharmony_ci if (fOppPtTStart->segment()->isXor()) { 925cb93a386Sopenharmony_ci SkDebugf(" xor"); 926cb93a386Sopenharmony_ci } 927cb93a386Sopenharmony_ci SkDebugf("\n"); 928cb93a386Sopenharmony_ci} 929cb93a386Sopenharmony_ci 930cb93a386Sopenharmony_civoid SkOpCoincidence::dump() const { 931cb93a386Sopenharmony_ci SkCoincidentSpans* span = fHead; 932cb93a386Sopenharmony_ci while (span) { 933cb93a386Sopenharmony_ci span->dump(); 934cb93a386Sopenharmony_ci span = span->next(); 935cb93a386Sopenharmony_ci } 936cb93a386Sopenharmony_ci if (!fTop || fHead == fTop) { 937cb93a386Sopenharmony_ci return; 938cb93a386Sopenharmony_ci } 939cb93a386Sopenharmony_ci SkDebugf("top:\n"); 940cb93a386Sopenharmony_ci span = fTop; 941cb93a386Sopenharmony_ci int count = 0; 942cb93a386Sopenharmony_ci while (span) { 943cb93a386Sopenharmony_ci span->dump(); 944cb93a386Sopenharmony_ci span = span->next(); 945cb93a386Sopenharmony_ci SkCoincidentSpans* check = fTop; 946cb93a386Sopenharmony_ci ++count; 947cb93a386Sopenharmony_ci for (int index = 0; index < count; ++index) { 948cb93a386Sopenharmony_ci if (span == check) { 949cb93a386Sopenharmony_ci SkDebugf("(loops to #%d)\n", index); 950cb93a386Sopenharmony_ci return; 951cb93a386Sopenharmony_ci } 952cb93a386Sopenharmony_ci check = check->next(); 953cb93a386Sopenharmony_ci } 954cb93a386Sopenharmony_ci } 955cb93a386Sopenharmony_ci} 956cb93a386Sopenharmony_ci 957cb93a386Sopenharmony_civoid SkOpContour::dump() const { 958cb93a386Sopenharmony_ci SkDebugf("contour=%d count=%d op=%d xor=%d\n", this->debugID(), fCount, fOperand, fXor); 959cb93a386Sopenharmony_ci if (!fCount) { 960cb93a386Sopenharmony_ci return; 961cb93a386Sopenharmony_ci } 962cb93a386Sopenharmony_ci const SkOpSegment* segment = &fHead; 963cb93a386Sopenharmony_ci SkDEBUGCODE(fDebugIndent = 0); 964cb93a386Sopenharmony_ci this->indentDump(); 965cb93a386Sopenharmony_ci do { 966cb93a386Sopenharmony_ci segment->dump(); 967cb93a386Sopenharmony_ci } while ((segment = segment->next())); 968cb93a386Sopenharmony_ci this->outdentDump(); 969cb93a386Sopenharmony_ci} 970cb93a386Sopenharmony_ci 971cb93a386Sopenharmony_civoid SkOpContour::dumpAll() const { 972cb93a386Sopenharmony_ci SkDebugf("contour=%d count=%d op=%d xor=%d\n", this->debugID(), fCount, fOperand, fXor); 973cb93a386Sopenharmony_ci if (!fCount) { 974cb93a386Sopenharmony_ci return; 975cb93a386Sopenharmony_ci } 976cb93a386Sopenharmony_ci const SkOpSegment* segment = &fHead; 977cb93a386Sopenharmony_ci SkDEBUGCODE(fDebugIndent = 0); 978cb93a386Sopenharmony_ci this->indentDump(); 979cb93a386Sopenharmony_ci do { 980cb93a386Sopenharmony_ci segment->dumpAll(); 981cb93a386Sopenharmony_ci } while ((segment = segment->next())); 982cb93a386Sopenharmony_ci this->outdentDump(); 983cb93a386Sopenharmony_ci} 984cb93a386Sopenharmony_ci 985cb93a386Sopenharmony_ci 986cb93a386Sopenharmony_civoid SkOpContour::dumpAngles() const { 987cb93a386Sopenharmony_ci SkDebugf("contour=%d\n", this->debugID()); 988cb93a386Sopenharmony_ci const SkOpSegment* segment = &fHead; 989cb93a386Sopenharmony_ci do { 990cb93a386Sopenharmony_ci SkDebugf(" seg=%d ", segment->debugID()); 991cb93a386Sopenharmony_ci segment->dumpAngles(); 992cb93a386Sopenharmony_ci } while ((segment = segment->next())); 993cb93a386Sopenharmony_ci} 994cb93a386Sopenharmony_ci 995cb93a386Sopenharmony_civoid SkOpContour::dumpPt(int index) const { 996cb93a386Sopenharmony_ci const SkOpSegment* segment = &fHead; 997cb93a386Sopenharmony_ci do { 998cb93a386Sopenharmony_ci if (segment->debugID() == index) { 999cb93a386Sopenharmony_ci segment->dumpPts(); 1000cb93a386Sopenharmony_ci } 1001cb93a386Sopenharmony_ci } while ((segment = segment->next())); 1002cb93a386Sopenharmony_ci} 1003cb93a386Sopenharmony_ci 1004cb93a386Sopenharmony_civoid SkOpContour::dumpPts(const char* prefix) const { 1005cb93a386Sopenharmony_ci SkDebugf("contour=%d\n", this->debugID()); 1006cb93a386Sopenharmony_ci const SkOpSegment* segment = &fHead; 1007cb93a386Sopenharmony_ci do { 1008cb93a386Sopenharmony_ci SkDebugf(" %s=%d ", prefix, segment->debugID()); 1009cb93a386Sopenharmony_ci segment->dumpPts(prefix); 1010cb93a386Sopenharmony_ci } while ((segment = segment->next())); 1011cb93a386Sopenharmony_ci} 1012cb93a386Sopenharmony_ci 1013cb93a386Sopenharmony_civoid SkOpContour::dumpPtsX(const char* prefix) const { 1014cb93a386Sopenharmony_ci if (!this->fCount) { 1015cb93a386Sopenharmony_ci SkDebugf("<empty>\n"); 1016cb93a386Sopenharmony_ci return; 1017cb93a386Sopenharmony_ci } 1018cb93a386Sopenharmony_ci const SkOpSegment* segment = &fHead; 1019cb93a386Sopenharmony_ci do { 1020cb93a386Sopenharmony_ci segment->dumpPts(prefix); 1021cb93a386Sopenharmony_ci } while ((segment = segment->next())); 1022cb93a386Sopenharmony_ci} 1023cb93a386Sopenharmony_ci 1024cb93a386Sopenharmony_civoid SkOpContour::dumpSegment(int index) const { 1025cb93a386Sopenharmony_ci debugSegment(index)->dump(); 1026cb93a386Sopenharmony_ci} 1027cb93a386Sopenharmony_ci 1028cb93a386Sopenharmony_civoid SkOpContour::dumpSegments(const char* prefix, SkPathOp op) const { 1029cb93a386Sopenharmony_ci bool firstOp = false; 1030cb93a386Sopenharmony_ci const SkOpContour* c = this; 1031cb93a386Sopenharmony_ci do { 1032cb93a386Sopenharmony_ci if (!firstOp && c->operand()) { 1033cb93a386Sopenharmony_ci#if DEBUG_ACTIVE_OP 1034cb93a386Sopenharmony_ci SkDebugf("op %s\n", SkPathOpsDebug::kPathOpStr[op]); 1035cb93a386Sopenharmony_ci#endif 1036cb93a386Sopenharmony_ci firstOp = true; 1037cb93a386Sopenharmony_ci } 1038cb93a386Sopenharmony_ci c->dumpPtsX(prefix); 1039cb93a386Sopenharmony_ci } while ((c = c->next())); 1040cb93a386Sopenharmony_ci} 1041cb93a386Sopenharmony_ci 1042cb93a386Sopenharmony_civoid SkOpContour::dumpSpan(int index) const { 1043cb93a386Sopenharmony_ci debugSpan(index)->dump(); 1044cb93a386Sopenharmony_ci} 1045cb93a386Sopenharmony_ci 1046cb93a386Sopenharmony_civoid SkOpContour::dumpSpans() const { 1047cb93a386Sopenharmony_ci SkDebugf("contour=%d\n", this->debugID()); 1048cb93a386Sopenharmony_ci const SkOpSegment* segment = &fHead; 1049cb93a386Sopenharmony_ci do { 1050cb93a386Sopenharmony_ci SkDebugf(" seg=%d ", segment->debugID()); 1051cb93a386Sopenharmony_ci segment->dump(); 1052cb93a386Sopenharmony_ci } while ((segment = segment->next())); 1053cb93a386Sopenharmony_ci} 1054cb93a386Sopenharmony_ci 1055cb93a386Sopenharmony_civoid SkOpCurve::dump() const { 1056cb93a386Sopenharmony_ci int count = SkPathOpsVerbToPoints(SkDEBUGRELEASE(fVerb, SkPath::kCubic_Verb)); 1057cb93a386Sopenharmony_ci SkDebugf("{{"); 1058cb93a386Sopenharmony_ci int index; 1059cb93a386Sopenharmony_ci for (index = 0; index <= count - 1; ++index) { 1060cb93a386Sopenharmony_ci SkDebugf("{%1.9gf,%1.9gf}, ", fPts[index].fX, fPts[index].fY); 1061cb93a386Sopenharmony_ci } 1062cb93a386Sopenharmony_ci SkDebugf("{%1.9gf,%1.9gf}}}\n", fPts[index].fX, fPts[index].fY); 1063cb93a386Sopenharmony_ci} 1064cb93a386Sopenharmony_ci 1065cb93a386Sopenharmony_ci#ifdef SK_DEBUG 1066cb93a386Sopenharmony_ciconst SkOpAngle* SkOpGlobalState::debugAngle(int id) const { 1067cb93a386Sopenharmony_ci const SkOpContour* contour = fContourHead; 1068cb93a386Sopenharmony_ci do { 1069cb93a386Sopenharmony_ci const SkOpSegment* segment = contour->first(); 1070cb93a386Sopenharmony_ci while (segment) { 1071cb93a386Sopenharmony_ci const SkOpSpan* span = segment->head(); 1072cb93a386Sopenharmony_ci do { 1073cb93a386Sopenharmony_ci SkOpAngle* angle = span->fromAngle(); 1074cb93a386Sopenharmony_ci if (angle && angle->debugID() == id) { 1075cb93a386Sopenharmony_ci return angle; 1076cb93a386Sopenharmony_ci } 1077cb93a386Sopenharmony_ci angle = span->toAngle(); 1078cb93a386Sopenharmony_ci if (angle && angle->debugID() == id) { 1079cb93a386Sopenharmony_ci return angle; 1080cb93a386Sopenharmony_ci } 1081cb93a386Sopenharmony_ci } while ((span = span->next()->upCastable())); 1082cb93a386Sopenharmony_ci const SkOpSpanBase* tail = segment->tail(); 1083cb93a386Sopenharmony_ci SkOpAngle* angle = tail->fromAngle(); 1084cb93a386Sopenharmony_ci if (angle && angle->debugID() == id) { 1085cb93a386Sopenharmony_ci return angle; 1086cb93a386Sopenharmony_ci } 1087cb93a386Sopenharmony_ci segment = segment->next(); 1088cb93a386Sopenharmony_ci } 1089cb93a386Sopenharmony_ci } while ((contour = contour->next())); 1090cb93a386Sopenharmony_ci return nullptr; 1091cb93a386Sopenharmony_ci} 1092cb93a386Sopenharmony_ci 1093cb93a386Sopenharmony_ciSkOpContour* SkOpGlobalState::debugContour(int id) const { 1094cb93a386Sopenharmony_ci SkOpContour* contour = fContourHead; 1095cb93a386Sopenharmony_ci do { 1096cb93a386Sopenharmony_ci if (contour->debugID() == id) { 1097cb93a386Sopenharmony_ci return contour; 1098cb93a386Sopenharmony_ci } 1099cb93a386Sopenharmony_ci } while ((contour = contour->next())); 1100cb93a386Sopenharmony_ci return nullptr; 1101cb93a386Sopenharmony_ci} 1102cb93a386Sopenharmony_ci 1103cb93a386Sopenharmony_ciconst SkOpPtT* SkOpGlobalState::debugPtT(int id) const { 1104cb93a386Sopenharmony_ci const SkOpContour* contour = fContourHead; 1105cb93a386Sopenharmony_ci do { 1106cb93a386Sopenharmony_ci const SkOpSegment* segment = contour->first(); 1107cb93a386Sopenharmony_ci while (segment) { 1108cb93a386Sopenharmony_ci const SkOpSpan* span = segment->head(); 1109cb93a386Sopenharmony_ci do { 1110cb93a386Sopenharmony_ci const SkOpPtT* ptT = span->ptT(); 1111cb93a386Sopenharmony_ci if (ptT->debugMatchID(id)) { 1112cb93a386Sopenharmony_ci return ptT; 1113cb93a386Sopenharmony_ci } 1114cb93a386Sopenharmony_ci } while ((span = span->next()->upCastable())); 1115cb93a386Sopenharmony_ci const SkOpSpanBase* tail = segment->tail(); 1116cb93a386Sopenharmony_ci const SkOpPtT* ptT = tail->ptT(); 1117cb93a386Sopenharmony_ci if (ptT->debugMatchID(id)) { 1118cb93a386Sopenharmony_ci return ptT; 1119cb93a386Sopenharmony_ci } 1120cb93a386Sopenharmony_ci segment = segment->next(); 1121cb93a386Sopenharmony_ci } 1122cb93a386Sopenharmony_ci } while ((contour = contour->next())); 1123cb93a386Sopenharmony_ci return nullptr; 1124cb93a386Sopenharmony_ci} 1125cb93a386Sopenharmony_ci 1126cb93a386Sopenharmony_ciconst SkOpSegment* SkOpGlobalState::debugSegment(int id) const { 1127cb93a386Sopenharmony_ci const SkOpContour* contour = fContourHead; 1128cb93a386Sopenharmony_ci do { 1129cb93a386Sopenharmony_ci const SkOpSegment* segment = contour->first(); 1130cb93a386Sopenharmony_ci while (segment) { 1131cb93a386Sopenharmony_ci if (segment->debugID() == id) { 1132cb93a386Sopenharmony_ci return segment; 1133cb93a386Sopenharmony_ci } 1134cb93a386Sopenharmony_ci segment = segment->next(); 1135cb93a386Sopenharmony_ci } 1136cb93a386Sopenharmony_ci } while ((contour = contour->next())); 1137cb93a386Sopenharmony_ci return nullptr; 1138cb93a386Sopenharmony_ci} 1139cb93a386Sopenharmony_ci 1140cb93a386Sopenharmony_ciconst SkOpSpanBase* SkOpGlobalState::debugSpan(int id) const { 1141cb93a386Sopenharmony_ci const SkOpContour* contour = fContourHead; 1142cb93a386Sopenharmony_ci do { 1143cb93a386Sopenharmony_ci const SkOpSegment* segment = contour->first(); 1144cb93a386Sopenharmony_ci while (segment) { 1145cb93a386Sopenharmony_ci const SkOpSpan* span = segment->head(); 1146cb93a386Sopenharmony_ci do { 1147cb93a386Sopenharmony_ci if (span->debugID() == id) { 1148cb93a386Sopenharmony_ci return span; 1149cb93a386Sopenharmony_ci } 1150cb93a386Sopenharmony_ci } while ((span = span->next()->upCastable())); 1151cb93a386Sopenharmony_ci const SkOpSpanBase* tail = segment->tail(); 1152cb93a386Sopenharmony_ci if (tail->debugID() == id) { 1153cb93a386Sopenharmony_ci return tail; 1154cb93a386Sopenharmony_ci } 1155cb93a386Sopenharmony_ci segment = segment->next(); 1156cb93a386Sopenharmony_ci } 1157cb93a386Sopenharmony_ci } while ((contour = contour->next())); 1158cb93a386Sopenharmony_ci return nullptr; 1159cb93a386Sopenharmony_ci} 1160cb93a386Sopenharmony_ci#endif 1161cb93a386Sopenharmony_ci 1162cb93a386Sopenharmony_cichar SkTCoincident::dumpIsCoincidentStr() const { 1163cb93a386Sopenharmony_ci if (!!fMatch != fMatch) { 1164cb93a386Sopenharmony_ci return '?'; 1165cb93a386Sopenharmony_ci } 1166cb93a386Sopenharmony_ci return fMatch ? '*' : 0; 1167cb93a386Sopenharmony_ci} 1168cb93a386Sopenharmony_ci 1169cb93a386Sopenharmony_civoid SkTCoincident::dump() const { 1170cb93a386Sopenharmony_ci SkDebugf("t=%1.9g pt=(%1.9g,%1.9g)%s\n", fPerpT, fPerpPt.fX, fPerpPt.fY, 1171cb93a386Sopenharmony_ci fMatch ? " match" : ""); 1172cb93a386Sopenharmony_ci} 1173cb93a386Sopenharmony_ci 1174cb93a386Sopenharmony_ci#ifdef SK_DEBUG 1175cb93a386Sopenharmony_ci 1176cb93a386Sopenharmony_ciconst SkTSpan* SkTSect::debugSpan(int id) const { 1177cb93a386Sopenharmony_ci const SkTSpan* test = fHead; 1178cb93a386Sopenharmony_ci do { 1179cb93a386Sopenharmony_ci if (test->debugID() == id) { 1180cb93a386Sopenharmony_ci return test; 1181cb93a386Sopenharmony_ci } 1182cb93a386Sopenharmony_ci } while ((test = test->next())); 1183cb93a386Sopenharmony_ci return nullptr; 1184cb93a386Sopenharmony_ci} 1185cb93a386Sopenharmony_ci 1186cb93a386Sopenharmony_ciconst SkTSpan* SkTSect::debugT(double t) const { 1187cb93a386Sopenharmony_ci const SkTSpan* test = fHead; 1188cb93a386Sopenharmony_ci const SkTSpan* closest = nullptr; 1189cb93a386Sopenharmony_ci double bestDist = DBL_MAX; 1190cb93a386Sopenharmony_ci do { 1191cb93a386Sopenharmony_ci if (between(test->fStartT, t, test->fEndT)) { 1192cb93a386Sopenharmony_ci return test; 1193cb93a386Sopenharmony_ci } 1194cb93a386Sopenharmony_ci double testDist = std::min(fabs(test->fStartT - t), fabs(test->fEndT - t)); 1195cb93a386Sopenharmony_ci if (bestDist > testDist) { 1196cb93a386Sopenharmony_ci bestDist = testDist; 1197cb93a386Sopenharmony_ci closest = test; 1198cb93a386Sopenharmony_ci } 1199cb93a386Sopenharmony_ci } while ((test = test->next())); 1200cb93a386Sopenharmony_ci SkASSERT(closest); 1201cb93a386Sopenharmony_ci return closest; 1202cb93a386Sopenharmony_ci} 1203cb93a386Sopenharmony_ci 1204cb93a386Sopenharmony_ci#endif 1205cb93a386Sopenharmony_ci 1206cb93a386Sopenharmony_civoid SkTSect::dump() const { 1207cb93a386Sopenharmony_ci dumpCommon(fHead); 1208cb93a386Sopenharmony_ci} 1209cb93a386Sopenharmony_ci 1210cb93a386Sopenharmony_ciextern int gDumpTSectNum; 1211cb93a386Sopenharmony_ci 1212cb93a386Sopenharmony_civoid SkTSect::dumpBoth(SkTSect* opp) const { 1213cb93a386Sopenharmony_ci#if DEBUG_T_SECT_DUMP <= 2 1214cb93a386Sopenharmony_ci#if DEBUG_T_SECT_DUMP == 2 1215cb93a386Sopenharmony_ci SkDebugf("%d ", ++gDumpTSectNum); 1216cb93a386Sopenharmony_ci#endif 1217cb93a386Sopenharmony_ci this->dump(); 1218cb93a386Sopenharmony_ci SkDebugf("\n"); 1219cb93a386Sopenharmony_ci opp->dump(); 1220cb93a386Sopenharmony_ci SkDebugf("\n"); 1221cb93a386Sopenharmony_ci#elif DEBUG_T_SECT_DUMP == 3 1222cb93a386Sopenharmony_ci SkDebugf("<div id=\"sect%d\">\n", ++gDumpTSectNum); 1223cb93a386Sopenharmony_ci if (this->fHead) { 1224cb93a386Sopenharmony_ci this->dumpCurves(); 1225cb93a386Sopenharmony_ci } 1226cb93a386Sopenharmony_ci if (opp->fHead) { 1227cb93a386Sopenharmony_ci opp->dumpCurves(); 1228cb93a386Sopenharmony_ci } 1229cb93a386Sopenharmony_ci SkDebugf("</div>\n\n"); 1230cb93a386Sopenharmony_ci#endif 1231cb93a386Sopenharmony_ci} 1232cb93a386Sopenharmony_ci 1233cb93a386Sopenharmony_civoid SkTSect::dumpBounded(int id) const { 1234cb93a386Sopenharmony_ci#ifdef SK_DEBUG 1235cb93a386Sopenharmony_ci const SkTSpan* bounded = debugSpan(id); 1236cb93a386Sopenharmony_ci if (!bounded) { 1237cb93a386Sopenharmony_ci SkDebugf("no span matches %d\n", id); 1238cb93a386Sopenharmony_ci return; 1239cb93a386Sopenharmony_ci } 1240cb93a386Sopenharmony_ci const SkTSpan* test = bounded->debugOpp()->fHead; 1241cb93a386Sopenharmony_ci do { 1242cb93a386Sopenharmony_ci if (test->findOppSpan(bounded)) { 1243cb93a386Sopenharmony_ci test->dump(); 1244cb93a386Sopenharmony_ci SkDebugf(" "); 1245cb93a386Sopenharmony_ci } 1246cb93a386Sopenharmony_ci } while ((test = test->next())); 1247cb93a386Sopenharmony_ci SkDebugf("\n"); 1248cb93a386Sopenharmony_ci#endif 1249cb93a386Sopenharmony_ci} 1250cb93a386Sopenharmony_ci 1251cb93a386Sopenharmony_civoid SkTSect::dumpBounds() const { 1252cb93a386Sopenharmony_ci const SkTSpan* test = fHead; 1253cb93a386Sopenharmony_ci do { 1254cb93a386Sopenharmony_ci test->dumpBounds(); 1255cb93a386Sopenharmony_ci } while ((test = test->next())); 1256cb93a386Sopenharmony_ci} 1257cb93a386Sopenharmony_ci 1258cb93a386Sopenharmony_civoid SkTSect::dumpCoin() const { 1259cb93a386Sopenharmony_ci dumpCommon(fCoincident); 1260cb93a386Sopenharmony_ci} 1261cb93a386Sopenharmony_ci 1262cb93a386Sopenharmony_civoid SkTSect::dumpCoinCurves() const { 1263cb93a386Sopenharmony_ci dumpCommonCurves(fCoincident); 1264cb93a386Sopenharmony_ci} 1265cb93a386Sopenharmony_ci 1266cb93a386Sopenharmony_civoid SkTSect::dumpCommon(const SkTSpan* test) const { 1267cb93a386Sopenharmony_ci SkDebugf("id=%d", debugID()); 1268cb93a386Sopenharmony_ci if (!test) { 1269cb93a386Sopenharmony_ci SkDebugf(" (empty)"); 1270cb93a386Sopenharmony_ci return; 1271cb93a386Sopenharmony_ci } 1272cb93a386Sopenharmony_ci do { 1273cb93a386Sopenharmony_ci SkDebugf(" "); 1274cb93a386Sopenharmony_ci test->dump(); 1275cb93a386Sopenharmony_ci } while ((test = test->next())); 1276cb93a386Sopenharmony_ci} 1277cb93a386Sopenharmony_ci 1278cb93a386Sopenharmony_civoid SkTSect::dumpCommonCurves(const SkTSpan* test) const { 1279cb93a386Sopenharmony_ci#if DEBUG_T_SECT 1280cb93a386Sopenharmony_ci do { 1281cb93a386Sopenharmony_ci test->fPart->dumpID(test->debugID()); 1282cb93a386Sopenharmony_ci } while ((test = test->next())); 1283cb93a386Sopenharmony_ci#endif 1284cb93a386Sopenharmony_ci} 1285cb93a386Sopenharmony_ci 1286cb93a386Sopenharmony_civoid SkTSect::dumpCurves() const { 1287cb93a386Sopenharmony_ci dumpCommonCurves(fHead); 1288cb93a386Sopenharmony_ci} 1289cb93a386Sopenharmony_ci 1290cb93a386Sopenharmony_ci#ifdef SK_DEBUG 1291cb93a386Sopenharmony_ci 1292cb93a386Sopenharmony_ciconst SkTSpan* SkTSpan::debugSpan(int id) const { 1293cb93a386Sopenharmony_ci return fDebugSect->debugSpan(id); 1294cb93a386Sopenharmony_ci} 1295cb93a386Sopenharmony_ci 1296cb93a386Sopenharmony_ciconst SkTSpan* SkTSpan::debugT(double t) const { 1297cb93a386Sopenharmony_ci return fDebugSect->debugT(t); 1298cb93a386Sopenharmony_ci} 1299cb93a386Sopenharmony_ci 1300cb93a386Sopenharmony_ci#endif 1301cb93a386Sopenharmony_ci 1302cb93a386Sopenharmony_civoid SkTSpan::dumpAll() const { 1303cb93a386Sopenharmony_ci dumpID(); 1304cb93a386Sopenharmony_ci SkDebugf("=(%g,%g) [", fStartT, fEndT); 1305cb93a386Sopenharmony_ci const SkTSpanBounded* testBounded = fBounded; 1306cb93a386Sopenharmony_ci while (testBounded) { 1307cb93a386Sopenharmony_ci const SkTSpan* span = testBounded->fBounded; 1308cb93a386Sopenharmony_ci const SkTSpanBounded* next = testBounded->fNext; 1309cb93a386Sopenharmony_ci span->dumpID(); 1310cb93a386Sopenharmony_ci SkDebugf("=(%g,%g)", span->fStartT, span->fEndT); 1311cb93a386Sopenharmony_ci if (next) { 1312cb93a386Sopenharmony_ci SkDebugf(" "); 1313cb93a386Sopenharmony_ci } 1314cb93a386Sopenharmony_ci testBounded = next; 1315cb93a386Sopenharmony_ci } 1316cb93a386Sopenharmony_ci SkDebugf("]\n"); 1317cb93a386Sopenharmony_ci} 1318cb93a386Sopenharmony_ci 1319cb93a386Sopenharmony_civoid SkTSpan::dump() const { 1320cb93a386Sopenharmony_ci dumpID(); 1321cb93a386Sopenharmony_ci SkDebugf("=(%g,%g) [", fStartT, fEndT); 1322cb93a386Sopenharmony_ci const SkTSpanBounded* testBounded = fBounded; 1323cb93a386Sopenharmony_ci while (testBounded) { 1324cb93a386Sopenharmony_ci const SkTSpan* span = testBounded->fBounded; 1325cb93a386Sopenharmony_ci const SkTSpanBounded* next = testBounded->fNext; 1326cb93a386Sopenharmony_ci span->dumpID(); 1327cb93a386Sopenharmony_ci if (next) { 1328cb93a386Sopenharmony_ci SkDebugf(","); 1329cb93a386Sopenharmony_ci } 1330cb93a386Sopenharmony_ci testBounded = next; 1331cb93a386Sopenharmony_ci } 1332cb93a386Sopenharmony_ci SkDebugf("]"); 1333cb93a386Sopenharmony_ci} 1334cb93a386Sopenharmony_ci 1335cb93a386Sopenharmony_civoid SkTSpan::dumpBounded(int id) const { 1336cb93a386Sopenharmony_ci SkDEBUGCODE(fDebugSect->dumpBounded(id)); 1337cb93a386Sopenharmony_ci} 1338cb93a386Sopenharmony_ci 1339cb93a386Sopenharmony_civoid SkTSpan::dumpBounds() const { 1340cb93a386Sopenharmony_ci dumpID(); 1341cb93a386Sopenharmony_ci SkDebugf(" bounds=(%1.9g,%1.9g, %1.9g,%1.9g) boundsMax=%1.9g%s\n", 1342cb93a386Sopenharmony_ci fBounds.fLeft, fBounds.fTop, fBounds.fRight, fBounds.fBottom, fBoundsMax, 1343cb93a386Sopenharmony_ci fCollapsed ? " collapsed" : ""); 1344cb93a386Sopenharmony_ci} 1345cb93a386Sopenharmony_ci 1346cb93a386Sopenharmony_civoid SkTSpan::dumpCoin() const { 1347cb93a386Sopenharmony_ci dumpID(); 1348cb93a386Sopenharmony_ci SkDebugf(" coinStart "); 1349cb93a386Sopenharmony_ci fCoinStart.dump(); 1350cb93a386Sopenharmony_ci SkDebugf(" coinEnd "); 1351cb93a386Sopenharmony_ci fCoinEnd.dump(); 1352cb93a386Sopenharmony_ci} 1353cb93a386Sopenharmony_ci 1354cb93a386Sopenharmony_civoid SkTSpan::dumpID() const { 1355cb93a386Sopenharmony_ci char cS = fCoinStart.dumpIsCoincidentStr(); 1356cb93a386Sopenharmony_ci if (cS) { 1357cb93a386Sopenharmony_ci SkDebugf("%c", cS); 1358cb93a386Sopenharmony_ci } 1359cb93a386Sopenharmony_ci SkDebugf("%d", debugID()); 1360cb93a386Sopenharmony_ci char cE = fCoinEnd.dumpIsCoincidentStr(); 1361cb93a386Sopenharmony_ci if (cE) { 1362cb93a386Sopenharmony_ci SkDebugf("%c", cE); 1363cb93a386Sopenharmony_ci } 1364cb93a386Sopenharmony_ci} 1365cb93a386Sopenharmony_ci 1366cb93a386Sopenharmony_ci#if DEBUG_T_SECT_DUMP > 1 1367cb93a386Sopenharmony_ciint gDumpTSectNum; 1368cb93a386Sopenharmony_ci#endif 1369cb93a386Sopenharmony_ci 1370cb93a386Sopenharmony_ci// global path dumps for msvs Visual Studio 17 to use from Immediate Window 1371cb93a386Sopenharmony_civoid Dump(const SkOpContour& contour) { 1372cb93a386Sopenharmony_ci contour.dump(); 1373cb93a386Sopenharmony_ci} 1374cb93a386Sopenharmony_ci 1375cb93a386Sopenharmony_civoid DumpAll(const SkOpContour& contour) { 1376cb93a386Sopenharmony_ci contour.dumpAll(); 1377cb93a386Sopenharmony_ci} 1378cb93a386Sopenharmony_ci 1379cb93a386Sopenharmony_civoid DumpAngles(const SkOpContour& contour) { 1380cb93a386Sopenharmony_ci contour.dumpAngles(); 1381cb93a386Sopenharmony_ci} 1382cb93a386Sopenharmony_ci 1383cb93a386Sopenharmony_civoid DumpContours(const SkOpContour& contour) { 1384cb93a386Sopenharmony_ci contour.dumpContours(); 1385cb93a386Sopenharmony_ci} 1386cb93a386Sopenharmony_ci 1387cb93a386Sopenharmony_civoid DumpContoursAll(const SkOpContour& contour) { 1388cb93a386Sopenharmony_ci contour.dumpContoursAll(); 1389cb93a386Sopenharmony_ci} 1390cb93a386Sopenharmony_ci 1391cb93a386Sopenharmony_civoid DumpContoursAngles(const SkOpContour& contour) { 1392cb93a386Sopenharmony_ci contour.dumpContoursAngles(); 1393cb93a386Sopenharmony_ci} 1394cb93a386Sopenharmony_ci 1395cb93a386Sopenharmony_civoid DumpContoursPts(const SkOpContour& contour) { 1396cb93a386Sopenharmony_ci contour.dumpContoursPts(); 1397cb93a386Sopenharmony_ci} 1398cb93a386Sopenharmony_ci 1399cb93a386Sopenharmony_civoid DumpContoursPt(const SkOpContour& contour, int segmentID) { 1400cb93a386Sopenharmony_ci contour.dumpContoursPt(segmentID); 1401cb93a386Sopenharmony_ci} 1402cb93a386Sopenharmony_ci 1403cb93a386Sopenharmony_civoid DumpContoursSegment(const SkOpContour& contour, int segmentID) { 1404cb93a386Sopenharmony_ci contour.dumpContoursSegment(segmentID); 1405cb93a386Sopenharmony_ci} 1406cb93a386Sopenharmony_ci 1407cb93a386Sopenharmony_civoid DumpContoursSpan(const SkOpContour& contour, int segmentID) { 1408cb93a386Sopenharmony_ci contour.dumpContoursSpan(segmentID); 1409cb93a386Sopenharmony_ci} 1410cb93a386Sopenharmony_ci 1411cb93a386Sopenharmony_civoid DumpContoursSpans(const SkOpContour& contour) { 1412cb93a386Sopenharmony_ci contour.dumpContoursSpans(); 1413cb93a386Sopenharmony_ci} 1414cb93a386Sopenharmony_ci 1415cb93a386Sopenharmony_civoid DumpPt(const SkOpContour& contour, int pt) { 1416cb93a386Sopenharmony_ci contour.dumpPt(pt); 1417cb93a386Sopenharmony_ci} 1418cb93a386Sopenharmony_ci 1419cb93a386Sopenharmony_civoid DumpPts(const SkOpContour& contour, const char* prefix) { 1420cb93a386Sopenharmony_ci contour.dumpPts(prefix); 1421cb93a386Sopenharmony_ci} 1422cb93a386Sopenharmony_ci 1423cb93a386Sopenharmony_civoid DumpSegment(const SkOpContour& contour, int seg) { 1424cb93a386Sopenharmony_ci contour.dumpSegment(seg); 1425cb93a386Sopenharmony_ci} 1426cb93a386Sopenharmony_ci 1427cb93a386Sopenharmony_civoid DumpSegments(const SkOpContour& contour, const char* prefix, SkPathOp op) { 1428cb93a386Sopenharmony_ci contour.dumpSegments(prefix, op); 1429cb93a386Sopenharmony_ci} 1430cb93a386Sopenharmony_ci 1431cb93a386Sopenharmony_civoid DumpSpan(const SkOpContour& contour, int span) { 1432cb93a386Sopenharmony_ci contour.dumpSpan(span); 1433cb93a386Sopenharmony_ci} 1434cb93a386Sopenharmony_ci 1435cb93a386Sopenharmony_civoid DumpSpans(const SkOpContour& contour ) { 1436cb93a386Sopenharmony_ci contour.dumpSpans(); 1437cb93a386Sopenharmony_ci} 1438cb93a386Sopenharmony_ci 1439cb93a386Sopenharmony_civoid Dump(const SkOpSegment& segment) { 1440cb93a386Sopenharmony_ci segment.dump(); 1441cb93a386Sopenharmony_ci} 1442cb93a386Sopenharmony_ci 1443cb93a386Sopenharmony_civoid DumpAll(const SkOpSegment& segment) { 1444cb93a386Sopenharmony_ci segment.dumpAll(); 1445cb93a386Sopenharmony_ci} 1446cb93a386Sopenharmony_ci 1447cb93a386Sopenharmony_civoid DumpAngles(const SkOpSegment& segment) { 1448cb93a386Sopenharmony_ci segment.dumpAngles(); 1449cb93a386Sopenharmony_ci} 1450cb93a386Sopenharmony_ci 1451cb93a386Sopenharmony_civoid DumpCoin(const SkOpSegment& segment) { 1452cb93a386Sopenharmony_ci segment.dumpCoin(); 1453cb93a386Sopenharmony_ci} 1454cb93a386Sopenharmony_ci 1455cb93a386Sopenharmony_civoid DumpPts(const SkOpSegment& segment, const char* prefix) { 1456cb93a386Sopenharmony_ci segment.dumpPts(prefix); 1457cb93a386Sopenharmony_ci} 1458cb93a386Sopenharmony_ci 1459cb93a386Sopenharmony_civoid Dump(const SkOpPtT& ptT) { 1460cb93a386Sopenharmony_ci ptT.dump(); 1461cb93a386Sopenharmony_ci} 1462cb93a386Sopenharmony_ci 1463cb93a386Sopenharmony_civoid DumpAll(const SkOpPtT& ptT) { 1464cb93a386Sopenharmony_ci ptT.dumpAll(); 1465cb93a386Sopenharmony_ci} 1466cb93a386Sopenharmony_ci 1467cb93a386Sopenharmony_civoid Dump(const SkOpSpanBase& spanBase) { 1468cb93a386Sopenharmony_ci spanBase.dump(); 1469cb93a386Sopenharmony_ci} 1470cb93a386Sopenharmony_ci 1471cb93a386Sopenharmony_civoid DumpCoin(const SkOpSpanBase& spanBase) { 1472cb93a386Sopenharmony_ci spanBase.dumpCoin(); 1473cb93a386Sopenharmony_ci} 1474cb93a386Sopenharmony_ci 1475cb93a386Sopenharmony_civoid DumpAll(const SkOpSpanBase& spanBase) { 1476cb93a386Sopenharmony_ci spanBase.dumpAll(); 1477cb93a386Sopenharmony_ci} 1478cb93a386Sopenharmony_ci 1479cb93a386Sopenharmony_civoid DumpCoin(const SkOpSpan& span) { 1480cb93a386Sopenharmony_ci span.dumpCoin(); 1481cb93a386Sopenharmony_ci} 1482cb93a386Sopenharmony_ci 1483cb93a386Sopenharmony_cibool DumpSpan(const SkOpSpan& span) { 1484cb93a386Sopenharmony_ci return span.dumpSpan(); 1485cb93a386Sopenharmony_ci} 1486cb93a386Sopenharmony_ci 1487cb93a386Sopenharmony_civoid Dump(const SkDConic& conic) { 1488cb93a386Sopenharmony_ci conic.dump(); 1489cb93a386Sopenharmony_ci} 1490cb93a386Sopenharmony_ci 1491cb93a386Sopenharmony_civoid DumpID(const SkDConic& conic, int id) { 1492cb93a386Sopenharmony_ci conic.dumpID(id); 1493cb93a386Sopenharmony_ci} 1494cb93a386Sopenharmony_ci 1495cb93a386Sopenharmony_civoid Dump(const SkDCubic& cubic) { 1496cb93a386Sopenharmony_ci cubic.dump(); 1497cb93a386Sopenharmony_ci} 1498cb93a386Sopenharmony_ci 1499cb93a386Sopenharmony_civoid DumpID(const SkDCubic& cubic, int id) { 1500cb93a386Sopenharmony_ci cubic.dumpID(id); 1501cb93a386Sopenharmony_ci} 1502cb93a386Sopenharmony_ci 1503cb93a386Sopenharmony_civoid Dump(const SkDLine& line) { 1504cb93a386Sopenharmony_ci line.dump(); 1505cb93a386Sopenharmony_ci} 1506cb93a386Sopenharmony_ci 1507cb93a386Sopenharmony_civoid DumpID(const SkDLine& line, int id) { 1508cb93a386Sopenharmony_ci line.dumpID(id); 1509cb93a386Sopenharmony_ci} 1510cb93a386Sopenharmony_ci 1511cb93a386Sopenharmony_civoid Dump(const SkDQuad& quad) { 1512cb93a386Sopenharmony_ci quad.dump(); 1513cb93a386Sopenharmony_ci} 1514cb93a386Sopenharmony_ci 1515cb93a386Sopenharmony_civoid DumpID(const SkDQuad& quad, int id) { 1516cb93a386Sopenharmony_ci quad.dumpID(id); 1517cb93a386Sopenharmony_ci} 1518cb93a386Sopenharmony_ci 1519cb93a386Sopenharmony_civoid Dump(const SkDPoint& point) { 1520cb93a386Sopenharmony_ci point.dump(); 1521cb93a386Sopenharmony_ci} 1522cb93a386Sopenharmony_ci 1523cb93a386Sopenharmony_civoid Dump(const SkOpAngle& angle) { 1524cb93a386Sopenharmony_ci angle.dump(); 1525cb93a386Sopenharmony_ci} 1526