fast path for pathops

Add faster path for simple but common path ops:
- intersect two rects
- all ops where one operand is empty

R=halcanary@google.com

Bug: skia:8049
Change-Id: I2a516d095feae8478ee9433262c9c77e5e18ce81
Reviewed-on: https://skia-review.googlesource.com/132929
Auto-Submit: Cary Clark <caryclark@skia.org>
Reviewed-by: Cary Clark <caryclark@skia.org>
Commit-Queue: Cary Clark <caryclark@skia.org>
diff --git a/tests/PathOpsOpTest.cpp b/tests/PathOpsOpTest.cpp
index cfa9a45..52cd8b2 100644
--- a/tests/PathOpsOpTest.cpp
+++ b/tests/PathOpsOpTest.cpp
@@ -5729,6 +5729,28 @@
     testPathOp(reporter, path, path2, kIntersect_SkPathOp, filename);
 }
 
+static void testRect1_u(skiatest::Reporter* reporter, const char* filename) {
+    SkPath path, pathB;
+    path.setFillType(SkPath::kWinding_FillType);
+    path.moveTo(0, 0);
+    path.lineTo(0, 60);
+    path.lineTo(60, 60);
+    path.lineTo(60, 0);
+    path.close();
+    path.moveTo(30, 20);
+    path.lineTo(30, 50);
+    path.lineTo(50, 50);
+    path.lineTo(50, 20);
+    path.close();
+    path.moveTo(24, 20);
+    path.lineTo(24, 30);
+    path.lineTo(36, 30);
+    path.lineTo(36, 20);
+    path.close();
+    pathB.setFillType(SkPath::kWinding_FillType);
+    testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
+}
+
 static void (*skipTest)(skiatest::Reporter* , const char* filename) = 0;
 static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0;
 static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0;
@@ -5736,6 +5758,7 @@
 #define TEST(name) { name, #name }
 
 static struct TestDesc tests[] = {
+    TEST(testRect1_u),
     TEST(halbug),
     TEST(seanbug),
     TEST(android1),