19e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com/* 29e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * Copyright 2012 Google Inc. 39e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * 49e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * Use of this source code is governed by a BSD-style license that can be 59e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * found in the LICENSE file. 69e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com */ 7d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com#include "EdgeWalker_Test.h" 8d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com#include "Intersection_Tests.h" 9198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com 10d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.comstatic void* testSimplify4x4QuadralateralsMain(void* data) 11d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com{ 12d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com SkASSERT(data); 1378e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com State4& state = *(State4*) data; 1459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com char pathStr[1024]; 1559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com bzero(pathStr, sizeof(pathStr)); 1659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com do { 1759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ax = state.a & 0x03; 1859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ay = state.a >> 2; 1959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int bx = state.b & 0x03; 2059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int by = state.b >> 2; 2159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int cx = state.c & 0x03; 2259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int cy = state.c >> 2; 2359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int dx = state.d & 0x03; 2459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int dy = state.d >> 2; 2559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int e = 0 ; e < 16; ++e) { 2659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ex = e & 0x03; 2759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ey = e >> 2; 2859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int f = e ; f < 16; ++f) { 2959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int fx = f & 0x03; 3059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int fy = f >> 2; 3159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int g = f ; g < 16; ++g) { 3259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int gx = g & 0x03; 3359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int gy = g >> 2; 3459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int h = g ; h < 16; ++h) { 3559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int hx = h & 0x03; 3659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int hy = h >> 2; 3759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com SkPath path, out; 3859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.setFillType(SkPath::kWinding_FillType); 3959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.moveTo(ax, ay); 4059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(bx, by); 4159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(cx, cy); 4259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(dx, dy); 4359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.close(); 4459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.moveTo(ex, ey); 4559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(fx, fy); 4659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(gx, gy); 4759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(hx, hy); 4859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.close(); 4959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (1) { // gdb: set print elements 400 5059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com char* str = pathStr; 5159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.moveTo(%d, %d);\n", ax, ay); 5259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", bx, by); 5359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", cx, cy); 5459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", dx, dy); 5559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.close();\n"); 5659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.moveTo(%d, %d);\n", ex, ey); 5759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", fx, fy); 5859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", gx, gy); 5959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", hx, hy); 6059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.close();\n"); 6159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } 6224bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com outputProgress(state, pathStr, SkPath::kWinding_FillType); 6324bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com testSimplifyx(path, false, out, state, pathStr); 6459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com state.testsRun++; 6559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.setFillType(SkPath::kEvenOdd_FillType); 6659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com outputProgress(state, pathStr, SkPath::kEvenOdd_FillType); 6759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testSimplifyx(path, true, out, state, pathStr); 6859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com state.testsRun++; 69d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 70d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 71d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 72d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 7359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } while (runNextTestSet(state)); 74d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com return NULL; 75d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com} 76d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com 7724bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.comvoid Simplify4x4QuadralateralsThreaded_Test(int& testsRun) 78d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com{ 7959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com SkDebugf("%s\n", __FUNCTION__); 8059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com#ifdef SK_DEBUG 8159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com gDebugMaxWindSum = 4; // FIXME: 3? 8259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com gDebugMaxWindValue = 4; 8359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com#endif 8459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com const char testStr[] = "testQuadralateral"; 8559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com initializeTests(testStr, sizeof(testStr)); 8624bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com int testsStart = testsRun; 87d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com for (int a = 0; a < 16; ++a) { 88d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com for (int b = a ; b < 16; ++b) { 89d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com for (int c = b ; c < 16; ++c) { 90d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com for (int d = c; d < 16; ++d) { 9159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testsRun += dispatchTest4(testSimplify4x4QuadralateralsMain, 9259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com a, b, c, d); 93d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 9459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (!gRunTestsInOneThread) SkDebugf("."); 95d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 9659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (!gRunTestsInOneThread) SkDebugf("%d", b); 97d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 9859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (!gRunTestsInOneThread) SkDebugf("\n%d", a); 99d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 10059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testsRun += waitForCompletion(); 10124bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com SkDebugf("%s tests=%d total=%d\n", __FUNCTION__, testsRun - testsStart, testsRun); 102d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com} 103d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com 104d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com 105d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.comstatic void* testSimplify4x4NondegeneratesMain(void* data) { 106d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com SkASSERT(data); 10778e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com State4& state = *(State4*) data; 10859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com char pathStr[1024]; 10959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com bzero(pathStr, sizeof(pathStr)); 11059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com do { 11159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ax = state.a & 0x03; 11259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ay = state.a >> 2; 11359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int bx = state.b & 0x03; 11459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int by = state.b >> 2; 11559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int cx = state.c & 0x03; 11659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int cy = state.c >> 2; 11759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int d = 0; d < 15; ++d) { 11859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int dx = d & 0x03; 11959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int dy = d >> 2; 12059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int e = d + 1; e < 16; ++e) { 12159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ex = e & 0x03; 12259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ey = e >> 2; 12359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int f = d + 1; f < 16; ++f) { 12459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (e == f) { 12559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com continue; 12659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } 12759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int fx = f & 0x03; 12859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int fy = f >> 2; 12959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if ((ex - dx) * (fy - dy) == (ey - dy) * (fx - dx)) { 13059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com continue; 13159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } 13259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com SkPath path, out; 13359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.setFillType(SkPath::kWinding_FillType); 13459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.moveTo(ax, ay); 13559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(bx, by); 13659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(cx, cy); 13759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.close(); 13859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.moveTo(dx, dy); 13959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(ex, ey); 14059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(fx, fy); 14159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.close(); 14259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (1) { 14359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com char* str = pathStr; 14459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.moveTo(%d, %d);\n", ax, ay); 14559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", bx, by); 14659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", cx, cy); 14759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.close();\n"); 14859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.moveTo(%d, %d);\n", dx, dy); 14959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", ex, ey); 15059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", fx, fy); 15159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.close();\n"); 15259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } 15324bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com outputProgress(state, pathStr, SkPath::kWinding_FillType); 15424bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com testSimplifyx(path, false, out, state, pathStr); 15559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com state.testsRun++; 15659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.setFillType(SkPath::kEvenOdd_FillType); 15759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com outputProgress(state, pathStr, SkPath::kEvenOdd_FillType); 15859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testSimplifyx(path, true, out, state, pathStr); 15959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com state.testsRun++; 160d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 161d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 162d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 16359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } while (runNextTestSet(state)); 164d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com return NULL; 165d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com} 166d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com 16724bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.comvoid SimplifyNondegenerate4x4TrianglesThreaded_Test(int& testsRun) { 16859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com SkDebugf("%s\n", __FUNCTION__); 16959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com#ifdef SK_DEBUG 17059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com gDebugMaxWindSum = 2; 17159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com gDebugMaxWindValue = 2; 17259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com#endif 17359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com const char testStr[] = "testNondegenerate"; 17459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com initializeTests(testStr, sizeof(testStr)); 17524bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com int testsStart = testsRun; 176d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com for (int a = 0; a < 15; ++a) { 177d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int ax = a & 0x03; 178d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int ay = a >> 2; 179d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com for (int b = a + 1; b < 16; ++b) { 180d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int bx = b & 0x03; 181d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int by = b >> 2; 182d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com for (int c = a + 1; c < 16; ++c) { 183d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com if (b == c) { 184d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com continue; 185d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 186d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int cx = c & 0x03; 187d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int cy = c >> 2; 188d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com if ((bx - ax) * (cy - ay) == (by - ay) * (cx - ax)) { 189d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com continue; 190d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 19159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testsRun += dispatchTest4(testSimplify4x4NondegeneratesMain, 19259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com a, b, c, 0); 193d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 19459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (!gRunTestsInOneThread) SkDebugf("."); 195d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 19659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (!gRunTestsInOneThread) SkDebugf("\n%d", a); 197d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 19859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testsRun += waitForCompletion(); 19924bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com SkDebugf("%s tests=%d total=%d\n", __FUNCTION__, testsRun - testsStart, testsRun); 200d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com} 201d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com 202d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.comstatic void* testSimplify4x4DegeneratesMain(void* data) { 203d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com SkASSERT(data); 20478e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com State4& state = *(State4*) data; 20559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com char pathStr[1024]; 20659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com bzero(pathStr, sizeof(pathStr)); 20759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com do { 20859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ax = state.a & 0x03; 20959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ay = state.a >> 2; 21059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int bx = state.b & 0x03; 21159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int by = state.b >> 2; 21259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int cx = state.c & 0x03; 21359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int cy = state.c >> 2; 21459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int d = 0; d < 16; ++d) { 21559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int dx = d & 0x03; 21659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int dy = d >> 2; 21759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int e = d ; e < 16; ++e) { 21859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ex = e & 0x03; 21959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int ey = e >> 2; 22059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com for (int f = d ; f < 16; ++f) { 22159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int fx = f & 0x03; 22259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com int fy = f >> 2; 22359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (state.d && (ex - dx) * (fy - dy) 22459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com != (ey - dy) * (fx - dx)) { 22559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com continue; 22659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } 22759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com SkPath path, out; 22859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.setFillType(SkPath::kWinding_FillType); 22959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.moveTo(ax, ay); 23059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(bx, by); 23159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(cx, cy); 23259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.close(); 23359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.moveTo(dx, dy); 23459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(ex, ey); 23559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.lineTo(fx, fy); 23659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.close(); 23759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (1) { 23859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com char* str = pathStr; 23959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.moveTo(%d, %d);\n", ax, ay); 24059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", bx, by); 24159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", cx, cy); 24259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.close();\n"); 24359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.moveTo(%d, %d);\n", dx, dy); 24459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", ex, ey); 24559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", fx, fy); 24659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com str += sprintf(str, " path.close();\n"); 24759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } 24824bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com outputProgress(state, pathStr, SkPath::kWinding_FillType); 24924bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com testSimplifyx(path, false, out, state, pathStr); 25059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com state.testsRun++; 25159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com path.setFillType(SkPath::kEvenOdd_FillType); 25259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com outputProgress(state, pathStr, SkPath::kEvenOdd_FillType); 25359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testSimplifyx(path, true, out, state, pathStr); 25459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com state.testsRun++; 255d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 256d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 257d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 25859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com } while (runNextTestSet(state)); 259d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com return NULL; 260d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com} 261d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com 26224bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.comvoid SimplifyDegenerate4x4TrianglesThreaded_Test(int& testsRun) { 26359823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com SkDebugf("%s\n", __FUNCTION__); 26459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com#ifdef SK_DEBUG 26559823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com gDebugMaxWindSum = 2; 26659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com gDebugMaxWindValue = 2; 26759823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com#endif 26859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com const char testStr[] = "testDegenerate"; 26959823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com initializeTests(testStr, sizeof(testStr)); 27024bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com int testsStart = testsRun; 271d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com for (int a = 0; a < 16; ++a) { 272d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int ax = a & 0x03; 273d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int ay = a >> 2; 274d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com for (int b = a ; b < 16; ++b) { 275d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int bx = b & 0x03; 276d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int by = b >> 2; 277d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com for (int c = a ; c < 16; ++c) { 278d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int cx = c & 0x03; 279d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com int cy = c >> 2; 28059823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com bool abcIsATriangle = (bx - ax) * (cy - ay) != (by - ay) * (cx - ax); 28159823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testsRun += dispatchTest4(testSimplify4x4DegeneratesMain, 28259823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com a, b, c, abcIsATriangle); 283d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 28459823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (!gRunTestsInOneThread) SkDebugf("."); 285d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 28659823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com if (!gRunTestsInOneThread) SkDebugf("\n%d", a); 287d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com } 28859823f7f3ba43c7c6bc1fa8c600b093ecb4236aacaryclark@google.com testsRun += waitForCompletion(); 28924bec79d6f3d71ff97b50db72461a3892bd4f6b5caryclark@google.com SkDebugf("%s tests=%d total=%d\n", __FUNCTION__, testsRun - testsStart, testsRun); 290d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com} 291