aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/PathOpsSimplifyRectThreadedTest.cpp
diff options
context:
space:
mode:
authorGravatar caryclark@google.com <caryclark@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-04-10 15:55:37 +0000
committerGravatar caryclark@google.com <caryclark@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-04-10 15:55:37 +0000
commit66089e4ec4f1702caf2154780471417872862148 (patch)
treee078d7a335a396cc325f2d2f55723315307eb07d /tests/PathOpsSimplifyRectThreadedTest.cpp
parent51dbabee67ea1285e1115e535d26944d4da99be5 (diff)
Make parallel unit testing work on windows
Review URL: https://codereview.chromium.org/14072002 git-svn-id: http://skia.googlecode.com/svn/trunk@8594 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/PathOpsSimplifyRectThreadedTest.cpp')
-rw-r--r--tests/PathOpsSimplifyRectThreadedTest.cpp309
1 files changed, 148 insertions, 161 deletions
diff --git a/tests/PathOpsSimplifyRectThreadedTest.cpp b/tests/PathOpsSimplifyRectThreadedTest.cpp
index 13f327a06f..bd8023cd82 100644
--- a/tests/PathOpsSimplifyRectThreadedTest.cpp
+++ b/tests/PathOpsSimplifyRectThreadedTest.cpp
@@ -5,6 +5,7 @@
* found in the LICENSE file.
*/
#include "PathOpsExtendedTest.h"
+#include "PathOpsThreadedCommon.h"
// four rects, of four sizes
// for 3 smaller sizes, tall, wide
@@ -13,194 +14,180 @@
// not included, square, tall, wide (2 bits)
// cw or ccw (1 bit)
-static THREAD_TYPE testSimplify4x4RectsMain(void* data)
+static void testSimplify4x4RectsMain(PathOpsThreadState* data)
{
SkASSERT(data);
- State4& state = *(State4*) data;
+ PathOpsThreadState& state = *data;
char pathStr[1024]; // gdb: set print elements 400
sk_bzero(pathStr, sizeof(pathStr));
- do {
- int aShape = state.a & 0x03;
- SkPath::Direction aCW = state.a >> 2 ? SkPath::kCCW_Direction : SkPath::kCW_Direction;
- int bShape = state.b & 0x03;
- SkPath::Direction bCW = state.b >> 2 ? SkPath::kCCW_Direction : SkPath::kCW_Direction;
- int cShape = state.c & 0x03;
- SkPath::Direction cCW = state.c >> 2 ? SkPath::kCCW_Direction : SkPath::kCW_Direction;
- int dShape = state.d & 0x03;
- SkPath::Direction dCW = state.d >> 2 ? SkPath::kCCW_Direction : SkPath::kCW_Direction;
- for (int aXAlign = 0 ; aXAlign < 5; ++aXAlign) {
- for (int aYAlign = 0 ; aYAlign < 5; ++aYAlign) {
- for (int bXAlign = 0 ; bXAlign < 5; ++bXAlign) {
- for (int bYAlign = 0 ; bYAlign < 5; ++bYAlign) {
- for (int cXAlign = 0 ; cXAlign < 5; ++cXAlign) {
- for (int cYAlign = 0 ; cYAlign < 5; ++cYAlign) {
- for (int dXAlign = 0 ; dXAlign < 5; ++dXAlign) {
- for (int dYAlign = 0 ; dYAlign < 5; ++dYAlign) {
- SkPath path, out;
- char* str = pathStr;
- path.setFillType(SkPath::kWinding_FillType);
- int l, t, r, b;
- if (aShape) {
- switch (aShape) {
- case 1: // square
- l = 0; r = 60;
- t = 0; b = 60;
- aXAlign = 5;
- aYAlign = 5;
- break;
- case 2:
- l = aXAlign * 12;
- r = l + 30;
- t = 0; b = 60;
- aYAlign = 5;
- break;
- case 3:
- l = 0; r = 60;
- t = aYAlign * 12;
- b = l + 30;
- aXAlign = 5;
- break;
- }
- path.addRect(SkIntToScalar(l), SkIntToScalar(t), SkIntToScalar(r), SkIntToScalar(b),
- aCW);
- str += sprintf(str, " path.addRect(%d, %d, %d, %d,"
- " SkPath::kC%sW_Direction);\n", l, t, r, b, aCW ? "C" : "");
- } else {
- aXAlign = 5;
- aYAlign = 5;
+ int aShape = state.fA & 0x03;
+ SkPath::Direction aCW = state.fA >> 2 ? SkPath::kCCW_Direction : SkPath::kCW_Direction;
+ int bShape = state.fB & 0x03;
+ SkPath::Direction bCW = state.fB >> 2 ? SkPath::kCCW_Direction : SkPath::kCW_Direction;
+ int cShape = state.fC & 0x03;
+ SkPath::Direction cCW = state.fC >> 2 ? SkPath::kCCW_Direction : SkPath::kCW_Direction;
+ int dShape = state.fD & 0x03;
+ SkPath::Direction dCW = state.fD >> 2 ? SkPath::kCCW_Direction : SkPath::kCW_Direction;
+ for (int aXAlign = 0; aXAlign < 5; ++aXAlign) {
+ for (int aYAlign = 0; aYAlign < 5; ++aYAlign) {
+ for (int bXAlign = 0; bXAlign < 5; ++bXAlign) {
+ for (int bYAlign = 0; bYAlign < 5; ++bYAlign) {
+ for (int cXAlign = 0; cXAlign < 5; ++cXAlign) {
+ for (int cYAlign = 0; cYAlign < 5; ++cYAlign) {
+ for (int dXAlign = 0; dXAlign < 5; ++dXAlign) {
+ for (int dYAlign = 0; dYAlign < 5; ++dYAlign) {
+ SkPath path, out;
+ char* str = pathStr;
+ path.setFillType(SkPath::kWinding_FillType);
+ int l, t, r, b;
+ if (aShape) {
+ switch (aShape) {
+ case 1: // square
+ l = 0; r = 60;
+ t = 0; b = 60;
+ aXAlign = 5;
+ aYAlign = 5;
+ break;
+ case 2:
+ l = aXAlign * 12;
+ r = l + 30;
+ t = 0; b = 60;
+ aYAlign = 5;
+ break;
+ case 3:
+ l = 0; r = 60;
+ t = aYAlign * 12;
+ b = l + 30;
+ aXAlign = 5;
+ break;
}
- if (bShape) {
- switch (bShape) {
- case 1: // square
- l = bXAlign * 10;
- r = l + 20;
- t = bYAlign * 10;
- b = l + 20;
- break;
- case 2:
- l = bXAlign * 10;
- r = l + 20;
- t = 10; b = 40;
- bYAlign = 5;
- break;
- case 3:
- l = 10; r = 40;
- t = bYAlign * 10;
- b = l + 20;
- bXAlign = 5;
- break;
- }
- path.addRect(SkIntToScalar(l), SkIntToScalar(t), SkIntToScalar(r), SkIntToScalar(b),
- bCW);
- str += sprintf(str, " path.addRect(%d, %d, %d, %d,"
- " SkPath::kC%sW_Direction);\n", l, t, r, b, bCW ? "C" : "");
- } else {
- bXAlign = 5;
- bYAlign = 5;
+ path.addRect(SkIntToScalar(l), SkIntToScalar(t), SkIntToScalar(r), SkIntToScalar(b),
+ aCW);
+ str += sprintf(str, " path.addRect(%d, %d, %d, %d,"
+ " SkPath::kC%sW_Direction);\n", l, t, r, b, aCW ? "C" : "");
+ } else {
+ aXAlign = 5;
+ aYAlign = 5;
+ }
+ if (bShape) {
+ switch (bShape) {
+ case 1: // square
+ l = bXAlign * 10;
+ r = l + 20;
+ t = bYAlign * 10;
+ b = l + 20;
+ break;
+ case 2:
+ l = bXAlign * 10;
+ r = l + 20;
+ t = 10; b = 40;
+ bYAlign = 5;
+ break;
+ case 3:
+ l = 10; r = 40;
+ t = bYAlign * 10;
+ b = l + 20;
+ bXAlign = 5;
+ break;
}
- if (cShape) {
- switch (cShape) {
- case 1: // square
- l = cXAlign * 6;
- r = l + 12;
- t = cYAlign * 6;
- b = l + 12;
- break;
- case 2:
- l = cXAlign * 6;
- r = l + 12;
- t = 20; b = 30;
- cYAlign = 5;
- break;
- case 3:
- l = 20; r = 30;
- t = cYAlign * 6;
- b = l + 20;
- cXAlign = 5;
- break;
- }
- path.addRect(SkIntToScalar(l), SkIntToScalar(t), SkIntToScalar(r), SkIntToScalar(b),
- cCW);
- str += sprintf(str, " path.addRect(%d, %d, %d, %d,"
- " SkPath::kC%sW_Direction);\n", l, t, r, b, cCW ? "C" : "");
- } else {
- cXAlign = 5;
- cYAlign = 5;
+ path.addRect(SkIntToScalar(l), SkIntToScalar(t), SkIntToScalar(r), SkIntToScalar(b),
+ bCW);
+ str += sprintf(str, " path.addRect(%d, %d, %d, %d,"
+ " SkPath::kC%sW_Direction);\n", l, t, r, b, bCW ? "C" : "");
+ } else {
+ bXAlign = 5;
+ bYAlign = 5;
+ }
+ if (cShape) {
+ switch (cShape) {
+ case 1: // square
+ l = cXAlign * 6;
+ r = l + 12;
+ t = cYAlign * 6;
+ b = l + 12;
+ break;
+ case 2:
+ l = cXAlign * 6;
+ r = l + 12;
+ t = 20; b = 30;
+ cYAlign = 5;
+ break;
+ case 3:
+ l = 20; r = 30;
+ t = cYAlign * 6;
+ b = l + 20;
+ cXAlign = 5;
+ break;
}
- if (dShape) {
- switch (dShape) {
- case 1: // square
- l = dXAlign * 4;
- r = l + 9;
- t = dYAlign * 4;
- b = l + 9;
- break;
- case 2:
- l = dXAlign * 6;
- r = l + 9;
- t = 32; b = 36;
- dYAlign = 5;
- break;
- case 3:
- l = 32; r = 36;
- t = dYAlign * 6;
- b = l + 9;
- dXAlign = 5;
- break;
- }
- path.addRect(SkIntToScalar(l), SkIntToScalar(t), SkIntToScalar(r), SkIntToScalar(b),
- dCW);
- str += sprintf(str, " path.addRect(%d, %d, %d, %d,"
- " SkPath::kC%sW_Direction);\n", l, t, r, b, dCW ? "C" : "");
- } else {
- dXAlign = 5;
- dYAlign = 5;
+ path.addRect(SkIntToScalar(l), SkIntToScalar(t), SkIntToScalar(r), SkIntToScalar(b),
+ cCW);
+ str += sprintf(str, " path.addRect(%d, %d, %d, %d,"
+ " SkPath::kC%sW_Direction);\n", l, t, r, b, cCW ? "C" : "");
+ } else {
+ cXAlign = 5;
+ cYAlign = 5;
+ }
+ if (dShape) {
+ switch (dShape) {
+ case 1: // square
+ l = dXAlign * 4;
+ r = l + 9;
+ t = dYAlign * 4;
+ b = l + 9;
+ break;
+ case 2:
+ l = dXAlign * 6;
+ r = l + 9;
+ t = 32; b = 36;
+ dYAlign = 5;
+ break;
+ case 3:
+ l = 32; r = 36;
+ t = dYAlign * 6;
+ b = l + 9;
+ dXAlign = 5;
+ break;
}
- path.close();
- outputProgress(state, pathStr, SkPath::kWinding_FillType);
- testSimplify(path, false, out, state, pathStr);
- state.testsRun++;
- outputProgress(state, pathStr, SkPath::kEvenOdd_FillType);
- testSimplify(path, true, out, state, pathStr);
- state.testsRun++;
- }
- }
+ path.addRect(SkIntToScalar(l), SkIntToScalar(t), SkIntToScalar(r), SkIntToScalar(b),
+ dCW);
+ str += sprintf(str, " path.addRect(%d, %d, %d, %d,"
+ " SkPath::kC%sW_Direction);\n", l, t, r, b, dCW ? "C" : "");
+ } else {
+ dXAlign = 5;
+ dYAlign = 5;
+ }
+ path.close();
+ outputProgress(state.fPathStr, pathStr, SkPath::kWinding_FillType);
+ testSimplify(path, false, out, state, pathStr);
+ outputProgress(state.fPathStr, pathStr, SkPath::kEvenOdd_FillType);
+ testSimplify(path, true, out, state, pathStr);
+ }
}
}
}
}
}
}
- } while (runNextTestSet(state));
- THREAD_RETURN
+ }
}
static void TestSimplifyRectsThreaded(skiatest::Reporter* reporter)
{
- int testsRun = 0;
- if (gShowTestProgress) SkDebugf("%s\n", __FUNCTION__);
-#ifdef SK_DEBUG
- gDebugMaxWindSum = 4;
- gDebugMaxWindValue = 4;
-#endif
- const char testLineStr[] = "testLine";
- initializeTests(reporter, testLineStr, sizeof(testLineStr));
+ int threadCount = initializeTests("testLine");
+ PathOpsThreadedTestRunner testRunner(reporter, threadCount);
for (int a = 0; a < 8; ++a) { // outermost
for (int b = a ; b < 8; ++b) {
for (int c = b ; c < 8; ++c) {
for (int d = c; d < 8; ++d) {
- testsRun += dispatchTest4(testSimplify4x4RectsMain, a, b, c, d);
+ *testRunner.fRunnables.append() = SkNEW_ARGS(PathOpsThreadedRunnable,
+ (&testSimplify4x4RectsMain, a, b, c, d, &testRunner));
}
- if (!gAllowExtendedTest) goto finish;
- if (gShowTestProgress) SkDebugf(".");
+ if (!reporter->allowExtendedTest()) goto finish;
}
- if (gShowTestProgress) SkDebugf("%d", b);
}
- if (gShowTestProgress) SkDebugf("\n%d", a);
}
finish:
- testsRun += waitForCompletion();
- if (gShowTestProgress) SkDebugf("%s tests=%d\n", __FUNCTION__, testsRun);
+ testRunner.render();
}
#include "TestClassDef.h"