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

Side by Side Diff: tests/PathOpsExtendedTest.cpp

Issue 2221153005: add flaky test option (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 4 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 | « tests/PathOpsExtendedTest.h ('k') | tests/PathOpsOpTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "PathOpsExtendedTest.h" 8 #include "PathOpsExtendedTest.h"
9 #include "PathOpsThreadedCommon.h" 9 #include "PathOpsThreadedCommon.h"
10 #include "SkBitmap.h" 10 #include "SkBitmap.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 }; 51 };
52 52
53 static const char* opSuffixes[] = { 53 static const char* opSuffixes[] = {
54 "d", 54 "d",
55 "i", 55 "i",
56 "u", 56 "u",
57 "o", 57 "o",
58 "r", 58 "r",
59 }; 59 };
60 60
61 enum class ExpectSuccess {
62 kNo,
63 kYes,
64 kFlaky
65 };
66
67 enum class SkipAssert {
68 kNo,
69 kYes
70 };
71
72 enum class ExpectMatch {
73 kNo,
74 kYes,
75 kFlaky
76 };
77
61 #if DEBUG_SHOW_TEST_NAME 78 #if DEBUG_SHOW_TEST_NAME
62 static void showPathData(const SkPath& path) { 79 static void showPathData(const SkPath& path) {
63 SkPath::RawIter iter(path); 80 SkPath::RawIter iter(path);
64 uint8_t verb; 81 uint8_t verb;
65 SkPoint pts[4]; 82 SkPoint pts[4];
66 SkPoint firstPt = {0, 0}, lastPt = {0, 0}; 83 SkPoint firstPt = {0, 0}, lastPt = {0, 0};
67 bool firstPtSet = false; 84 bool firstPtSet = false;
68 bool lastPtSet = true; 85 bool lastPtSet = true;
69 while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { 86 while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
70 switch (verb) { 87 switch (verb) {
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 SkDebugf(" testPathOp(reporter, path, pathB, %s, filename);\n", opStrs[sh apeOp]); 343 SkDebugf(" testPathOp(reporter, path, pathB, %s, filename);\n", opStrs[sh apeOp]);
327 SkDebugf("}\n"); 344 SkDebugf("}\n");
328 drawAsciiPaths(scaledOne, scaledTwo, true); 345 drawAsciiPaths(scaledOne, scaledTwo, true);
329 } 346 }
330 347
331 SK_DECLARE_STATIC_MUTEX(compareDebugOut3); 348 SK_DECLARE_STATIC_MUTEX(compareDebugOut3);
332 349
333 static int comparePaths(skiatest::Reporter* reporter, const char* testName, cons t SkPath& one, 350 static int comparePaths(skiatest::Reporter* reporter, const char* testName, cons t SkPath& one,
334 const SkPath& scaledOne, const SkPath& two, const SkPath& scaledTwo, SkB itmap& bitmap, 351 const SkPath& scaledOne, const SkPath& two, const SkPath& scaledTwo, SkB itmap& bitmap,
335 const SkPath& a, const SkPath& b, const SkPathOp shapeOp, const SkMatrix & scale, 352 const SkPath& a, const SkPath& b, const SkPathOp shapeOp, const SkMatrix & scale,
336 bool expectSuccess) { 353 ExpectMatch expectMatch) {
337 int errors2x2; 354 int errors2x2;
338 const int MAX_ERRORS = 8; 355 const int MAX_ERRORS = 8;
339 (void) pathsDrawTheSame(bitmap, scaledOne, scaledTwo, errors2x2); 356 (void) pathsDrawTheSame(bitmap, scaledOne, scaledTwo, errors2x2);
340 if (!expectSuccess) { 357 if (ExpectMatch::kNo == expectMatch) {
341 if (errors2x2 < MAX_ERRORS) { 358 if (errors2x2 < MAX_ERRORS) {
342 REPORTER_ASSERT(reporter, 0); 359 REPORTER_ASSERT(reporter, 0);
343 } 360 }
344 return 0; 361 return 0;
345 } 362 }
346 if (errors2x2 == 0) { 363 if (errors2x2 == 0) {
347 return 0; 364 return 0;
348 } 365 }
349 if (errors2x2 >= MAX_ERRORS) { 366 if (ExpectMatch::kYes == expectMatch && errors2x2 >= MAX_ERRORS) {
350 SkAutoMutexAcquire autoM(compareDebugOut3); 367 SkAutoMutexAcquire autoM(compareDebugOut3);
351 showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shapeOp, scale); 368 showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shapeOp, scale);
352 SkDebugf("\n/*"); 369 SkDebugf("\n/*");
353 REPORTER_ASSERT(reporter, 0); 370 REPORTER_ASSERT(reporter, 0);
354 SkDebugf(" */\n"); 371 SkDebugf(" */\n");
355 } 372 }
356 return errors2x2 >= MAX_ERRORS ? errors2x2 : 0; 373 return errors2x2 >= MAX_ERRORS ? errors2x2 : 0;
357 } 374 }
358 375
359 // Default values for when reporter->verbose() is false. 376 // Default values for when reporter->verbose() is false.
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 } 462 }
446 const char testFunction[] = "testSimplify(reporter, path);"; 463 const char testFunction[] = "testSimplify(reporter, path);";
447 outputToStream(pathStr, pathPrefix, nameSuffix, testFunction, false, str eam); 464 outputToStream(pathStr, pathPrefix, nameSuffix, testFunction, false, str eam);
448 SkDebugf("%s", temp); 465 SkDebugf("%s", temp);
449 REPORTER_ASSERT(state.fReporter, 0); 466 REPORTER_ASSERT(state.fReporter, 0);
450 } 467 }
451 state.fReporter->bumpTestCount(); 468 state.fReporter->bumpTestCount();
452 return result == 0; 469 return result == 0;
453 } 470 }
454 471
455 enum class ExpectSuccess {
456 kNo,
457 kYes
458 };
459
460 enum class SkipAssert {
461 kNo,
462 kYes
463 };
464
465 enum class ExpectMatch {
466 kNo,
467 kYes
468 };
469
470 static bool inner_simplify(skiatest::Reporter* reporter, const SkPath& path, con st char* filename, 472 static bool inner_simplify(skiatest::Reporter* reporter, const SkPath& path, con st char* filename,
471 ExpectSuccess expectSuccess, SkipAssert skipAssert, ExpectMatch expectMa tch) { 473 ExpectSuccess expectSuccess, SkipAssert skipAssert, ExpectMatch expectMa tch) {
472 #if 0 && DEBUG_SHOW_TEST_NAME 474 #if 0 && DEBUG_SHOW_TEST_NAME
473 showPathData(path); 475 showPathData(path);
474 #endif 476 #endif
475 SkPath out; 477 SkPath out;
476 if (!SimplifyDebug(path, &out SkDEBUGPARAMS(SkipAssert::kYes == skipAssert) 478 if (!SimplifyDebug(path, &out SkDEBUGPARAMS(SkipAssert::kYes == skipAssert)
477 SkDEBUGPARAMS(testName))) { 479 SkDEBUGPARAMS(testName))) {
478 if (ExpectSuccess::kYes == expectSuccess) { 480 if (ExpectSuccess::kYes == expectSuccess) {
479 SkDebugf("%s did not expect %s failure\n", __FUNCTION__, filename); 481 SkDebugf("%s did not expect %s failure\n", __FUNCTION__, filename);
480 REPORTER_ASSERT(reporter, 0); 482 REPORTER_ASSERT(reporter, 0);
481 } 483 }
482 return false; 484 return false;
483 } else { 485 } else {
484 if (ExpectSuccess::kNo == expectSuccess) { 486 if (ExpectSuccess::kNo == expectSuccess) {
485 SkDebugf("%s %s unexpected success\n", __FUNCTION__, filename); 487 SkDebugf("%s %s unexpected success\n", __FUNCTION__, filename);
486 REPORTER_ASSERT(reporter, 0); 488 REPORTER_ASSERT(reporter, 0);
487 } 489 }
488 } 490 }
489 SkBitmap bitmap; 491 SkBitmap bitmap;
490 int errors = comparePaths(reporter, filename, path, out, bitmap); 492 int errors = comparePaths(reporter, filename, path, out, bitmap);
491 if (ExpectMatch::kNo == expectMatch) { 493 if (ExpectMatch::kNo == expectMatch) {
492 if (!errors) { 494 if (!errors) {
493 SkDebugf("%s failing test %s now succeeds\n", __FUNCTION__, filename ); 495 SkDebugf("%s failing test %s now succeeds\n", __FUNCTION__, filename );
494 REPORTER_ASSERT(reporter, 0); 496 REPORTER_ASSERT(reporter, 0);
495 return false; 497 return false;
496 } 498 }
497 } else if (errors) { 499 } else if (ExpectMatch::kYes == expectMatch && errors) {
498 REPORTER_ASSERT(reporter, 0); 500 REPORTER_ASSERT(reporter, 0);
499 } 501 }
500 reporter->bumpTestCount(); 502 reporter->bumpTestCount();
501 return errors == 0; 503 return errors == 0;
502 } 504 }
503 505
504 bool testSimplify(skiatest::Reporter* reporter, const SkPath& path, const char* filename) { 506 bool testSimplify(skiatest::Reporter* reporter, const SkPath& path, const char* filename) {
505 return inner_simplify(reporter, path, filename, ExpectSuccess::kYes, SkipAss ert::kNo, 507 return inner_simplify(reporter, path, filename, ExpectSuccess::kYes, SkipAss ert::kNo,
506 ExpectMatch::kYes); 508 ExpectMatch::kYes);
507 } 509 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 scaledB.setFillType(b.getFillType()); 569 scaledB.setFillType(b.getFillType());
568 scaledRgnA.setPath(scaledA, openClip); 570 scaledRgnA.setPath(scaledA, openClip);
569 scaledRgnB.setPath(scaledB, openClip); 571 scaledRgnB.setPath(scaledB, openClip);
570 scaledRgnOut.op(scaledRgnA, scaledRgnB, (SkRegion::Op) shapeOp); 572 scaledRgnOut.op(scaledRgnA, scaledRgnB, (SkRegion::Op) shapeOp);
571 scaledRgnOut.getBoundaryPath(&scaledPathOut); 573 scaledRgnOut.getBoundaryPath(&scaledPathOut);
572 SkBitmap bitmap; 574 SkBitmap bitmap;
573 SkPath scaledOut; 575 SkPath scaledOut;
574 scaledOut.addPath(out, scale); 576 scaledOut.addPath(out, scale);
575 scaledOut.setFillType(out.getFillType()); 577 scaledOut.setFillType(out.getFillType());
576 int result = comparePaths(reporter, testName, pathOut, scaledPathOut, out, s caledOut, bitmap, 578 int result = comparePaths(reporter, testName, pathOut, scaledPathOut, out, s caledOut, bitmap,
577 a, b, shapeOp, scale, ExpectMatch::kYes == expectMatch); 579 a, b, shapeOp, scale, expectMatch);
578 reporter->bumpTestCount(); 580 reporter->bumpTestCount();
579 return result == 0; 581 return result == 0;
580 } 582 }
581 583
582 bool testPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b, 584 bool testPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
583 const SkPathOp shapeOp, const char* testName) { 585 const SkPathOp shapeOp, const char* testName) {
584 return innerPathOp(reporter, a, b, shapeOp, testName, ExpectSuccess::kYes, S kipAssert::kNo, 586 return innerPathOp(reporter, a, b, shapeOp, testName, ExpectSuccess::kYes, S kipAssert::kNo,
585 ExpectMatch::kYes); 587 ExpectMatch::kYes);
586 } 588 }
587 589
(...skipping 14 matching lines...) Expand all
602 return innerPathOp(reporter, a, b, shapeOp, testName, ExpectSuccess::kYes, S kipAssert::kYes, 604 return innerPathOp(reporter, a, b, shapeOp, testName, ExpectSuccess::kYes, S kipAssert::kYes,
603 ExpectMatch::kYes); 605 ExpectMatch::kYes);
604 } 606 }
605 607
606 bool testPathOpFailSkipAssert(skiatest::Reporter* reporter, const SkPath& a, con st SkPath& b, 608 bool testPathOpFailSkipAssert(skiatest::Reporter* reporter, const SkPath& a, con st SkPath& b,
607 const SkPathOp shapeOp, const char* testName) { 609 const SkPathOp shapeOp, const char* testName) {
608 return innerPathOp(reporter, a, b, shapeOp, testName, ExpectSuccess::kNo, Sk ipAssert::kYes, 610 return innerPathOp(reporter, a, b, shapeOp, testName, ExpectSuccess::kNo, Sk ipAssert::kYes,
609 ExpectMatch::kNo); 611 ExpectMatch::kNo);
610 } 612 }
611 613
614 bool testPathOpFlakySkipAssert(skiatest::Reporter* reporter, const SkPath& a, co nst SkPath& b,
615 const SkPathOp shapeOp, const char* testName) {
616 return innerPathOp(reporter, a, b, shapeOp, testName, ExpectSuccess::kFlaky, SkipAssert::kYes,
617 ExpectMatch::kFlaky);
618 }
619
612 bool testPathOpFail(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b, 620 bool testPathOpFail(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
613 const SkPathOp shapeOp, const char* testName) { 621 const SkPathOp shapeOp, const char* testName) {
614 #if DEBUG_SHOW_TEST_NAME 622 #if DEBUG_SHOW_TEST_NAME
615 showName(a, b, shapeOp); 623 showName(a, b, shapeOp);
616 #endif 624 #endif
617 SkPath orig; 625 SkPath orig;
618 orig.lineTo(54, 43); 626 orig.lineTo(54, 43);
619 SkPath out = orig; 627 SkPath out = orig;
620 if (Op(a, b, shapeOp, &out) ) { 628 if (Op(a, b, shapeOp, &out) ) {
621 SkDebugf("%s test is expected to fail\n", __FUNCTION__); 629 SkDebugf("%s test is expected to fail\n", __FUNCTION__);
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 if (foundSkip && tests[index].fun != firstTest) { 733 if (foundSkip && tests[index].fun != firstTest) {
726 SkDebugf(" %s,\n", tests[index].str); 734 SkDebugf(" %s,\n", tests[index].str);
727 } 735 }
728 if (tests[index].fun == stopTest || index == last) { 736 if (tests[index].fun == stopTest || index == last) {
729 break; 737 break;
730 } 738 }
731 index += reverse ? -1 : 1; 739 index += reverse ? -1 : 1;
732 } while (true); 740 } while (true);
733 #endif 741 #endif
734 } 742 }
OLDNEW
« no previous file with comments | « tests/PathOpsExtendedTest.h ('k') | tests/PathOpsOpTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698