From 66089e4ec4f1702caf2154780471417872862148 Mon Sep 17 00:00:00 2001 From: "caryclark@google.com" Date: Wed, 10 Apr 2013 15:55:37 +0000 Subject: 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 --- tests/PathOpsSimplifyQuadThreadedTest.cpp | 127 ++++++++++++++---------------- 1 file changed, 57 insertions(+), 70 deletions(-) (limited to 'tests/PathOpsSimplifyQuadThreadedTest.cpp') diff --git a/tests/PathOpsSimplifyQuadThreadedTest.cpp b/tests/PathOpsSimplifyQuadThreadedTest.cpp index 96626a61ad..9343bc2243 100644 --- a/tests/PathOpsSimplifyQuadThreadedTest.cpp +++ b/tests/PathOpsSimplifyQuadThreadedTest.cpp @@ -5,98 +5,85 @@ * found in the LICENSE file. */ #include "PathOpsExtendedTest.h" +#include "PathOpsThreadedCommon.h" -static THREAD_TYPE testSimplifyQuadsMain(void* data) +static void testSimplifyQuadsMain(PathOpsThreadState* data) { SkASSERT(data); - State4& state = *(State4*) data; + PathOpsThreadState& state = *data; char pathStr[1024]; sk_bzero(pathStr, sizeof(pathStr)); - do { - int ax = state.a & 0x03; - int ay = state.a >> 2; - int bx = state.b & 0x03; - int by = state.b >> 2; - int cx = state.c & 0x03; - int cy = state.c >> 2; - int dx = state.d & 0x03; - int dy = state.d >> 2; - for (int e = 0 ; e < 16; ++e) { - int ex = e & 0x03; - int ey = e >> 2; - for (int f = e ; f < 16; ++f) { - int fx = f & 0x03; - int fy = f >> 2; - for (int g = f ; g < 16; ++g) { - int gx = g & 0x03; - int gy = g >> 2; - for (int h = g ; h < 16; ++h) { - int hx = h & 0x03; - int hy = h >> 2; - SkPath path, out; - path.setFillType(SkPath::kWinding_FillType); - path.moveTo(SkIntToScalar(ax), SkIntToScalar(ay)); - path.quadTo(SkIntToScalar(bx), SkIntToScalar(by), - SkIntToScalar(cx), SkIntToScalar(cy)); - path.lineTo(SkIntToScalar(dx), SkIntToScalar(dy)); - path.close(); - path.moveTo(SkIntToScalar(ex), SkIntToScalar(ey)); - path.lineTo(SkIntToScalar(fx), SkIntToScalar(fy)); - path.quadTo(SkIntToScalar(gx), SkIntToScalar(gy), - SkIntToScalar(hx), SkIntToScalar(hy)); - path.close(); - // gdb: set print elements 400 - char* str = pathStr; - str += sprintf(str, " path.moveTo(%d, %d);\n", ax, ay); - str += sprintf(str, " path.quadTo(%d, %d, %d, %d);\n", bx, by, cx, cy); - str += sprintf(str, " path.lineTo(%d, %d);\n", dx, dy); - str += sprintf(str, " path.close();\n"); - str += sprintf(str, " path.moveTo(%d, %d);\n", ex, ey); - str += sprintf(str, " path.lineTo(%d, %d);\n", fx, fy); - str += sprintf(str, " path.quadTo(%d, %d, %d, %d);\n", gx, gy, hx, hy); - str += sprintf(str, " path.close();\n"); - outputProgress(state, pathStr, SkPath::kWinding_FillType); - testSimplify(path, false, out, state, pathStr); - state.testsRun++; - path.setFillType(SkPath::kEvenOdd_FillType); - outputProgress(state, pathStr, SkPath::kEvenOdd_FillType); - testSimplify(path, true, out, state, pathStr); - state.testsRun++; - } + int ax = state.fA & 0x03; + int ay = state.fA >> 2; + int bx = state.fB & 0x03; + int by = state.fB >> 2; + int cx = state.fC & 0x03; + int cy = state.fC >> 2; + int dx = state.fD & 0x03; + int dy = state.fD >> 2; + for (int e = 0 ; e < 16; ++e) { + int ex = e & 0x03; + int ey = e >> 2; + for (int f = e ; f < 16; ++f) { + int fx = f & 0x03; + int fy = f >> 2; + for (int g = f ; g < 16; ++g) { + int gx = g & 0x03; + int gy = g >> 2; + for (int h = g ; h < 16; ++h) { + int hx = h & 0x03; + int hy = h >> 2; + SkPath path, out; + path.setFillType(SkPath::kWinding_FillType); + path.moveTo(SkIntToScalar(ax), SkIntToScalar(ay)); + path.quadTo(SkIntToScalar(bx), SkIntToScalar(by), + SkIntToScalar(cx), SkIntToScalar(cy)); + path.lineTo(SkIntToScalar(dx), SkIntToScalar(dy)); + path.close(); + path.moveTo(SkIntToScalar(ex), SkIntToScalar(ey)); + path.lineTo(SkIntToScalar(fx), SkIntToScalar(fy)); + path.quadTo(SkIntToScalar(gx), SkIntToScalar(gy), + SkIntToScalar(hx), SkIntToScalar(hy)); + path.close(); + // gdb: set print elements 400 + char* str = pathStr; + str += sprintf(str, " path.moveTo(%d, %d);\n", ax, ay); + str += sprintf(str, " path.quadTo(%d, %d, %d, %d);\n", bx, by, cx, cy); + str += sprintf(str, " path.lineTo(%d, %d);\n", dx, dy); + str += sprintf(str, " path.close();\n"); + str += sprintf(str, " path.moveTo(%d, %d);\n", ex, ey); + str += sprintf(str, " path.lineTo(%d, %d);\n", fx, fy); + str += sprintf(str, " path.quadTo(%d, %d, %d, %d);\n", gx, gy, hx, hy); + str += sprintf(str, " path.close();\n"); + outputProgress(state.fPathStr, pathStr, SkPath::kWinding_FillType); + testSimplify(path, false, out, state, pathStr); + path.setFillType(SkPath::kEvenOdd_FillType); + outputProgress(state.fPathStr, pathStr, SkPath::kEvenOdd_FillType); + testSimplify(path, true, out, state, pathStr); } } } - } while (runNextTestSet(state)); - THREAD_RETURN + } } static void TestSimplifyQuadsThreaded(skiatest::Reporter* reporter) { - int testsRun = 0; - if (gShowTestProgress) SkDebugf("%s\n", __FUNCTION__); -#ifdef SK_DEBUG - gDebugMaxWindSum = 4; // FIXME: 3? - gDebugMaxWindValue = 4; -#endif - const char testStr[] = "testQuads"; - initializeTests(reporter, testStr, sizeof(testStr)); + int threadCount = initializeTests("testQuads"); + PathOpsThreadedTestRunner testRunner(reporter, threadCount); int a = 0; for (; a < 16; ++a) { for (int b = a ; b < 16; ++b) { for (int c = b ; c < 16; ++c) { for (int d = c; d < 16; ++d) { - testsRun += dispatchTest4(testSimplifyQuadsMain, a, b, c, d); + *testRunner.fRunnables.append() = SkNEW_ARGS(PathOpsThreadedRunnable, + (&testSimplifyQuadsMain, 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" -- cgit v1.2.3