Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: tests/StrokerTest.cpp

Issue 645573003: rename command line flag to avoid conflict, use very verbose (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #include "PathOpsCubicIntersectionTestData.h" 1 #include "PathOpsCubicIntersectionTestData.h"
2 #include "PathOpsQuadIntersectionTestData.h" 2 #include "PathOpsQuadIntersectionTestData.h"
3 #include "SkCommonFlags.h" 3 #include "SkCommonFlags.h"
4 #include "SkPaint.h" 4 #include "SkPaint.h"
5 #include "SkPath.h" 5 #include "SkPath.h"
6 #include "SkRandom.h" 6 #include "SkRandom.h"
7 #include "SkStrokerPriv.h" 7 #include "SkStrokerPriv.h"
8 #include "SkTime.h" 8 #include "SkTime.h"
9 #include "Test.h" 9 #include "Test.h"
10 10
11 #ifndef SK_BUILD_FOR_IOS 11 DEFINE_bool(timeout, true, "run until alloted time expires");
12 DEFINE_bool2(extendedTest, x, false, "run extended tests regardless of how long takes");
13 #else
14 DECLARE_bool(extendedTest);
15 #endif
16 12
17 #define MS_TEST_DURATION 10 13 #define MS_TEST_DURATION 10
18 14
19 const SkScalar widths[] = {-FLT_MAX, -1, -0.1f, -FLT_EPSILON, 0, FLT_EPSILON, 15 const SkScalar widths[] = {-FLT_MAX, -1, -0.1f, -FLT_EPSILON, 0, FLT_EPSILON,
20 0.0000001f, 0.000001f, 0.00001f, 0.0001f, 0.001f, 0.01f, 16 0.0000001f, 0.000001f, 0.00001f, 0.0001f, 0.001f, 0.01f,
21 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 1, 1.1f, 2, 10, 10e2f, 10e3f, 10e4f, 10e5f , 10e6f, 10e7f, 17 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 1, 1.1f, 2, 10, 10e2f, 10e3f, 10e4f, 10e5f , 10e6f, 10e7f,
22 10e8f, 10e9f, 10e10f, 10e20f, FLT_MAX }; 18 10e8f, 10e9f, 10e10f, 10e20f, FLT_MAX };
23 size_t widths_count = SK_ARRAY_COUNT(widths); 19 size_t widths_count = SK_ARRAY_COUNT(widths);
24 20
25 static void pathTest(const SkPath& path) { 21 static void pathTest(const SkPath& path) {
(...skipping 20 matching lines...) Expand all
46 pathTest(path); 42 pathTest(path);
47 } 43 }
48 44
49 static void cubicSetTest(const SkDCubic* dCubic, size_t count) { 45 static void cubicSetTest(const SkDCubic* dCubic, size_t count) {
50 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION; 46 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION;
51 for (size_t index = 0; index < count; ++index) { 47 for (size_t index = 0; index < count; ++index) {
52 const SkDCubic& d = dCubic[index]; 48 const SkDCubic& d = dCubic[index];
53 SkPoint c[4] = { {(float) d[0].fX, (float) d[0].fY}, {(float) d[ 1].fX, (float) d[1].fY}, 49 SkPoint c[4] = { {(float) d[0].fX, (float) d[0].fY}, {(float) d[ 1].fX, (float) d[1].fY},
54 {(float) d[2].fX, (float) d[2].fY}, {(float) d[3].fX, ( float) d[3].fY} }; 50 {(float) d[2].fX, (float) d[2].fY}, {(float) d[3].fX, ( float) d[3].fY} };
55 cubicTest(c); 51 cubicTest(c);
56 if (!FLAGS_extendedTest && SkTime::GetMSecs() > limit) { 52 if (FLAGS_timeout && SkTime::GetMSecs() > limit) {
57 return; 53 return;
58 } 54 }
59 } 55 }
60 } 56 }
61 57
62 static void cubicPairSetTest(const SkDCubic dCubic[][2], size_t count) { 58 static void cubicPairSetTest(const SkDCubic dCubic[][2], size_t count) {
63 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION; 59 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION;
64 for (size_t index = 0; index < count; ++index) { 60 for (size_t index = 0; index < count; ++index) {
65 for (int pair = 0; pair < 2; ++pair) { 61 for (int pair = 0; pair < 2; ++pair) {
66 const SkDCubic& d = dCubic[index][pair]; 62 const SkDCubic& d = dCubic[index][pair];
67 SkPoint c[4] = { {(float) d[0].fX, (float) d[0].fY}, {(f loat) d[1].fX, (float) d[1].fY}, 63 SkPoint c[4] = { {(float) d[0].fX, (float) d[0].fY}, {(f loat) d[1].fX, (float) d[1].fY},
68 {(float) d[2].fX, (float) d[2].fY}, {(float) d[3].f X, (float) d[3].fY} }; 64 {(float) d[2].fX, (float) d[2].fY}, {(float) d[3].f X, (float) d[3].fY} };
69 cubicTest(c); 65 cubicTest(c);
70 if (!FLAGS_extendedTest && SkTime::GetMSecs() > limit) { 66 if (FLAGS_timeout && SkTime::GetMSecs() > limit) {
71 return; 67 return;
72 } 68 }
73 } 69 }
74 } 70 }
75 } 71 }
76 72
77 static void quadSetTest(const SkDQuad* dQuad, size_t count) { 73 static void quadSetTest(const SkDQuad* dQuad, size_t count) {
78 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION; 74 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION;
79 for (size_t index = 0; index < count; ++index) { 75 for (size_t index = 0; index < count; ++index) {
80 const SkDQuad& d = dQuad[index]; 76 const SkDQuad& d = dQuad[index];
81 SkPoint c[3] = { {(float) d[0].fX, (float) d[0].fY}, {(float) d[ 1].fX, (float) d[1].fY}, 77 SkPoint c[3] = { {(float) d[0].fX, (float) d[0].fY}, {(float) d[ 1].fX, (float) d[1].fY},
82 {(float) d[2].fX, (float) d[2].fY} }; 78 {(float) d[2].fX, (float) d[2].fY} };
83 quadTest(c); 79 quadTest(c);
84 if (!FLAGS_extendedTest && SkTime::GetMSecs() > limit) { 80 if (FLAGS_timeout && SkTime::GetMSecs() > limit) {
85 return; 81 return;
86 } 82 }
87 } 83 }
88 } 84 }
89 85
90 static void quadPairSetTest(const SkDQuad dQuad[][2], size_t count) { 86 static void quadPairSetTest(const SkDQuad dQuad[][2], size_t count) {
91 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION; 87 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION;
92 for (size_t index = 0; index < count; ++index) { 88 for (size_t index = 0; index < count; ++index) {
93 for (int pair = 0; pair < 2; ++pair) { 89 for (int pair = 0; pair < 2; ++pair) {
94 const SkDQuad& d = dQuad[index][pair]; 90 const SkDQuad& d = dQuad[index][pair];
95 SkPoint c[3] = { {(float) d[0].fX, (float) d[0].fY}, {(f loat) d[1].fX, (float) d[1].fY}, 91 SkPoint c[3] = { {(float) d[0].fX, (float) d[0].fY}, {(f loat) d[1].fX, (float) d[1].fY},
96 {(float) d[2].fX, (float) d[2].fY} }; 92 {(float) d[2].fX, (float) d[2].fY} };
97 quadTest(c); 93 quadTest(c);
98 if (!FLAGS_extendedTest && SkTime::GetMSecs() > limit) { 94 if (FLAGS_timeout && SkTime::GetMSecs() > limit) {
99 return; 95 return;
100 } 96 }
101 } 97 }
102 } 98 }
103 } 99 }
104 100
105 DEF_TEST(QuadStrokerSet, reporter) { 101 DEF_TEST(QuadStrokerSet, reporter) {
106 quadSetTest(quadraticLines, quadraticLines_count); 102 quadSetTest(quadraticLines, quadraticLines_count);
107 quadSetTest(quadraticPoints, quadraticPoints_count); 103 quadSetTest(quadraticPoints, quadraticPoints_count);
108 quadSetTest(quadraticModEpsilonLines, quadraticModEpsilonLines_count); 104 quadSetTest(quadraticModEpsilonLines, quadraticModEpsilonLines_count);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 #endif 136 #endif
141 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION; 137 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION;
142 for (int i = 0; i < 1000000; ++i) { 138 for (int i = 0; i < 1000000; ++i) {
143 SkPath path, fill; 139 SkPath path, fill;
144 path.moveTo(unbounded(r), unbounded(r)); 140 path.moveTo(unbounded(r), unbounded(r));
145 path.quadTo(unbounded(r), unbounded(r), unbounded(r), unbounded(r)); 141 path.quadTo(unbounded(r), unbounded(r), unbounded(r), unbounded(r));
146 p.setStrokeWidth(unboundedPos(r)); 142 p.setStrokeWidth(unboundedPos(r));
147 p.getFillPath(path, &fill); 143 p.getFillPath(path, &fill);
148 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 144 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
149 if (best < gMaxRecursion[2]) { 145 if (best < gMaxRecursion[2]) {
150 if (FLAGS_verbose) { 146 if (FLAGS_veryVerbose) {
151 SkDebugf("\n%s quad=%d width=%1.9g\n", __FUNCTION__, gMaxRecursi on[2], 147 SkDebugf("\n%s quad=%d width=%1.9g\n", __FUNCTION__, gMaxRecursi on[2],
152 p.getStrokeWidth()); 148 p.getStrokeWidth());
153 path.dumpHex(); 149 path.dumpHex();
154 SkDebugf("fill:\n"); 150 SkDebugf("fill:\n");
155 fill.dumpHex(); 151 fill.dumpHex();
156 } 152 }
157 best = gMaxRecursion[2]; 153 best = gMaxRecursion[2];
158 } 154 }
159 #endif 155 #endif
160 if (!FLAGS_extendedTest && SkTime::GetMSecs() > limit) { 156 if (FLAGS_timeout && SkTime::GetMSecs() > limit) {
161 return; 157 return;
162 } 158 }
163 } 159 }
164 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 160 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
165 if (FLAGS_verbose) { 161 if (FLAGS_veryVerbose) {
166 SkDebugf("\n%s max quad=%d\n", __FUNCTION__, best); 162 SkDebugf("\n%s max quad=%d\n", __FUNCTION__, best);
167 } 163 }
168 #endif 164 #endif
169 } 165 }
170 166
171 DEF_TEST(CubicStrokerUnbounded, reporter) { 167 DEF_TEST(CubicStrokerUnbounded, reporter) {
172 SkLCGRandom r; 168 SkLCGRandom r;
173 SkPaint p; 169 SkPaint p;
174 p.setStyle(SkPaint::kStroke_Style); 170 p.setStyle(SkPaint::kStroke_Style);
175 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 171 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
176 int bestTan = 0; 172 int bestTan = 0;
177 int bestCubic = 0; 173 int bestCubic = 0;
178 sk_bzero(gMaxRecursion, sizeof(gMaxRecursion[0]) * 3); 174 sk_bzero(gMaxRecursion, sizeof(gMaxRecursion[0]) * 3);
179 #endif 175 #endif
180 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION; 176 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION;
181 for (int i = 0; i < 1000000; ++i) { 177 for (int i = 0; i < 1000000; ++i) {
182 SkPath path, fill; 178 SkPath path, fill;
183 path.moveTo(unbounded(r), unbounded(r)); 179 path.moveTo(unbounded(r), unbounded(r));
184 path.cubicTo(unbounded(r), unbounded(r), unbounded(r), unbounded(r), 180 path.cubicTo(unbounded(r), unbounded(r), unbounded(r), unbounded(r),
185 unbounded(r), unbounded(r)); 181 unbounded(r), unbounded(r));
186 p.setStrokeWidth(unboundedPos(r)); 182 p.setStrokeWidth(unboundedPos(r));
187 p.getFillPath(path, &fill); 183 p.getFillPath(path, &fill);
188 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 184 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
189 if (bestTan < gMaxRecursion[0] || bestCubic < gMaxRecursion[1]) { 185 if (bestTan < gMaxRecursion[0] || bestCubic < gMaxRecursion[1]) {
190 if (FLAGS_verbose) { 186 if (FLAGS_veryVerbose) {
191 SkDebugf("\n%s tan=%d cubic=%d width=%1.9g\n", __FUNCTION__, gMa xRecursion[0], 187 SkDebugf("\n%s tan=%d cubic=%d width=%1.9g\n", __FUNCTION__, gMa xRecursion[0],
192 gMaxRecursion[1], p.getStrokeWidth()); 188 gMaxRecursion[1], p.getStrokeWidth());
193 path.dumpHex(); 189 path.dumpHex();
194 SkDebugf("fill:\n"); 190 SkDebugf("fill:\n");
195 fill.dumpHex(); 191 fill.dumpHex();
196 } 192 }
197 bestTan = SkTMax(bestTan, gMaxRecursion[0]); 193 bestTan = SkTMax(bestTan, gMaxRecursion[0]);
198 bestCubic = SkTMax(bestCubic, gMaxRecursion[1]); 194 bestCubic = SkTMax(bestCubic, gMaxRecursion[1]);
199 } 195 }
200 #endif 196 #endif
201 if (!FLAGS_extendedTest && SkTime::GetMSecs() > limit) { 197 if (FLAGS_timeout && SkTime::GetMSecs() > limit) {
202 return; 198 return;
203 } 199 }
204 } 200 }
205 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 201 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
206 if (FLAGS_verbose) { 202 if (FLAGS_veryVerbose) {
207 SkDebugf("\n%s max tan=%d cubic=%d\n", __FUNCTION__, bestTan, bestCubic) ; 203 SkDebugf("\n%s max tan=%d cubic=%d\n", __FUNCTION__, bestTan, bestCubic) ;
208 } 204 }
209 #endif 205 #endif
210 } 206 }
211 207
212 DEF_TEST(QuadStrokerConstrained, reporter) { 208 DEF_TEST(QuadStrokerConstrained, reporter) {
213 SkLCGRandom r; 209 SkLCGRandom r;
214 SkPaint p; 210 SkPaint p;
215 p.setStyle(SkPaint::kStroke_Style); 211 p.setStyle(SkPaint::kStroke_Style);
216 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 212 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
(...skipping 15 matching lines...) Expand all
232 quad[2].fX = r.nextRangeF(0, 500); 228 quad[2].fX = r.nextRangeF(0, 500);
233 quad[2].fY = r.nextRangeF(0, 500); 229 quad[2].fY = r.nextRangeF(0, 500);
234 } while (quad[0].distanceToSqd(quad[2]) < halfSquared 230 } while (quad[0].distanceToSqd(quad[2]) < halfSquared
235 || quad[1].distanceToSqd(quad[2]) < halfSquared); 231 || quad[1].distanceToSqd(quad[2]) < halfSquared);
236 path.moveTo(quad[0].fX, quad[0].fY); 232 path.moveTo(quad[0].fX, quad[0].fY);
237 path.quadTo(quad[1].fX, quad[1].fY, quad[2].fX, quad[2].fY); 233 path.quadTo(quad[1].fX, quad[1].fY, quad[2].fX, quad[2].fY);
238 p.setStrokeWidth(r.nextRangeF(0, 500)); 234 p.setStrokeWidth(r.nextRangeF(0, 500));
239 p.getFillPath(path, &fill); 235 p.getFillPath(path, &fill);
240 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 236 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
241 if (best < gMaxRecursion[2]) { 237 if (best < gMaxRecursion[2]) {
242 if (FLAGS_verbose) { 238 if (FLAGS_veryVerbose) {
243 SkDebugf("\n%s quad=%d width=%1.9g\n", __FUNCTION__, gMaxRecursi on[2], 239 SkDebugf("\n%s quad=%d width=%1.9g\n", __FUNCTION__, gMaxRecursi on[2],
244 p.getStrokeWidth()); 240 p.getStrokeWidth());
245 path.dumpHex(); 241 path.dumpHex();
246 SkDebugf("fill:\n"); 242 SkDebugf("fill:\n");
247 fill.dumpHex(); 243 fill.dumpHex();
248 } 244 }
249 best = gMaxRecursion[2]; 245 best = gMaxRecursion[2];
250 } 246 }
251 #endif 247 #endif
252 if (!FLAGS_extendedTest && SkTime::GetMSecs() > limit) { 248 if (FLAGS_timeout && SkTime::GetMSecs() > limit) {
253 return; 249 return;
254 } 250 }
255 } 251 }
256 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 252 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
257 if (FLAGS_verbose) { 253 if (FLAGS_veryVerbose) {
258 SkDebugf("\n%s max quad=%d\n", __FUNCTION__, best); 254 SkDebugf("\n%s max quad=%d\n", __FUNCTION__, best);
259 } 255 }
260 #endif 256 #endif
261 } 257 }
262 258
263 DEF_TEST(CubicStrokerConstrained, reporter) { 259 DEF_TEST(CubicStrokerConstrained, reporter) {
264 SkLCGRandom r; 260 SkLCGRandom r;
265 SkPaint p; 261 SkPaint p;
266 p.setStyle(SkPaint::kStroke_Style); 262 p.setStyle(SkPaint::kStroke_Style);
267 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 263 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
(...skipping 22 matching lines...) Expand all
290 cubic[3].fY = r.nextRangeF(0, 500); 286 cubic[3].fY = r.nextRangeF(0, 500);
291 } while ( cubic[0].distanceToSqd(cubic[3]) < halfSquared 287 } while ( cubic[0].distanceToSqd(cubic[3]) < halfSquared
292 || cubic[1].distanceToSqd(cubic[3]) < halfSquared 288 || cubic[1].distanceToSqd(cubic[3]) < halfSquared
293 || cubic[2].distanceToSqd(cubic[3]) < halfSquared); 289 || cubic[2].distanceToSqd(cubic[3]) < halfSquared);
294 path.moveTo(cubic[0].fX, cubic[0].fY); 290 path.moveTo(cubic[0].fX, cubic[0].fY);
295 path.cubicTo(cubic[1].fX, cubic[1].fY, cubic[2].fX, cubic[2].fY, cubic[3 ].fX, cubic[3].fY); 291 path.cubicTo(cubic[1].fX, cubic[1].fY, cubic[2].fX, cubic[2].fY, cubic[3 ].fX, cubic[3].fY);
296 p.setStrokeWidth(r.nextRangeF(0, 500)); 292 p.setStrokeWidth(r.nextRangeF(0, 500));
297 p.getFillPath(path, &fill); 293 p.getFillPath(path, &fill);
298 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 294 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
299 if (bestTan < gMaxRecursion[0] || bestCubic < gMaxRecursion[1]) { 295 if (bestTan < gMaxRecursion[0] || bestCubic < gMaxRecursion[1]) {
300 if (FLAGS_verbose) { 296 if (FLAGS_veryVerbose) {
301 SkDebugf("\n%s tan=%d cubic=%d width=%1.9g\n", __FUNCTION__, gMa xRecursion[0], 297 SkDebugf("\n%s tan=%d cubic=%d width=%1.9g\n", __FUNCTION__, gMa xRecursion[0],
302 gMaxRecursion[1], p.getStrokeWidth()); 298 gMaxRecursion[1], p.getStrokeWidth());
303 path.dumpHex(); 299 path.dumpHex();
304 SkDebugf("fill:\n"); 300 SkDebugf("fill:\n");
305 fill.dumpHex(); 301 fill.dumpHex();
306 } 302 }
307 bestTan = SkTMax(bestTan, gMaxRecursion[0]); 303 bestTan = SkTMax(bestTan, gMaxRecursion[0]);
308 bestCubic = SkTMax(bestCubic, gMaxRecursion[1]); 304 bestCubic = SkTMax(bestCubic, gMaxRecursion[1]);
309 } 305 }
310 #endif 306 #endif
311 if (!FLAGS_extendedTest && SkTime::GetMSecs() > limit) { 307 if (FLAGS_timeout && SkTime::GetMSecs() > limit) {
312 return; 308 return;
313 } 309 }
314 } 310 }
315 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 311 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
316 if (FLAGS_verbose) { 312 if (FLAGS_veryVerbose) {
317 SkDebugf("\n%s max tan=%d cubic=%d\n", __FUNCTION__, bestTan, bestCubic) ; 313 SkDebugf("\n%s max tan=%d cubic=%d\n", __FUNCTION__, bestTan, bestCubic) ;
318 } 314 }
319 #endif 315 #endif
320 } 316 }
321 317
322 DEF_TEST(QuadStrokerRange, reporter) { 318 DEF_TEST(QuadStrokerRange, reporter) {
323 SkLCGRandom r; 319 SkLCGRandom r;
324 SkPaint p; 320 SkPaint p;
325 p.setStyle(SkPaint::kStroke_Style); 321 p.setStyle(SkPaint::kStroke_Style);
326 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 322 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
327 int best = 0; 323 int best = 0;
328 sk_bzero(gMaxRecursion, sizeof(gMaxRecursion[0]) * 3); 324 sk_bzero(gMaxRecursion, sizeof(gMaxRecursion[0]) * 3);
329 #endif 325 #endif
330 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION; 326 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION;
331 for (int i = 0; i < 1000000; ++i) { 327 for (int i = 0; i < 1000000; ++i) {
332 SkPath path, fill; 328 SkPath path, fill;
333 SkPoint quad[3]; 329 SkPoint quad[3];
334 quad[0].fX = r.nextRangeF(0, 500); 330 quad[0].fX = r.nextRangeF(0, 500);
335 quad[0].fY = r.nextRangeF(0, 500); 331 quad[0].fY = r.nextRangeF(0, 500);
336 quad[1].fX = r.nextRangeF(0, 500); 332 quad[1].fX = r.nextRangeF(0, 500);
337 quad[1].fY = r.nextRangeF(0, 500); 333 quad[1].fY = r.nextRangeF(0, 500);
338 quad[2].fX = r.nextRangeF(0, 500); 334 quad[2].fX = r.nextRangeF(0, 500);
339 quad[2].fY = r.nextRangeF(0, 500); 335 quad[2].fY = r.nextRangeF(0, 500);
340 path.moveTo(quad[0].fX, quad[0].fY); 336 path.moveTo(quad[0].fX, quad[0].fY);
341 path.quadTo(quad[1].fX, quad[1].fY, quad[2].fX, quad[2].fY); 337 path.quadTo(quad[1].fX, quad[1].fY, quad[2].fX, quad[2].fY);
342 p.setStrokeWidth(r.nextRangeF(0, 500)); 338 p.setStrokeWidth(r.nextRangeF(0, 500));
343 p.getFillPath(path, &fill); 339 p.getFillPath(path, &fill);
344 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 340 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
345 if (best < gMaxRecursion[2]) { 341 if (best < gMaxRecursion[2]) {
346 if (FLAGS_verbose) { 342 if (FLAGS_veryVerbose) {
347 SkDebugf("\n%s quad=%d width=%1.9g\n", __FUNCTION__, gMaxRecursi on[2], 343 SkDebugf("\n%s quad=%d width=%1.9g\n", __FUNCTION__, gMaxRecursi on[2],
348 p.getStrokeWidth()); 344 p.getStrokeWidth());
349 path.dumpHex(); 345 path.dumpHex();
350 SkDebugf("fill:\n"); 346 SkDebugf("fill:\n");
351 fill.dumpHex(); 347 fill.dumpHex();
352 } 348 }
353 best = gMaxRecursion[2]; 349 best = gMaxRecursion[2];
354 } 350 }
355 #endif 351 #endif
356 if (!FLAGS_extendedTest && SkTime::GetMSecs() > limit) { 352 if (FLAGS_timeout && SkTime::GetMSecs() > limit) {
357 return; 353 return;
358 } 354 }
359 } 355 }
360 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 356 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
361 if (FLAGS_verbose) { 357 if (FLAGS_verbose) {
362 SkDebugf("\n%s max quad=%d\n", __FUNCTION__, best); 358 SkDebugf("\n%s max quad=%d\n", __FUNCTION__, best);
363 } 359 }
364 #endif 360 #endif
365 } 361 }
366 362
367 DEF_TEST(CubicStrokerRange, reporter) { 363 DEF_TEST(CubicStrokerRange, reporter) {
368 SkLCGRandom r; 364 SkLCGRandom r;
369 SkPaint p; 365 SkPaint p;
370 p.setStyle(SkPaint::kStroke_Style); 366 p.setStyle(SkPaint::kStroke_Style);
371 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 367 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
372 int best[2] = { 0 }; 368 int best[2] = { 0 };
373 sk_bzero(gMaxRecursion, sizeof(gMaxRecursion[0]) * 3); 369 sk_bzero(gMaxRecursion, sizeof(gMaxRecursion[0]) * 3);
374 #endif 370 #endif
375 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION; 371 SkMSec limit = SkTime::GetMSecs() + MS_TEST_DURATION;
376 for (int i = 0; i < 1000000; ++i) { 372 for (int i = 0; i < 1000000; ++i) {
377 SkPath path, fill; 373 SkPath path, fill;
378 path.moveTo(r.nextRangeF(0, 500), r.nextRangeF(0, 500)); 374 path.moveTo(r.nextRangeF(0, 500), r.nextRangeF(0, 500));
379 path.cubicTo(r.nextRangeF(0, 500), r.nextRangeF(0, 500), r.nextRangeF(0, 500), 375 path.cubicTo(r.nextRangeF(0, 500), r.nextRangeF(0, 500), r.nextRangeF(0, 500),
380 r.nextRangeF(0, 500), r.nextRangeF(0, 500), r.nextRangeF(0, 500) ); 376 r.nextRangeF(0, 500), r.nextRangeF(0, 500), r.nextRangeF(0, 500) );
381 p.setStrokeWidth(r.nextRangeF(0, 100)); 377 p.setStrokeWidth(r.nextRangeF(0, 100));
382 p.getFillPath(path, &fill); 378 p.getFillPath(path, &fill);
383 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 379 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
384 if (best[0] < gMaxRecursion[0] || best[1] < gMaxRecursion[1]) { 380 if (best[0] < gMaxRecursion[0] || best[1] < gMaxRecursion[1]) {
385 if (FLAGS_verbose) { 381 if (FLAGS_veryVerbose) {
386 SkDebugf("\n%s tan=%d cubic=%d width=%1.9g\n", __FUNCTION__, gMa xRecursion[0], 382 SkDebugf("\n%s tan=%d cubic=%d width=%1.9g\n", __FUNCTION__, gMa xRecursion[0],
387 gMaxRecursion[1], p.getStrokeWidth()); 383 gMaxRecursion[1], p.getStrokeWidth());
388 path.dumpHex(); 384 path.dumpHex();
389 SkDebugf("fill:\n"); 385 SkDebugf("fill:\n");
390 fill.dumpHex(); 386 fill.dumpHex();
391 } 387 }
392 best[0] = SkTMax(best[0], gMaxRecursion[0]); 388 best[0] = SkTMax(best[0], gMaxRecursion[0]);
393 best[1] = SkTMax(best[1], gMaxRecursion[1]); 389 best[1] = SkTMax(best[1], gMaxRecursion[1]);
394 } 390 }
395 #endif 391 #endif
396 if (!FLAGS_extendedTest && SkTime::GetMSecs() > limit) { 392 if (FLAGS_timeout && SkTime::GetMSecs() > limit) {
397 return; 393 return;
398 } 394 }
399 } 395 }
400 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 396 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
401 if (FLAGS_verbose) { 397 if (FLAGS_veryVerbose) {
402 SkDebugf("\n%s max tan=%d cubic=%d\n", __FUNCTION__, best[0], best[1]); 398 SkDebugf("\n%s max tan=%d cubic=%d\n", __FUNCTION__, best[0], best[1]);
403 } 399 }
404 #endif 400 #endif
405 } 401 }
406 402
407 403
408 DEF_TEST(QuadStrokerOneOff, reporter) { 404 DEF_TEST(QuadStrokerOneOff, reporter) {
409 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 405 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
410 sk_bzero(gMaxRecursion, sizeof(gMaxRecursion[0]) * 3); 406 sk_bzero(gMaxRecursion, sizeof(gMaxRecursion[0]) * 3);
411 #endif 407 #endif
412 SkPaint p; 408 SkPaint p;
413 p.setStyle(SkPaint::kStroke_Style); 409 p.setStyle(SkPaint::kStroke_Style);
414 p.setStrokeWidth(SkDoubleToScalar(164.683548)); 410 p.setStrokeWidth(SkDoubleToScalar(164.683548));
415 411
416 SkPath path, fill; 412 SkPath path, fill;
417 path.moveTo(SkBits2Float(0x43c99223), SkBits2Float(0x42b7417e)); 413 path.moveTo(SkBits2Float(0x43c99223), SkBits2Float(0x42b7417e));
418 path.quadTo(SkBits2Float(0x4285d839), SkBits2Float(0x43ed6645), SkBits2Float(0x4 3c941c8), SkBits2Float(0x42b3ace3)); 414 path.quadTo(SkBits2Float(0x4285d839), SkBits2Float(0x43ed6645), SkBits2Float(0x4 3c941c8), SkBits2Float(0x42b3ace3));
419 p.getFillPath(path, &fill); 415 p.getFillPath(path, &fill);
420 if (FLAGS_verbose) { 416 if (FLAGS_veryVerbose) {
421 SkDebugf("\n%s path\n", __FUNCTION__); 417 SkDebugf("\n%s path\n", __FUNCTION__);
422 path.dump(); 418 path.dump();
423 SkDebugf("fill:\n"); 419 SkDebugf("fill:\n");
424 fill.dump(); 420 fill.dump();
425 } 421 }
426 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 422 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
427 if (FLAGS_verbose) { 423 if (FLAGS_veryVerbose) {
428 SkDebugf("max quad=%d\n", gMaxRecursion[2]); 424 SkDebugf("max quad=%d\n", gMaxRecursion[2]);
429 } 425 }
430 #endif 426 #endif
431 } 427 }
432 428
433 DEF_TEST(CubicStrokerOneOff, reporter) { 429 DEF_TEST(CubicStrokerOneOff, reporter) {
434 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 430 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
435 sk_bzero(gMaxRecursion, sizeof(gMaxRecursion[0]) * 3); 431 sk_bzero(gMaxRecursion, sizeof(gMaxRecursion[0]) * 3);
436 #endif 432 #endif
437 SkPaint p; 433 SkPaint p;
438 p.setStyle(SkPaint::kStroke_Style); 434 p.setStyle(SkPaint::kStroke_Style);
439 p.setStrokeWidth(SkDoubleToScalar(42.835968)); 435 p.setStrokeWidth(SkDoubleToScalar(42.835968));
440 436
441 SkPath path, fill; 437 SkPath path, fill;
442 path.moveTo(SkBits2Float(0x433f5370), SkBits2Float(0x43d1f4b3)); 438 path.moveTo(SkBits2Float(0x433f5370), SkBits2Float(0x43d1f4b3));
443 path.cubicTo(SkBits2Float(0x4331cb76), SkBits2Float(0x43ea3340), SkBits2Float(0x 4388f498), SkBits2Float(0x42f7f08d), SkBits2Float(0x43f1cd32), SkBits2Float(0x42 802ec1)); 439 path.cubicTo(SkBits2Float(0x4331cb76), SkBits2Float(0x43ea3340), SkBits2Float(0x 4388f498), SkBits2Float(0x42f7f08d), SkBits2Float(0x43f1cd32), SkBits2Float(0x42 802ec1));
444 p.getFillPath(path, &fill); 440 p.getFillPath(path, &fill);
445 if (FLAGS_verbose) { 441 if (FLAGS_veryVerbose) {
446 SkDebugf("\n%s path\n", __FUNCTION__); 442 SkDebugf("\n%s path\n", __FUNCTION__);
447 path.dump(); 443 path.dump();
448 SkDebugf("fill:\n"); 444 SkDebugf("fill:\n");
449 fill.dump(); 445 fill.dump();
450 } 446 }
451 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION 447 #if defined(SK_DEBUG) && QUAD_STROKE_APPROXIMATION
452 if (FLAGS_verbose) { 448 if (FLAGS_veryVerbose) {
453 SkDebugf("max tan=%d cubic=%d\n", gMaxRecursion[0], gMaxRecursion[1]); 449 SkDebugf("max tan=%d cubic=%d\n", gMaxRecursion[0], gMaxRecursion[1]);
454 } 450 }
455 #endif 451 #endif
456 } 452 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698