| Index: src/pathops/SkPathOpsOp.cpp
 | 
| diff --git a/src/pathops/SkPathOpsOp.cpp b/src/pathops/SkPathOpsOp.cpp
 | 
| index 71efeeea8c48144b03e3417708030c412f160269..e532fda3de49ed82ad2fe8c90bfdafe47da1a8b9 100644
 | 
| --- a/src/pathops/SkPathOpsOp.cpp
 | 
| +++ b/src/pathops/SkPathOpsOp.cpp
 | 
| @@ -49,10 +49,19 @@ static SkOpSegment* findChaseOp(SkTDArray<SkOpSpan*>& chase, int& nextStart, int
 | 
|          // find first angle, initialize winding to computed fWindSum
 | 
|          int firstIndex = -1;
 | 
|          const SkOpAngle* angle;
 | 
| +        bool foundAngle = true;
 | 
|          do {
 | 
| -            angle = sorted[++firstIndex];
 | 
| +            ++firstIndex;
 | 
| +            if (firstIndex >= angleCount) {
 | 
| +                foundAngle = false;
 | 
| +                break;
 | 
| +            }
 | 
| +            angle = sorted[firstIndex];
 | 
|              segment = angle->segment();
 | 
|          } while (segment->windSum(angle) == SK_MinS32);
 | 
| +        if (!foundAngle) {
 | 
| +            continue;
 | 
| +        }
 | 
|      #if DEBUG_SORT
 | 
|          segment->debugShowSort(__FUNCTION__, sorted, firstIndex, sortable);
 | 
|      #endif
 | 
| @@ -135,8 +144,8 @@ static bool bridgeOp(SkTArray<SkOpContour*, true>& contourList, const SkPathOp o
 | 
|      do {
 | 
|          int index, endIndex;
 | 
|          bool done;
 | 
| -        SkOpSegment* current = FindSortableTop(contourList, &firstContour, &index, &endIndex,
 | 
| -                &topLeft, &topUnsortable, &done, true);
 | 
| +        SkOpSegment* current = FindSortableTop(contourList, SkOpAngle::kBinarySingle, &firstContour,
 | 
| +                &index, &endIndex, &topLeft, &topUnsortable, &done);
 | 
|          if (!current) {
 | 
|              if (topUnsortable || !done) {
 | 
|                  topUnsortable = false;
 | 
| @@ -185,8 +194,12 @@ static bool bridgeOp(SkTArray<SkOpContour*, true>& contourList, const SkPathOp o
 | 
|                  } while (!simple->isClosed() && (!unsortable
 | 
|                          || !current->done(SkMin32(index, endIndex))));
 | 
|                  if (current->activeWinding(index, endIndex) && !simple->isClosed()) {
 | 
| -                    SkASSERT(unsortable || simple->isEmpty());
 | 
| +                    // FIXME : add to simplify, xor cpaths
 | 
|                      int min = SkMin32(index, endIndex);
 | 
| +                    if (!unsortable && !simple->isEmpty()) {
 | 
| +                        unsortable = current->checkSmall(min);
 | 
| +                    }
 | 
| +                    SkASSERT(unsortable || simple->isEmpty());
 | 
|                      if (!current->done(min)) {
 | 
|                          current->addCurveTo(index, endIndex, simple, true);
 | 
|                          current->markDoneBinary(min);
 | 
| @@ -235,8 +248,8 @@ bool Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result) {
 | 
|  #if DEBUG_SHOW_TEST_NAME
 | 
|      char* debugName = DEBUG_FILENAME_STRING;
 | 
|      if (debugName && debugName[0]) {
 | 
| -        DebugBumpTestName(debugName);
 | 
| -        DebugShowPath(one, two, op, debugName);
 | 
| +        SkPathOpsDebug::BumpTestName(debugName);
 | 
| +        SkPathOpsDebug::ShowPath(one, two, op, debugName);
 | 
|      }
 | 
|  #endif
 | 
|      op = gOpInverse[op][one.isInverseFillType()][two.isInverseFillType()];
 | 
| @@ -250,7 +263,7 @@ bool Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result) {
 | 
|          op = kDifference_PathOp;
 | 
|      }
 | 
|  #if DEBUG_SORT || DEBUG_SWAP_TOP
 | 
| -    gDebugSortCount = gDebugSortCountDefault;
 | 
| +    SkPathOpsDebug::gSortCount = SkPathOpsDebug::gSortCountDefault;
 | 
|  #endif
 | 
|      // turn path into list of segments
 | 
|      SkTArray<SkOpContour> contours;
 | 
| @@ -300,6 +313,7 @@ bool Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result) {
 | 
|  #endif
 | 
|      FixOtherTIndex(&contourList);
 | 
|      CheckEnds(&contourList);
 | 
| +    CheckTiny(&contourList);
 | 
|      SortSegments(&contourList);
 | 
|  #if DEBUG_ACTIVE_SPANS || DEBUG_ACTIVE_SPANS_FIRST_ONLY
 | 
|      DebugShowActiveSpans(contourList);
 | 
| 
 |