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),