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

Committed: https://skia.googlesource.com/skia/+/6f726addf3178b01949bb389ef83cf14a1d7b6b2

Review URL: https://codereview.chromium.org/633393002
diff --git a/src/pathops/SkOpContour.cpp b/src/pathops/SkOpContour.cpp
index 6d6ad79..28c072a 100644
--- a/src/pathops/SkOpContour.cpp
+++ b/src/pathops/SkOpContour.cpp
@@ -13,7 +13,7 @@
         const SkIntersections& ts, bool swap) {
     SkPoint pt0 = ts.pt(0).asSkPoint();
     SkPoint pt1 = ts.pt(1).asSkPoint();
-    if (pt0 == pt1) {
+    if (pt0 == pt1 || ts[0][0] == ts[0][1] || ts[1][0] == ts[1][1]) {
         // FIXME: one could imagine a case where it would be incorrect to ignore this
         // suppose two self-intersecting cubics overlap to be coincident --
         // this needs to check that by some measure the t values are far enough apart