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

Side by Side Diff: tests/PathOpsExtendedTest.cpp

Issue 633393002: harden pathops for pathological test (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: exclude new test that asserts in debug Created 6 years, 1 month 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/PathOpsFuzz763Test.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 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 void ShowTestArray() { 315 void ShowTestArray() {
316 for (int x = gTestFirst; x < gTestNo; ++x) { 316 for (int x = gTestFirst; x < gTestNo; ++x) {
317 SkDebugf(" TEST(xOp%d%s),\n", x, opSuffixes[gTestOp[x - gTestFirst]]) ; 317 SkDebugf(" TEST(xOp%d%s),\n", x, opSuffixes[gTestOp[x - gTestFirst]]) ;
318 } 318 }
319 } 319 }
320 320
321 SK_DECLARE_STATIC_MUTEX(compareDebugOut3); 321 SK_DECLARE_STATIC_MUTEX(compareDebugOut3);
322 SK_DECLARE_STATIC_MUTEX(compareDebugOut4); 322 SK_DECLARE_STATIC_MUTEX(compareDebugOut4);
323 static int comparePaths(skiatest::Reporter* reporter, const char* testName, cons t SkPath& one, 323 static int comparePaths(skiatest::Reporter* reporter, const char* testName, cons t SkPath& one,
324 const SkPath& scaledOne, const SkPath& two, const SkPath& scaledTwo, SkB itmap& bitmap, 324 const SkPath& scaledOne, const SkPath& two, const SkPath& scaledTwo, SkB itmap& bitmap,
325 const SkPath& a, const SkPath& b, const SkPathOp shapeOp, const SkMatrix & scale) { 325 const SkPath& a, const SkPath& b, const SkPathOp shapeOp, const SkMatrix & scale,
326 bool expectSuccess) {
326 int errors2x2; 327 int errors2x2;
328 const int MAX_ERRORS = 8;
327 (void) pathsDrawTheSame(bitmap, scaledOne, scaledTwo, errors2x2); 329 (void) pathsDrawTheSame(bitmap, scaledOne, scaledTwo, errors2x2);
330 if (!expectSuccess) {
331 if (errors2x2 <= MAX_ERRORS) {
332 REPORTER_ASSERT(reporter, 0);
333 }
334 return 0;
335 }
328 if (errors2x2 == 0) { 336 if (errors2x2 == 0) {
329 if (gShowPath) { 337 if (gShowPath) {
330 showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shape Op, scale); 338 showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shape Op, scale);
331 } 339 }
332 return 0; 340 return 0;
333 } 341 }
334 const int MAX_ERRORS = 8;
335 if (errors2x2 > MAX_ERRORS && gComparePathsAssert) { 342 if (errors2x2 > MAX_ERRORS && gComparePathsAssert) {
336 SkAutoMutexAcquire autoM(compareDebugOut3); 343 SkAutoMutexAcquire autoM(compareDebugOut3);
337 SkDebugf("\n*** this test fails ***\n"); 344 SkDebugf("\n*** this test fails ***\n");
338 showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shapeOp, scale); 345 showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shapeOp, scale);
339 REPORTER_ASSERT(reporter, 0); 346 REPORTER_ASSERT(reporter, 0);
340 } else if (gShowPath || errors2x2 == MAX_ERRORS || errors2x2 == MAX_ERRORS - 1) { 347 } else if (gShowPath || errors2x2 == MAX_ERRORS || errors2x2 == MAX_ERRORS - 1) {
341 SkAutoMutexAcquire autoM(compareDebugOut4); 348 SkAutoMutexAcquire autoM(compareDebugOut4);
342 showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shapeOp, scale); 349 showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shapeOp, scale);
343 } 350 }
344 return errors2x2 > MAX_ERRORS ? errors2x2 : 0; 351 return errors2x2 > MAX_ERRORS ? errors2x2 : 0;
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 #if DEBUG_SHOW_TEST_NAME 472 #if DEBUG_SHOW_TEST_NAME
466 static void showName(const SkPath& a, const SkPath& b, const SkPathOp shapeOp) { 473 static void showName(const SkPath& a, const SkPath& b, const SkPathOp shapeOp) {
467 SkDebugf("\n"); 474 SkDebugf("\n");
468 showPathData(a); 475 showPathData(a);
469 showOp(shapeOp); 476 showOp(shapeOp);
470 showPathData(b); 477 showPathData(b);
471 } 478 }
472 #endif 479 #endif
473 480
474 static bool innerPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkP ath& b, 481 static bool innerPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkP ath& b,
475 const SkPathOp shapeOp, const char* testName, bool threaded) { 482 const SkPathOp shapeOp, const char* testName, bool threaded, bool expect Success) {
476 #if DEBUG_SHOW_TEST_NAME 483 #if DEBUG_SHOW_TEST_NAME
477 showName(a, b, shapeOp); 484 showName(a, b, shapeOp);
478 #endif 485 #endif
479 SkPath out; 486 SkPath out;
480 if (!Op(a, b, shapeOp, &out) ) { 487 if (!Op(a, b, shapeOp, &out) ) {
481 SkDebugf("%s did not expect failure\n", __FUNCTION__); 488 SkDebugf("%s did not expect failure\n", __FUNCTION__);
482 REPORTER_ASSERT(reporter, 0); 489 REPORTER_ASSERT(reporter, 0);
483 return false; 490 return false;
484 } 491 }
485 if (threaded && !reporter->verbose()) { 492 if (threaded && !reporter->verbose()) {
(...skipping 17 matching lines...) Expand all
503 scaledB.setFillType(b.getFillType()); 510 scaledB.setFillType(b.getFillType());
504 scaledRgnA.setPath(scaledA, openClip); 511 scaledRgnA.setPath(scaledA, openClip);
505 scaledRgnB.setPath(scaledB, openClip); 512 scaledRgnB.setPath(scaledB, openClip);
506 scaledRgnOut.op(scaledRgnA, scaledRgnB, (SkRegion::Op) shapeOp); 513 scaledRgnOut.op(scaledRgnA, scaledRgnB, (SkRegion::Op) shapeOp);
507 scaledRgnOut.getBoundaryPath(&scaledPathOut); 514 scaledRgnOut.getBoundaryPath(&scaledPathOut);
508 SkBitmap bitmap; 515 SkBitmap bitmap;
509 SkPath scaledOut; 516 SkPath scaledOut;
510 scaledOut.addPath(out, scale); 517 scaledOut.addPath(out, scale);
511 scaledOut.setFillType(out.getFillType()); 518 scaledOut.setFillType(out.getFillType());
512 int result = comparePaths(reporter, testName, pathOut, scaledPathOut, out, s caledOut, bitmap, 519 int result = comparePaths(reporter, testName, pathOut, scaledPathOut, out, s caledOut, bitmap,
513 a, b, shapeOp, scale); 520 a, b, shapeOp, scale, expectSuccess);
514 if (result && gPathStrAssert) { 521 if (result && gPathStrAssert) {
515 REPORTER_ASSERT(reporter, 0); 522 REPORTER_ASSERT(reporter, 0);
516 } 523 }
517 reporter->bumpTestCount(); 524 reporter->bumpTestCount();
518 return result == 0; 525 return result == 0;
519 } 526 }
520 527
521 bool testPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b, 528 bool testPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
522 const SkPathOp shapeOp, const char* testName) { 529 const SkPathOp shapeOp, const char* testName) {
523 return innerPathOp(reporter, a, b, shapeOp, testName, false); 530 return innerPathOp(reporter, a, b, shapeOp, testName, false, true);
531 }
532
533 bool testPathOpCheck(skiatest::Reporter* reporter, const SkPath& a, const SkPath & b,
534 const SkPathOp shapeOp, const char* testName, bool checkFail) {
535 return innerPathOp(reporter, a, b, shapeOp, testName, false, checkFail);
524 } 536 }
525 537
526 bool testPathFailOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b, 538 bool testPathFailOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
527 const SkPathOp shapeOp, const char* testName) { 539 const SkPathOp shapeOp, const char* testName) {
528 #if DEBUG_SHOW_TEST_NAME 540 #if DEBUG_SHOW_TEST_NAME
529 showName(a, b, shapeOp); 541 showName(a, b, shapeOp);
530 #endif 542 #endif
531 SkPath out; 543 SkPath out;
532 if (Op(a, b, shapeOp, &out) ) { 544 if (Op(a, b, shapeOp, &out) ) {
533 SkDebugf("%s test is expected to fail\n", __FUNCTION__); 545 SkDebugf("%s test is expected to fail\n", __FUNCTION__);
534 REPORTER_ASSERT(reporter, 0); 546 REPORTER_ASSERT(reporter, 0);
535 return false; 547 return false;
536 } 548 }
537 return true; 549 return true;
538 } 550 }
539 551
540 bool testThreadedPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkP ath& b, 552 bool testThreadedPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkP ath& b,
541 const SkPathOp shapeOp, const char* testName) { 553 const SkPathOp shapeOp, const char* testName) {
542 return innerPathOp(reporter, a, b, shapeOp, testName, true); 554 return innerPathOp(reporter, a, b, shapeOp, testName, true, true);
543 } 555 }
544 556
545 SK_DECLARE_STATIC_MUTEX(gMutex); 557 SK_DECLARE_STATIC_MUTEX(gMutex);
546 558
547 void initializeTests(skiatest::Reporter* reporter, const char* test) { 559 void initializeTests(skiatest::Reporter* reporter, const char* test) {
548 #if 0 // doesn't work yet 560 #if 0 // doesn't work yet
549 SK_CONF_SET("images.jpeg.suppressDecoderWarnings", true); 561 SK_CONF_SET("images.jpeg.suppressDecoderWarnings", true);
550 SK_CONF_SET("images.png.suppressDecoderWarnings", true); 562 SK_CONF_SET("images.png.suppressDecoderWarnings", true);
551 #endif 563 #endif
552 if (reporter->verbose()) { 564 if (reporter->verbose()) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 if (tests[index].fun == stopTest) { 633 if (tests[index].fun == stopTest) {
622 SkDebugf("lastTest\n"); 634 SkDebugf("lastTest\n");
623 break; 635 break;
624 } 636 }
625 if (index == last) { 637 if (index == last) {
626 break; 638 break;
627 } 639 }
628 index += reverse ? -1 : 1; 640 index += reverse ? -1 : 1;
629 } while (true); 641 } while (true);
630 } 642 }
OLDNEW
« no previous file with comments | « tests/PathOpsExtendedTest.h ('k') | tests/PathOpsFuzz763Test.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698