From 6f726addf3178b01949bb389ef83cf14a1d7b6b2 Mon Sep 17 00:00:00 2001 From: caryclark Date: Tue, 28 Oct 2014 10:33:09 -0700 Subject: These tests stress pathops by describing the union of circle-like paths that have tiny line segments embedded and double back to create near-coincident conditions. The fixes include - detect when finding the active top loops between two possible answers - preflight chasing winding to ensure answer is consistent - binary search more often when quadratic intersection fails - add more failure paths when an intersect is missed While this fixes the chrome bug, reenabling path ops in svg should be deferred until additional fixes are landed. TBR= BUG=421132 Review URL: https://codereview.chromium.org/633393002 --- tests/PathOpsDebug.cpp | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'tests/PathOpsDebug.cpp') diff --git a/tests/PathOpsDebug.cpp b/tests/PathOpsDebug.cpp index 8ac38aaf6d..c4fbbfa695 100755 --- a/tests/PathOpsDebug.cpp +++ b/tests/PathOpsDebug.cpp @@ -19,6 +19,9 @@ inline void DebugDumpFloat(float x) { } } +inline void DebugDumpHexFloat(float x) { + SkDebugf("SkBits2Float(0x%08x)", SkFloat2Bits(x)); +} #if DEBUG_SHOW_TEST_NAME @@ -413,6 +416,17 @@ void SkDPoint::Dump(const SkPoint& pt) { SkDebugf("}"); } +void SkDPoint::DumpHex(const SkPoint& pt) { + SkDebugf("{"); + DebugDumpHexFloat(pt.fX); + SkDebugf(", "); + DebugDumpHexFloat(pt.fY); + SkDebugf("}"); +} + +void SkDQuad::dump() const { + dumpComma(""); +} void SkDQuad::dumpComma(const char* comma) const { SkDebugf("{{"); @@ -425,10 +439,6 @@ void SkDQuad::dumpComma(const char* comma) const { SkDebugf("}}%s\n", comma ? comma : ""); } -void SkDQuad::dump() const { - dumpComma(""); -} - void SkIntersectionHelper::dump() const { SkDPoint::Dump(pts()[0]); SkDPoint::Dump(pts()[1]); @@ -492,6 +502,18 @@ void SkOpSegment::dumpPts() const { SkDebugf("}}\n"); } +void SkOpSegment::dumpHexPts() const { + int last = SkPathOpsVerbToPoints(fVerb); + SkDebugf("((SkOpSegment*) 0x%p) [%d] {{", this, debugID()); + int index = 0; + do { + SkDPoint::DumpHex(fPts[index]); + SkDebugf(", "); + } while (++index < last); + SkDPoint::DumpHex(fPts[index]); + SkDebugf("}}\n"); +} + void SkOpSegment::dumpDPts() const { int count = SkPathOpsVerbToPoints(fVerb); SkDebugf("((SkOpSegment*) 0x%p) [%d] {{", this, debugID()); -- cgit v1.2.3