PathOpsSimplifyTrianglesThreadedTest.cpp revision 818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300e
1818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com/* 2818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com * Copyright 2012 Google Inc. 3818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com * 4818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com * Use of this source code is governed by a BSD-style license that can be 5818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com * found in the LICENSE file. 6818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com */ 7818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com#include "PathOpsExtendedTest.h" 8818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com 9818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.comstatic THREAD_TYPE testSimplifyTrianglesMain(void* data) { 10818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com SkASSERT(data); 11818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com State4& state = *(State4*) data; 12818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com char pathStr[1024]; 13818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com sk_bzero(pathStr, sizeof(pathStr)); 14818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com do { 15818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int ax = state.a & 0x03; 16818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int ay = state.a >> 2; 17818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int bx = state.b & 0x03; 18818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int by = state.b >> 2; 19818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int cx = state.c & 0x03; 20818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int cy = state.c >> 2; 21818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com for (int d = 0; d < 15; ++d) { 22818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int dx = d & 0x03; 23818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int dy = d >> 2; 24818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com for (int e = d + 1; e < 16; ++e) { 25818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int ex = e & 0x03; 26818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int ey = e >> 2; 27818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com for (int f = d + 1; f < 16; ++f) { 28818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com if (e == f) { 29818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com continue; 30818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 31818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int fx = f & 0x03; 32818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int fy = f >> 2; 33818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com if ((ex - dx) * (fy - dy) == (ey - dy) * (fx - dx)) { 34818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com continue; 35818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 36818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com SkPath path, out; 37818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com path.setFillType(SkPath::kWinding_FillType); 38818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com path.moveTo(SkIntToScalar(ax), SkIntToScalar(ay)); 39818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com path.lineTo(SkIntToScalar(bx), SkIntToScalar(by)); 40818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com path.lineTo(SkIntToScalar(cx), SkIntToScalar(cy)); 41818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com path.close(); 42818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com path.moveTo(SkIntToScalar(dx), SkIntToScalar(dy)); 43818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com path.lineTo(SkIntToScalar(ex), SkIntToScalar(ey)); 44818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com path.lineTo(SkIntToScalar(fx), SkIntToScalar(fy)); 45818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com path.close(); 46818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com if (1) { 47818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com char* str = pathStr; 48818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com str += sprintf(str, " path.moveTo(%d, %d);\n", ax, ay); 49818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", bx, by); 50818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", cx, cy); 51818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com str += sprintf(str, " path.close();\n"); 52818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com str += sprintf(str, " path.moveTo(%d, %d);\n", dx, dy); 53818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", ex, ey); 54818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com str += sprintf(str, " path.lineTo(%d, %d);\n", fx, fy); 55818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com str += sprintf(str, " path.close();\n"); 56818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 57818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com outputProgress(state, pathStr, SkPath::kWinding_FillType); 58818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com testSimplify(path, false, out, state, pathStr); 59818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com state.testsRun++; 60818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com path.setFillType(SkPath::kEvenOdd_FillType); 61818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com outputProgress(state, pathStr, SkPath::kEvenOdd_FillType); 62818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com testSimplify(path, true, out, state, pathStr); 63818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com state.testsRun++; 64818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 65818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 66818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 67818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } while (runNextTestSet(state)); 68818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com THREAD_RETURN 69818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com} 70818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com 71818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.comstatic void TestSimplifyTrianglesThreaded(skiatest::Reporter* reporter) { 72818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int testsRun = 0; 73818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com if (gShowTestProgress) SkDebugf("%s\n", __FUNCTION__); 74818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com#ifdef SK_DEBUG 75818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com gDebugMaxWindSum = 2; 76818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com gDebugMaxWindValue = 2; 77818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com#endif 78818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com const char testStr[] = "testTriangles"; 79818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com initializeTests(reporter, testStr, sizeof(testStr)); 80818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com for (int a = 0; a < 15; ++a) { 81818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int ax = a & 0x03; 82818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int ay = a >> 2; 83818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com for (int b = a + 1; b < 16; ++b) { 84818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int bx = b & 0x03; 85818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int by = b >> 2; 86818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com for (int c = a + 1; c < 16; ++c) { 87818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com if (b == c) { 88818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com continue; 89818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 90818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int cx = c & 0x03; 91818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com int cy = c >> 2; 92818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com if ((bx - ax) * (cy - ay) == (by - ay) * (cx - ax)) { 93818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com continue; 94818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 95818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com testsRun += dispatchTest4(testSimplifyTrianglesMain, a, b, c, 0); 96818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 97818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com if (!gAllowExtendedTest) goto finish; 98818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com if (gShowTestProgress) SkDebugf("."); 99818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 100818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com if (gShowTestProgress) SkDebugf("\n%d", a); 101818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com } 102818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.comfinish: 103818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com testsRun += waitForCompletion(); 104818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com if (gShowTestProgress) SkDebugf("%s tests=%d\n", __FUNCTION__, testsRun); 105818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com} 106818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com 107818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com#include "TestClassDef.h" 108818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.comDEFINE_TESTCLASS("SimplifyTrianglesThreaded", SimplifyTrianglesThreadedTestClass, \ 109818b0cc1b8b0c4acc565e8e2cb8b0b61aa5a300ecaryclark@google.com TestSimplifyTrianglesThreaded) 110