OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2012 Google Inc. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license that can be | |
5 * found in the LICENSE file. | |
6 */ | |
7 #include "EdgeWalker_Test.h" | |
8 #include "Intersection_Tests.h" | |
9 #include "ShapeOps.h" | |
10 | |
11 // four rects, of four sizes | |
12 // for 3 smaller sizes, tall, wide | |
13 // top upper mid lower bottom aligned (3 bits, 5 values) | |
14 // same with x (3 bits, 5 values) | |
15 // not included, square, tall, wide (2 bits) | |
16 // cw or ccw (1 bit) | |
17 | |
18 static void* testShapeOps4x4RectsMain(void* data) | |
19 { | |
20 SkASSERT(data); | |
21 State4& state = *(State4*) data; | |
22 char pathStr[1024]; // gdb: set print elements 400 | |
23 bzero(pathStr, sizeof(pathStr)); | |
24 do { | |
25 for (int a = 0 ; a < 6; ++a) { | |
26 for (int b = a + 1 ; b < 7; ++b) { | |
27 for (int c = 0 ; c < 6; ++c) { | |
28 for (int d = c + 1 ; d < 7; ++d) { | |
29 for (int e = SkPath::kWinding_FillType ; e <= SkPath::kEvenOdd_FillType;
++e) { | |
30 for (int f = SkPath::kWinding_FillType ; f <= SkPath::kEvenOdd_FillType;
++f) { | |
31 SkPath pathA, pathB; | |
32 char* str = pathStr; | |
33 pathA.setFillType((SkPath::FillType) e); | |
34 str += sprintf(str, " path.setFillType(SkPath::k%s_FillType);\n", | |
35 e == SkPath::kWinding_FillType ? "Winding" : e == SkPath::kE
venOdd_FillType | |
36 ? "EvenOdd" : "?UNDEFINED"); | |
37 pathA.addRect(state.a, state.a, state.b, state.b, SkPath::kCW_Direct
ion); | |
38 str += sprintf(str, " path.addRect(%d, %d, %d, %d," | |
39 " SkPath::kCW_Direction);\n", state.a, state.a, state.b, sta
te.b); | |
40 pathA.addRect(state.c, state.c, state.d, state.d, SkPath::kCW_Direct
ion); | |
41 str += sprintf(str, " path.addRect(%d, %d, %d, %d," | |
42 " SkPath::kCW_Direction);\n", state.c, state.c, state.d, sta
te.d); | |
43 pathA.close(); | |
44 pathB.setFillType((SkPath::FillType) f); | |
45 str += sprintf(str, " pathB.setFillType(SkPath::k%s_FillType);\n"
, | |
46 f == SkPath::kWinding_FillType ? "Winding" : f == SkPath::kE
venOdd_FillType | |
47 ? "EvenOdd" : "?UNDEFINED"); | |
48 pathB.addRect(a, a, b, b, SkPath::kCW_Direction); | |
49 str += sprintf(str, " pathB.addRect(%d, %d, %d, %d," | |
50 " SkPath::kCW_Direction);\n", a, a, b, b); | |
51 pathB.addRect(c, c, d, d, SkPath::kCW_Direction); | |
52 str += sprintf(str, " pathB.addRect(%d, %d, %d, %d," | |
53 " SkPath::kCW_Direction);\n", c, c, d, d); | |
54 pathB.close(); | |
55 for (int op = 0 ; op < kShapeOp_Count; ++op) { | |
56 outputProgress(state, pathStr, (ShapeOp) op); | |
57 testShapeOp(pathA, pathB, (ShapeOp) op); | |
58 state.testsRun++; | |
59 } | |
60 } | |
61 } | |
62 } | |
63 } | |
64 } | |
65 } | |
66 } while (runNextTestSet(state)); | |
67 return NULL; | |
68 } | |
69 | |
70 void ShapeOps4x4RectsThreaded_Test(int& testsRun) | |
71 { | |
72 SkDebugf("%s\n", __FUNCTION__); | |
73 #ifdef SK_DEBUG | |
74 gDebugMaxWindSum = 4; | |
75 gDebugMaxWindValue = 4; | |
76 #endif | |
77 const char testLineStr[] = "testOp"; | |
78 initializeTests(testLineStr, sizeof(testLineStr)); | |
79 int testsStart = testsRun; | |
80 for (int a = 0; a < 6; ++a) { // outermost | |
81 for (int b = a + 1; b < 7; ++b) { | |
82 for (int c = 0 ; c < 6; ++c) { | |
83 for (int d = c + 1; d < 7; ++d) { | |
84 testsRun += dispatchTest4(testShapeOps4x4RectsMain, a, b, c,
d); | |
85 } | |
86 if (!gRunTestsInOneThread) SkDebugf("."); | |
87 } | |
88 if (!gRunTestsInOneThread) SkDebugf("%d", b); | |
89 } | |
90 if (!gRunTestsInOneThread) SkDebugf("\n%d", a); | |
91 } | |
92 testsRun += waitForCompletion(); | |
93 SkDebugf("%s tests=%d total=%d\n", __FUNCTION__, testsRun - testsStart, test
sRun); | |
94 } | |
OLD | NEW |