| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "PathOpsTSectDebug.h" | 8 #include "PathOpsTSectDebug.h" |
| 9 #include "SkOpCoincidence.h" | 9 #include "SkOpCoincidence.h" |
| 10 #include "SkOpContour.h" | 10 #include "SkOpContour.h" |
| 11 #include "SkIntersectionHelper.h" | 11 #include "SkIntersectionHelper.h" |
| 12 #include "SkMutex.h" |
| 12 #include "SkOpSegment.h" | 13 #include "SkOpSegment.h" |
| 13 #include "SkString.h" | 14 #include "SkString.h" |
| 14 | 15 |
| 15 inline void DebugDumpDouble(double x) { | 16 inline void DebugDumpDouble(double x) { |
| 16 if (x == floor(x)) { | 17 if (x == floor(x)) { |
| 17 SkDebugf("%.0f", x); | 18 SkDebugf("%.0f", x); |
| 18 } else { | 19 } else { |
| 19 SkDebugf("%1.19g", x); | 20 SkDebugf("%1.19g", x); |
| 20 } | 21 } |
| 21 } | 22 } |
| 22 | 23 |
| 23 inline void DebugDumpFloat(float x) { | 24 inline void DebugDumpFloat(float x) { |
| 24 if (x == floorf(x)) { | 25 if (x == floorf(x)) { |
| 25 SkDebugf("%.0f", x); | 26 SkDebugf("%.0f", x); |
| 26 } else { | 27 } else { |
| 27 SkDebugf("%1.9gf", x); | 28 SkDebugf("%1.9gf", x); |
| 28 } | 29 } |
| 29 } | 30 } |
| 30 | 31 |
| 31 inline void DebugDumpHexFloat(float x) { | 32 inline void DebugDumpHexFloat(float x) { |
| 32 SkDebugf("SkBits2Float(0x%08x)", SkFloat2Bits(x)); | 33 SkDebugf("SkBits2Float(0x%08x)", SkFloat2Bits(x)); |
| 33 } | 34 } |
| 34 | 35 |
| 35 #if DEBUG_SHOW_TEST_NAME | |
| 36 | |
| 37 static void output_scalar(SkScalar num) { | |
| 38 if (num == (int) num) { | |
| 39 SkDebugf("%d", (int) num); | |
| 40 } else { | |
| 41 SkString str; | |
| 42 str.printf("%1.9g", num); | |
| 43 int width = (int) str.size(); | |
| 44 const char* cStr = str.c_str(); | |
| 45 while (cStr[width - 1] == '0') { | |
| 46 --width; | |
| 47 } | |
| 48 str.resize(width); | |
| 49 SkDebugf("%sf", str.c_str()); | |
| 50 } | |
| 51 } | |
| 52 | |
| 53 static void output_points(const SkPoint* pts, int count) { | |
| 54 for (int index = 0; index < count; ++index) { | |
| 55 output_scalar(pts[index].fX); | |
| 56 SkDebugf(", "); | |
| 57 output_scalar(pts[index].fY); | |
| 58 if (index + 1 < count) { | |
| 59 SkDebugf(", "); | |
| 60 } | |
| 61 } | |
| 62 } | |
| 63 | |
| 64 static void showPathContours(SkPath::RawIter& iter, const char* pathName) { | |
| 65 uint8_t verb; | |
| 66 SkPoint pts[4]; | |
| 67 while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { | |
| 68 switch (verb) { | |
| 69 case SkPath::kMove_Verb: | |
| 70 SkDebugf(" %s.moveTo(", pathName); | |
| 71 output_points(&pts[0], 1); | |
| 72 SkDebugf(");\n"); | |
| 73 continue; | |
| 74 case SkPath::kLine_Verb: | |
| 75 SkDebugf(" %s.lineTo(", pathName); | |
| 76 output_points(&pts[1], 1); | |
| 77 SkDebugf(");\n"); | |
| 78 break; | |
| 79 case SkPath::kQuad_Verb: | |
| 80 SkDebugf(" %s.quadTo(", pathName); | |
| 81 output_points(&pts[1], 2); | |
| 82 SkDebugf(");\n"); | |
| 83 break; | |
| 84 case SkPath::kConic_Verb: | |
| 85 SkDebugf(" %s.conicTo(", pathName); | |
| 86 output_points(&pts[1], 2); | |
| 87 SkDebugf(", %1.9gf);\n", iter.conicWeight()); | |
| 88 break; | |
| 89 case SkPath::kCubic_Verb: | |
| 90 SkDebugf(" %s.cubicTo(", pathName); | |
| 91 output_points(&pts[1], 3); | |
| 92 SkDebugf(");\n"); | |
| 93 break; | |
| 94 case SkPath::kClose_Verb: | |
| 95 SkDebugf(" %s.close();\n", pathName); | |
| 96 break; | |
| 97 default: | |
| 98 SkDEBUGFAIL("bad verb"); | |
| 99 return; | |
| 100 } | |
| 101 } | |
| 102 } | |
| 103 | |
| 104 static const char* gFillTypeStr[] = { | |
| 105 "kWinding_FillType", | |
| 106 "kEvenOdd_FillType", | |
| 107 "kInverseWinding_FillType", | |
| 108 "kInverseEvenOdd_FillType" | |
| 109 }; | |
| 110 | |
| 111 void SkPathOpsDebug::ShowOnePath(const SkPath& path, const char* name, bool incl
udeDeclaration) { | |
| 112 SkPath::RawIter iter(path); | |
| 113 #define SUPPORT_RECT_CONTOUR_DETECTION 0 | |
| 114 #if SUPPORT_RECT_CONTOUR_DETECTION | |
| 115 int rectCount = path.isRectContours() ? path.rectContours(NULL, NULL) : 0; | |
| 116 if (rectCount > 0) { | |
| 117 SkTDArray<SkRect> rects; | |
| 118 SkTDArray<SkPath::Direction> directions; | |
| 119 rects.setCount(rectCount); | |
| 120 directions.setCount(rectCount); | |
| 121 path.rectContours(rects.begin(), directions.begin()); | |
| 122 for (int contour = 0; contour < rectCount; ++contour) { | |
| 123 const SkRect& rect = rects[contour]; | |
| 124 SkDebugf("path.addRect(%1.9g, %1.9g, %1.9g, %1.9g, %s);\n", rect.fLe
ft, rect.fTop, | |
| 125 rect.fRight, rect.fBottom, directions[contour] == SkPath::kC
CW_Direction | |
| 126 ? "SkPath::kCCW_Direction" : "SkPath::kCW_Direction"); | |
| 127 } | |
| 128 return; | |
| 129 } | |
| 130 #endif | |
| 131 SkPath::FillType fillType = path.getFillType(); | |
| 132 SkASSERT(fillType >= SkPath::kWinding_FillType && fillType <= SkPath::kInver
seEvenOdd_FillType); | |
| 133 if (includeDeclaration) { | |
| 134 SkDebugf(" SkPath %s;\n", name); | |
| 135 } | |
| 136 SkDebugf(" %s.setFillType(SkPath::%s);\n", name, gFillTypeStr[fillType]); | |
| 137 iter.setPath(path); | |
| 138 showPathContours(iter, name); | |
| 139 } | |
| 140 | |
| 141 static void show_function_header(const char* functionName) { | |
| 142 SkDebugf("\nstatic void %s(skiatest::Reporter* reporter, const char* filenam
e) {\n", functionName); | |
| 143 if (strcmp("skphealth_com76", functionName) == 0) { | |
| 144 SkDebugf("found it\n"); | |
| 145 } | |
| 146 } | |
| 147 | |
| 148 static const char* gOpStrs[] = { | |
| 149 "kDifference_SkPathOp", | |
| 150 "kIntersect_SkPathOp", | |
| 151 "kUnion_SkPathOp", | |
| 152 "kXor_PathOp", | |
| 153 "kReverseDifference_SkPathOp", | |
| 154 }; | |
| 155 | |
| 156 static void show_op(SkPathOp op, const char* pathOne, const char* pathTwo) { | |
| 157 SkDebugf(" testPathOp(reporter, %s, %s, %s, filename);\n", pathOne, pathT
wo, gOpStrs[op]); | |
| 158 SkDebugf("}\n"); | |
| 159 } | |
| 160 | |
| 161 SK_DECLARE_STATIC_MUTEX(gTestMutex); | |
| 162 | |
| 163 void SkPathOpsDebug::ShowPath(const SkPath& a, const SkPath& b, SkPathOp shapeOp
, | |
| 164 const char* testName) { | |
| 165 SkAutoMutexAcquire ac(gTestMutex); | |
| 166 show_function_header(testName); | |
| 167 ShowOnePath(a, "path", true); | |
| 168 ShowOnePath(b, "pathB", true); | |
| 169 show_op(shapeOp, "path", "pathB"); | |
| 170 } | |
| 171 #endif | |
| 172 | |
| 173 // if not defined by PathOpsDebug.cpp ... | 36 // if not defined by PathOpsDebug.cpp ... |
| 174 #if !defined SK_DEBUG && FORCE_RELEASE | 37 #if !defined SK_DEBUG && FORCE_RELEASE |
| 175 bool SkPathOpsDebug::ValidWind(int wind) { | 38 bool SkPathOpsDebug::ValidWind(int wind) { |
| 176 return wind > SK_MinS32 + 0xFFFF && wind < SK_MaxS32 - 0xFFFF; | 39 return wind > SK_MinS32 + 0xFFFF && wind < SK_MaxS32 - 0xFFFF; |
| 177 } | 40 } |
| 178 | 41 |
| 179 void SkPathOpsDebug::WindingPrintf(int wind) { | 42 void SkPathOpsDebug::WindingPrintf(int wind) { |
| 180 if (wind == SK_MinS32) { | 43 if (wind == SK_MinS32) { |
| 181 SkDebugf("?"); | 44 SkDebugf("?"); |
| 182 } else { | 45 } else { |
| 183 SkDebugf("%d", wind); | 46 SkDebugf("%d", wind); |
| 184 } | 47 } |
| 185 } | 48 } |
| 186 #endif | 49 #endif |
| 187 | 50 |
| 51 void SkDConic::dump() const { |
| 52 dumpInner(); |
| 53 SkDebugf("},\n"); |
| 54 } |
| 55 |
| 56 void SkDConic::dumpID(int id) const { |
| 57 dumpInner(); |
| 58 SkDebugf("} id=%d\n", id); |
| 59 } |
| 60 |
| 61 void SkDConic::dumpInner() const { |
| 62 SkDebugf("{{"); |
| 63 int index = 0; |
| 64 do { |
| 65 fPts[index].dump(); |
| 66 SkDebugf(", "); |
| 67 } while (++index < 2); |
| 68 fPts[index].dump(); |
| 69 SkDebugf("}, %1.9g", fWeight); |
| 70 } |
| 71 |
| 188 void SkDCubic::dump() const { | 72 void SkDCubic::dump() const { |
| 189 dumpInner(); | 73 this->dumpInner(); |
| 190 SkDebugf("}},\n"); | 74 SkDebugf("}},\n"); |
| 191 } | 75 } |
| 192 | 76 |
| 193 void SkDCubic::dumpID(int id) const { | 77 void SkDCubic::dumpID(int id) const { |
| 194 dumpInner(); | 78 this->dumpInner(); |
| 195 SkDebugf("}} id=%d\n", id); | 79 SkDebugf("}} id=%d\n", id); |
| 196 } | 80 } |
| 197 | 81 |
| 198 static inline bool double_is_NaN(double x) { return x != x; } | 82 static inline bool double_is_NaN(double x) { return x != x; } |
| 199 | 83 |
| 200 void SkDCubic::dumpInner() const { | 84 void SkDCubic::dumpInner() const { |
| 201 SkDebugf("{{"); | 85 SkDebugf("{{"); |
| 202 int index = 0; | 86 int index = 0; |
| 203 do { | 87 do { |
| 204 if (index != 0) { | 88 if (index != 0) { |
| 205 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY))
{ | 89 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY))
{ |
| 206 return; | 90 return; |
| 207 } | 91 } |
| 208 SkDebugf(", "); | 92 SkDebugf(", "); |
| 209 } | 93 } |
| 210 fPts[index].dump(); | 94 fPts[index].dump(); |
| 211 } while (++index < 3); | 95 } while (++index < 3); |
| 212 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY)) { | 96 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY)) { |
| 213 return; | 97 return; |
| 214 } | 98 } |
| 215 SkDebugf(", "); | 99 SkDebugf(", "); |
| 216 fPts[index].dump(); | 100 fPts[index].dump(); |
| 217 } | 101 } |
| 218 | 102 |
| 103 void SkDCurve::dumpID(int id) const { |
| 104 #ifndef SK_RELEASE |
| 105 switch(fVerb) { |
| 106 case SkPath::kLine_Verb: |
| 107 fLine.dumpID(id); |
| 108 break; |
| 109 case SkPath::kQuad_Verb: |
| 110 fQuad.dumpID(id); |
| 111 break; |
| 112 case SkPath::kConic_Verb: |
| 113 fConic.dumpID(id); |
| 114 break; |
| 115 case SkPath::kCubic_Verb: |
| 116 fCubic.dumpID(id); |
| 117 break; |
| 118 default: |
| 119 SkASSERT(0); |
| 120 } |
| 121 #else |
| 122 fCubic.dumpID(id); |
| 123 #endif |
| 124 } |
| 125 |
| 219 void SkDLine::dump() const { | 126 void SkDLine::dump() const { |
| 127 this->dumpInner(); |
| 128 SkDebugf("}},\n"); |
| 129 } |
| 130 |
| 131 void SkDLine::dumpID(int id) const { |
| 132 this->dumpInner(); |
| 133 SkDebugf("}} id=%d\n", id); |
| 134 } |
| 135 |
| 136 void SkDLine::dumpInner() const { |
| 220 SkDebugf("{{"); | 137 SkDebugf("{{"); |
| 221 fPts[0].dump(); | 138 fPts[0].dump(); |
| 222 SkDebugf(", "); | 139 SkDebugf(", "); |
| 223 fPts[1].dump(); | 140 fPts[1].dump(); |
| 224 SkDebugf("}},\n"); | |
| 225 } | 141 } |
| 226 | 142 |
| 227 void SkDPoint::dump() const { | 143 void SkDPoint::dump() const { |
| 228 SkDebugf("{"); | 144 SkDebugf("{"); |
| 229 DebugDumpDouble(fX); | 145 DebugDumpDouble(fX); |
| 230 SkDebugf(", "); | 146 SkDebugf(", "); |
| 231 DebugDumpDouble(fY); | 147 DebugDumpDouble(fY); |
| 232 SkDebugf("}"); | 148 SkDebugf("}"); |
| 233 } | 149 } |
| 234 | 150 |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 } | 347 } |
| 432 } | 348 } |
| 433 | 349 |
| 434 void SkPathOpsDebug::DumpContoursSpans(const SkTDArray<SkOpContour* >* contours)
{ | 350 void SkPathOpsDebug::DumpContoursSpans(const SkTDArray<SkOpContour* >* contours)
{ |
| 435 int count = contours->count(); | 351 int count = contours->count(); |
| 436 for (int index = 0; index < count; ++index) { | 352 for (int index = 0; index < count; ++index) { |
| 437 (*contours)[index]->dumpSpans(); | 353 (*contours)[index]->dumpSpans(); |
| 438 } | 354 } |
| 439 } | 355 } |
| 440 | 356 |
| 441 const SkTSpan<SkDCubic>* DebugSpan(const SkTSect<SkDCubic>* sect, int id) { | 357 template <typename TCurve, typename OppCurve> |
| 358 const SkTSpan<TCurve, OppCurve>* DebugSpan(const SkTSect<TCurve, OppCurve>* sect
, int id) { |
| 442 return sect->debugSpan(id); | 359 return sect->debugSpan(id); |
| 443 } | 360 } |
| 444 | 361 |
| 445 const SkTSpan<SkDQuad>* DebugSpan(const SkTSect<SkDQuad>* sect, int id) { | 362 void DontCallDebugSpan(int id); |
| 446 return sect->debugSpan(id); | 363 void DontCallDebugSpan(int id) { // exists to instantiate the templates |
| 447 } | 364 SkDQuad quad; |
| 448 | 365 SkDConic conic; |
| 449 const SkTSpan<SkDCubic>* DebugT(const SkTSect<SkDCubic>* sect, double t) { | 366 SkDCubic cubic; |
| 367 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 368 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 369 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 370 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 371 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 372 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 373 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 374 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 375 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 376 DebugSpan(&q1q2, id); |
| 377 DebugSpan(&q1k2, id); |
| 378 DebugSpan(&q1c2, id); |
| 379 DebugSpan(&k1q2, id); |
| 380 DebugSpan(&k1k2, id); |
| 381 DebugSpan(&k1c2, id); |
| 382 DebugSpan(&c1q2, id); |
| 383 DebugSpan(&c1k2, id); |
| 384 DebugSpan(&c1c2, id); |
| 385 } |
| 386 |
| 387 template <typename TCurve, typename OppCurve> |
| 388 const SkTSpan<TCurve, OppCurve>* DebugT(const SkTSect<TCurve, OppCurve>* sect, d
ouble t) { |
| 450 return sect->debugT(t); | 389 return sect->debugT(t); |
| 451 } | 390 } |
| 452 | 391 |
| 453 const SkTSpan<SkDQuad>* DebugT(const SkTSect<SkDQuad>* sect, double t) { | 392 void DontCallDebugT(double t); |
| 454 return sect->debugT(t); | 393 void DontCallDebugT(double t) { // exists to instantiate the templates |
| 455 } | 394 SkDQuad quad; |
| 456 | 395 SkDConic conic; |
| 457 const SkTSpan<SkDCubic>* DebugSpan(const SkTSpan<SkDCubic>* span, int id) { | 396 SkDCubic cubic; |
| 458 return span->debugSpan(id); | 397 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 459 } | 398 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 460 | 399 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 461 const SkTSpan<SkDQuad>* DebugSpan(const SkTSpan<SkDQuad>* span, int id) { | 400 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 462 return span->debugSpan(id); | 401 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 463 } | 402 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 464 | 403 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 465 const SkTSpan<SkDCubic>* DebugT(const SkTSpan<SkDCubic>* span, double t) { | 404 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 466 return span->debugT(t); | 405 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 467 } | 406 DebugT(&q1q2, t); |
| 468 | 407 DebugT(&q1k2, t); |
| 469 const SkTSpan<SkDQuad>* DebugT(const SkTSpan<SkDQuad>* span, double t) { | 408 DebugT(&q1c2, t); |
| 470 return span->debugT(t); | 409 DebugT(&k1q2, t); |
| 471 } | 410 DebugT(&k1k2, t); |
| 472 | 411 DebugT(&k1c2, t); |
| 473 void Dump(const SkTSect<SkDCubic>* sect) { | 412 DebugT(&c1q2, t); |
| 413 DebugT(&c1k2, t); |
| 414 DebugT(&c1c2, t); |
| 415 } |
| 416 |
| 417 template <typename TCurve, typename OppCurve> |
| 418 void Dump(const SkTSect<TCurve, OppCurve>* sect) { |
| 474 sect->dump(); | 419 sect->dump(); |
| 475 } | 420 } |
| 476 | 421 |
| 477 void Dump(const SkTSect<SkDQuad>* sect) { | 422 void DontCallDumpTSect(); |
| 478 sect->dump(); | 423 void DontCallDumpTSect() { // exists to instantiate the templates |
| 479 } | 424 SkDQuad quad; |
| 480 | 425 SkDConic conic; |
| 481 void Dump(const SkTSpan<SkDCubic>* span) { | 426 SkDCubic cubic; |
| 427 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 428 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 429 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 430 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 431 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 432 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 433 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 434 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 435 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 436 Dump(&q1q2); |
| 437 Dump(&q1k2); |
| 438 Dump(&q1c2); |
| 439 Dump(&k1q2); |
| 440 Dump(&k1k2); |
| 441 Dump(&k1c2); |
| 442 Dump(&c1q2); |
| 443 Dump(&c1k2); |
| 444 Dump(&c1c2); |
| 445 } |
| 446 |
| 447 template <typename TCurve, typename OppCurve> |
| 448 void DumpBoth(SkTSect<TCurve, OppCurve>* sect1, SkTSect<OppCurve, TCurve>* sect2
) { |
| 449 sect1->dumpBoth(sect2); |
| 450 } |
| 451 |
| 452 void DontCallDumpBoth(); |
| 453 void DontCallDumpBoth() { // exists to instantiate the templates |
| 454 SkDQuad quad; |
| 455 SkDConic conic; |
| 456 SkDCubic cubic; |
| 457 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 458 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 459 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 460 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 461 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 462 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 463 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 464 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 465 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 466 DumpBoth(&q1q2, &q1q2); |
| 467 DumpBoth(&q1k2, &k1q2); |
| 468 DumpBoth(&q1c2, &c1q2); |
| 469 DumpBoth(&k1q2, &q1k2); |
| 470 DumpBoth(&k1k2, &k1k2); |
| 471 DumpBoth(&k1c2, &c1k2); |
| 472 DumpBoth(&c1q2, &q1c2); |
| 473 DumpBoth(&c1k2, &k1c2); |
| 474 DumpBoth(&c1c2, &c1c2); |
| 475 } |
| 476 |
| 477 template <typename TCurve, typename OppCurve> |
| 478 void DumpBounded(SkTSect<TCurve, OppCurve>* sect1, int id) { |
| 479 sect1->dumpBounded(id); |
| 480 } |
| 481 |
| 482 void DontCallDumpBounded(); |
| 483 void DontCallDumpBounded() { |
| 484 SkDQuad quad; |
| 485 SkDConic conic; |
| 486 SkDCubic cubic; |
| 487 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 488 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 489 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 490 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 491 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 492 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 493 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 494 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 495 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 496 DumpBounded(&q1q2, 0); |
| 497 DumpBounded(&q1k2, 0); |
| 498 DumpBounded(&q1c2, 0); |
| 499 DumpBounded(&k1q2, 0); |
| 500 DumpBounded(&k1k2, 0); |
| 501 DumpBounded(&k1c2, 0); |
| 502 DumpBounded(&c1q2, 0); |
| 503 DumpBounded(&c1k2, 0); |
| 504 DumpBounded(&c1c2, 0); |
| 505 } |
| 506 |
| 507 template <typename TCurve, typename OppCurve> |
| 508 void DumpBounds(SkTSect<TCurve, OppCurve>* sect1) { |
| 509 sect1->dumpBounds(); |
| 510 } |
| 511 |
| 512 void DontCallDumpBounds(); |
| 513 void DontCallDumpBounds() { |
| 514 SkDQuad quad; |
| 515 SkDConic conic; |
| 516 SkDCubic cubic; |
| 517 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 518 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 519 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 520 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 521 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 522 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 523 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 524 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 525 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 526 DumpBounds(&q1q2); |
| 527 DumpBounds(&q1k2); |
| 528 DumpBounds(&q1c2); |
| 529 DumpBounds(&k1q2); |
| 530 DumpBounds(&k1k2); |
| 531 DumpBounds(&k1c2); |
| 532 DumpBounds(&c1q2); |
| 533 DumpBounds(&c1k2); |
| 534 DumpBounds(&c1c2); |
| 535 } |
| 536 |
| 537 template <typename TCurve, typename OppCurve> |
| 538 void DumpCoin(SkTSect<TCurve, OppCurve>* sect1) { |
| 539 sect1->dumpCoin(); |
| 540 } |
| 541 |
| 542 void DontCallDumpCoin(); |
| 543 void DontCallDumpCoin() { // exists to instantiate the templates |
| 544 SkDQuad quad; |
| 545 SkDConic conic; |
| 546 SkDCubic cubic; |
| 547 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 548 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 549 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 550 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 551 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 552 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 553 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 554 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 555 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 556 DumpCoin(&q1q2); |
| 557 DumpCoin(&q1k2); |
| 558 DumpCoin(&q1c2); |
| 559 DumpCoin(&k1q2); |
| 560 DumpCoin(&k1k2); |
| 561 DumpCoin(&k1c2); |
| 562 DumpCoin(&c1q2); |
| 563 DumpCoin(&c1k2); |
| 564 DumpCoin(&c1c2); |
| 565 } |
| 566 |
| 567 template <typename TCurve, typename OppCurve> |
| 568 void DumpCoinCurves(SkTSect<TCurve, OppCurve>* sect1) { |
| 569 sect1->dumpCoinCurves(); |
| 570 } |
| 571 |
| 572 void DontCallDumpCoinCurves(); |
| 573 void DontCallDumpCoinCurves() { // exists to instantiate the templates |
| 574 SkDQuad quad; |
| 575 SkDConic conic; |
| 576 SkDCubic cubic; |
| 577 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 578 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 579 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 580 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 581 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 582 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 583 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 584 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 585 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 586 DumpCoinCurves(&q1q2); |
| 587 DumpCoinCurves(&q1k2); |
| 588 DumpCoinCurves(&q1c2); |
| 589 DumpCoinCurves(&k1q2); |
| 590 DumpCoinCurves(&k1k2); |
| 591 DumpCoinCurves(&k1c2); |
| 592 DumpCoinCurves(&c1q2); |
| 593 DumpCoinCurves(&c1k2); |
| 594 DumpCoinCurves(&c1c2); |
| 595 } |
| 596 |
| 597 template <typename TCurve, typename OppCurve> |
| 598 void DumpCurves(const SkTSect<TCurve, OppCurve>* sect) { |
| 599 sect->dumpCurves(); |
| 600 } |
| 601 |
| 602 void DontCallDumpCurves(); |
| 603 void DontCallDumpCurves() { // exists to instantiate the templates |
| 604 SkDQuad quad; |
| 605 SkDConic conic; |
| 606 SkDCubic cubic; |
| 607 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 608 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 609 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 610 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 611 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 612 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 613 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 614 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 615 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 616 DumpCurves(&q1q2); |
| 617 DumpCurves(&q1k2); |
| 618 DumpCurves(&q1c2); |
| 619 DumpCurves(&k1q2); |
| 620 DumpCurves(&k1k2); |
| 621 DumpCurves(&k1c2); |
| 622 DumpCurves(&c1q2); |
| 623 DumpCurves(&c1k2); |
| 624 DumpCurves(&c1c2); |
| 625 } |
| 626 |
| 627 template <typename TCurve, typename OppCurve> |
| 628 void Dump(const SkTSpan<TCurve, OppCurve>* span) { |
| 482 span->dump(); | 629 span->dump(); |
| 483 } | 630 } |
| 484 | 631 |
| 485 void Dump(const SkTSpan<SkDQuad>* span) { | 632 void DontCallDumpTSpan(); |
| 486 span->dump(); | 633 void DontCallDumpTSpan() { // exists to instantiate the templates |
| 487 } | 634 SkTSpan<SkDQuad, SkDQuad> q1q2; q1q2.debugInit(); |
| 488 | 635 SkTSpan<SkDQuad, SkDConic> q1k2; q1k2.debugInit(); |
| 489 void DumpBoth(SkTSect<SkDCubic>* sect1, SkTSect<SkDCubic>* sect2) { | 636 SkTSpan<SkDQuad, SkDCubic> q1c2; q1c2.debugInit(); |
| 490 sect1->dumpBoth(sect2); | 637 SkTSpan<SkDConic, SkDQuad> k1q2; k1q2.debugInit(); |
| 491 } | 638 SkTSpan<SkDConic, SkDConic> k1k2; k1k2.debugInit(); |
| 492 | 639 SkTSpan<SkDConic, SkDCubic> k1c2; k1c2.debugInit(); |
| 493 void DumpBoth(SkTSect<SkDQuad>* sect1, SkTSect<SkDQuad>* sect2) { | 640 SkTSpan<SkDCubic, SkDQuad> c1q2; c1q2.debugInit(); |
| 494 sect1->dumpBoth(sect2); | 641 SkTSpan<SkDCubic, SkDConic> c1k2; c1k2.debugInit(); |
| 495 } | 642 SkTSpan<SkDCubic, SkDCubic> c1c2; c1c2.debugInit(); |
| 496 | 643 Dump(&q1q2); |
| 497 void DumpCoin(SkTSect<SkDCubic>* sect1) { | 644 Dump(&q1k2); |
| 498 sect1->dumpCoin(); | 645 Dump(&q1c2); |
| 499 } | 646 Dump(&k1q2); |
| 500 | 647 Dump(&k1k2); |
| 501 void DumpCoin(SkTSect<SkDQuad>* sect1) { | 648 Dump(&k1c2); |
| 502 sect1->dumpCoin(); | 649 Dump(&c1q2); |
| 503 } | 650 Dump(&c1k2); |
| 504 | 651 Dump(&c1c2); |
| 505 void DumpCoinCurves(SkTSect<SkDCubic>* sect1) { | 652 } |
| 506 sect1->dumpCoinCurves(); | 653 |
| 507 } | 654 template <typename TCurve, typename OppCurve> |
| 508 | 655 void DumpCoin(const SkTSpan<TCurve, OppCurve>* span) { |
| 509 void DumpCoinCurves(SkTSect<SkDQuad>* sect1) { | 656 span->dumpCoin(); |
| 510 sect1->dumpCoinCurves(); | 657 } |
| 511 } | 658 |
| 512 | 659 void DontCallDumpSpanCoin(); |
| 513 void DumpCurves(const SkTSect<SkDQuad>* sect) { | 660 void DontCallDumpSpanCoin() { // exists to instantiate the templates |
| 514 sect->dumpCurves(); | 661 SkTSpan<SkDQuad, SkDQuad> q1q2; q1q2.debugInit(); |
| 515 } | 662 SkTSpan<SkDQuad, SkDConic> q1k2; q1k2.debugInit(); |
| 516 | 663 SkTSpan<SkDQuad, SkDCubic> q1c2; q1c2.debugInit(); |
| 517 void DumpCurves(const SkTSect<SkDCubic>* sect) { | 664 SkTSpan<SkDConic, SkDQuad> k1q2; k1q2.debugInit(); |
| 518 sect->dumpCurves(); | 665 SkTSpan<SkDConic, SkDConic> k1k2; k1k2.debugInit(); |
| 666 SkTSpan<SkDConic, SkDCubic> k1c2; k1c2.debugInit(); |
| 667 SkTSpan<SkDCubic, SkDQuad> c1q2; c1q2.debugInit(); |
| 668 SkTSpan<SkDCubic, SkDConic> c1k2; c1k2.debugInit(); |
| 669 SkTSpan<SkDCubic, SkDCubic> c1c2; c1c2.debugInit(); |
| 670 DumpCoin(&q1q2); |
| 671 DumpCoin(&q1k2); |
| 672 DumpCoin(&q1c2); |
| 673 DumpCoin(&k1q2); |
| 674 DumpCoin(&k1k2); |
| 675 DumpCoin(&k1c2); |
| 676 DumpCoin(&c1q2); |
| 677 DumpCoin(&c1k2); |
| 678 DumpCoin(&c1c2); |
| 519 } | 679 } |
| 520 | 680 |
| 521 static void dumpTestCase(const SkDQuad& quad1, const SkDQuad& quad2, int testNo)
{ | 681 static void dumpTestCase(const SkDQuad& quad1, const SkDQuad& quad2, int testNo)
{ |
| 522 SkDebugf("\n<div id=\"quad%d\">\n", testNo); | 682 SkDebugf("\n<div id=\"quad%d\">\n", testNo); |
| 523 quad1.dumpInner(); | 683 quad1.dumpInner(); |
| 524 SkDebugf("}}, "); | 684 SkDebugf("}}, "); |
| 525 quad2.dump(); | 685 quad2.dump(); |
| 526 SkDebugf("</div>\n\n"); | 686 SkDebugf("</div>\n\n"); |
| 527 } | 687 } |
| 528 | 688 |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 896 void SkOpSegment::dumpCoin() const { | 1056 void SkOpSegment::dumpCoin() const { |
| 897 const SkOpSpan* span = &fHead; | 1057 const SkOpSpan* span = &fHead; |
| 898 do { | 1058 do { |
| 899 span->dumpCoin(); | 1059 span->dumpCoin(); |
| 900 } while ((span = span->next()->upCastable())); | 1060 } while ((span = span->next()->upCastable())); |
| 901 } | 1061 } |
| 902 | 1062 |
| 903 void SkOpSegment::dumpPts() const { | 1063 void SkOpSegment::dumpPts() const { |
| 904 int last = SkPathOpsVerbToPoints(fVerb); | 1064 int last = SkPathOpsVerbToPoints(fVerb); |
| 905 SkDebugf("seg=%d {{", this->debugID()); | 1065 SkDebugf("seg=%d {{", this->debugID()); |
| 1066 if (fVerb == SkPath::kConic_Verb) { |
| 1067 SkDebugf("{"); |
| 1068 } |
| 906 int index = 0; | 1069 int index = 0; |
| 907 do { | 1070 do { |
| 908 SkDPoint::Dump(fPts[index]); | 1071 SkDPoint::Dump(fPts[index]); |
| 909 SkDebugf(", "); | 1072 SkDebugf(", "); |
| 910 } while (++index < last); | 1073 } while (++index < last); |
| 911 SkDPoint::Dump(fPts[index]); | 1074 SkDPoint::Dump(fPts[index]); |
| 912 SkDebugf("}}\n"); | 1075 SkDebugf("}}"); |
| 1076 if (fVerb == SkPath::kConic_Verb) { |
| 1077 SkDebugf(", %1.9gf}", fWeight); |
| 1078 } |
| 1079 SkDebugf("\n"); |
| 913 } | 1080 } |
| 914 | 1081 |
| 915 void SkCoincidentSpans::dump() const { | 1082 void SkCoincidentSpans::dump() const { |
| 916 SkDebugf("- seg=%d span=%d ptT=%d ", fCoinPtTStart->segment()->debugID(), | 1083 SkDebugf("- seg=%d span=%d ptT=%d ", fCoinPtTStart->segment()->debugID(), |
| 917 fCoinPtTStart->span()->debugID(), fCoinPtTStart->debugID()); | 1084 fCoinPtTStart->span()->debugID(), fCoinPtTStart->debugID()); |
| 918 fCoinPtTStart->dumpBase(); | 1085 fCoinPtTStart->dumpBase(); |
| 919 SkDebugf(" span=%d ptT=%d ", fCoinPtTEnd->span()->debugID(), fCoinPtTEnd->de
bugID()); | 1086 SkDebugf(" span=%d ptT=%d ", fCoinPtTEnd->span()->debugID(), fCoinPtTEnd->de
bugID()); |
| 920 fCoinPtTEnd->dumpBase(); | 1087 fCoinPtTEnd->dumpBase(); |
| 921 if (fCoinPtTStart->segment()->operand()) { | 1088 if (fCoinPtTStart->segment()->operand()) { |
| 922 SkDebugf(" operand"); | 1089 SkDebugf(" operand"); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 941 | 1108 |
| 942 void SkOpCoincidence::dump() const { | 1109 void SkOpCoincidence::dump() const { |
| 943 SkCoincidentSpans* span = fHead; | 1110 SkCoincidentSpans* span = fHead; |
| 944 while (span) { | 1111 while (span) { |
| 945 span->dump(); | 1112 span->dump(); |
| 946 span = span->fNext; | 1113 span = span->fNext; |
| 947 } | 1114 } |
| 948 } | 1115 } |
| 949 | 1116 |
| 950 void SkOpContour::dump() { | 1117 void SkOpContour::dump() { |
| 951 SkDebugf("contour=%d count=%d\n", this->debugID(), fCount); | 1118 SkDebugf("contour=%d count=%d op=%d xor=%d\n", this->debugID(), fCount, fOpe
rand, fXor); |
| 952 if (!fCount) { | 1119 if (!fCount) { |
| 953 return; | 1120 return; |
| 954 } | 1121 } |
| 955 const SkOpSegment* segment = &fHead; | 1122 const SkOpSegment* segment = &fHead; |
| 956 PATH_OPS_DEBUG_CODE(fIndent = 0); | 1123 SkDEBUGCODE(fIndent = 0); |
| 957 indentDump(); | 1124 indentDump(); |
| 958 do { | 1125 do { |
| 959 segment->dump(); | 1126 segment->dump(); |
| 960 } while ((segment = segment->next())); | 1127 } while ((segment = segment->next())); |
| 961 outdentDump(); | 1128 outdentDump(); |
| 962 } | 1129 } |
| 963 | 1130 |
| 964 void SkOpContour::dumpAll() { | 1131 void SkOpContour::dumpAll() { |
| 965 SkDebugf("contour=%d count=%d\n", this->debugID(), fCount); | 1132 SkDebugf("contour=%d count=%d op=%d xor=%d\n", this->debugID(), fCount, fOpe
rand, fXor); |
| 966 if (!fCount) { | 1133 if (!fCount) { |
| 967 return; | 1134 return; |
| 968 } | 1135 } |
| 969 const SkOpSegment* segment = &fHead; | 1136 const SkOpSegment* segment = &fHead; |
| 970 PATH_OPS_DEBUG_CODE(fIndent = 0); | 1137 SkDEBUGCODE(fIndent = 0); |
| 971 indentDump(); | 1138 indentDump(); |
| 972 do { | 1139 do { |
| 973 segment->dumpAll(); | 1140 segment->dumpAll(); |
| 974 } while ((segment = segment->next())); | 1141 } while ((segment = segment->next())); |
| 975 outdentDump(); | 1142 outdentDump(); |
| 976 } | 1143 } |
| 977 | 1144 |
| 978 | 1145 |
| 979 void SkOpContour::dumpAngles() const { | 1146 void SkOpContour::dumpAngles() const { |
| 980 SkDebugf("contour=%d\n", this->debugID()); | 1147 SkDebugf("contour=%d\n", this->debugID()); |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1190 SkPathOpsDebug::DumpContoursPt(contours, segmentID); | 1357 SkPathOpsDebug::DumpContoursPt(contours, segmentID); |
| 1191 } | 1358 } |
| 1192 | 1359 |
| 1193 void DumpPts(const SkTDArray<SkOpContour* >* contours) { | 1360 void DumpPts(const SkTDArray<SkOpContour* >* contours) { |
| 1194 SkPathOpsDebug::DumpContoursPts(contours); | 1361 SkPathOpsDebug::DumpContoursPts(contours); |
| 1195 } | 1362 } |
| 1196 | 1363 |
| 1197 #if DEBUG_T_SECT_DUMP > 1 | 1364 #if DEBUG_T_SECT_DUMP > 1 |
| 1198 int gDumpTSectNum; | 1365 int gDumpTSectNum; |
| 1199 #endif | 1366 #endif |
| OLD | NEW |