| OLD | NEW | 
|    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 308 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  319     for (int x = gTestFirst; x < gTestNo; ++x) { |  319     for (int x = gTestFirst; x < gTestNo; ++x) { | 
|  320         SkDebugf("    TEST(%s%d%s),\n", testName, x, opSuffixes[gTestOp[x - gTes
     tFirst]]); |  320         SkDebugf("    TEST(%s%d%s),\n", testName, x, opSuffixes[gTestOp[x - gTes
     tFirst]]); | 
|  321     } |  321     } | 
|  322 } |  322 } | 
|  323  |  323  | 
|  324 SK_DECLARE_STATIC_MUTEX(compareDebugOut3); |  324 SK_DECLARE_STATIC_MUTEX(compareDebugOut3); | 
|  325 SK_DECLARE_STATIC_MUTEX(compareDebugOut4); |  325 SK_DECLARE_STATIC_MUTEX(compareDebugOut4); | 
|  326 static int comparePaths(skiatest::Reporter* reporter, const char* testName, cons
     t SkPath& one, |  326 static int comparePaths(skiatest::Reporter* reporter, const char* testName, cons
     t SkPath& one, | 
|  327         const SkPath& scaledOne, const SkPath& two, const SkPath& scaledTwo, SkB
     itmap& bitmap, |  327         const SkPath& scaledOne, const SkPath& two, const SkPath& scaledTwo, SkB
     itmap& bitmap, | 
|  328         const SkPath& a, const SkPath& b, const SkPathOp shapeOp, const SkMatrix
     & scale, |  328         const SkPath& a, const SkPath& b, const SkPathOp shapeOp, const SkMatrix
     & scale, | 
|  329         bool expectSuccess) { |  329         bool expectSuccess, bool flaky) { | 
|  330     int errors2x2; |  330     int errors2x2; | 
|  331     const int MAX_ERRORS = 8; |  331     const int MAX_ERRORS = 8; | 
|  332     (void) pathsDrawTheSame(bitmap, scaledOne, scaledTwo, errors2x2); |  332     (void) pathsDrawTheSame(bitmap, scaledOne, scaledTwo, errors2x2); | 
|  333     if (!expectSuccess) { |  333     if (!expectSuccess) { | 
|  334         if (errors2x2 <= MAX_ERRORS) { |  334         if (errors2x2 <= MAX_ERRORS) { | 
|  335             REPORTER_ASSERT(reporter, 0); |  335             REPORTER_ASSERT(reporter, 0); | 
|  336         } |  336         } | 
|  337         return 0; |  337         return 0; | 
|  338     } |  338     } | 
|  339     if (errors2x2 == 0) { |  339     if (errors2x2 == 0) { | 
|  340         return 0; |  340         return 0; | 
|  341     } |  341     } | 
 |  342     if (flaky) { | 
 |  343         return 0; | 
 |  344     } | 
|  342     if (errors2x2 > MAX_ERRORS) { |  345     if (errors2x2 > MAX_ERRORS) { | 
|  343         SkAutoMutexAcquire autoM(compareDebugOut3); |  346         SkAutoMutexAcquire autoM(compareDebugOut3); | 
|  344         showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shapeOp, 
     scale); |  347         showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shapeOp, 
     scale); | 
|  345         SkDebugf("\n/*"); |  348         SkDebugf("\n/*"); | 
|  346         REPORTER_ASSERT(reporter, 0); |  349         REPORTER_ASSERT(reporter, 0); | 
|  347         SkDebugf(" */\n"); |  350         SkDebugf(" */\n"); | 
|  348     } else if (errors2x2 == MAX_ERRORS || errors2x2 == MAX_ERRORS - 1) { |  351     } else if (errors2x2 == MAX_ERRORS || errors2x2 == MAX_ERRORS - 1) { | 
|  349         SkAutoMutexAcquire autoM(compareDebugOut4); |  352         SkAutoMutexAcquire autoM(compareDebugOut4); | 
|  350         showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shapeOp, 
     scale); |  353         showPathOpPath(testName, one, two, a, b, scaledOne, scaledTwo, shapeOp, 
     scale); | 
|  351     } |  354     } | 
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  485  |  488  | 
|  486 #if DEBUG_SHOW_TEST_NAME |  489 #if DEBUG_SHOW_TEST_NAME | 
|  487 static void showName(const SkPath& a, const SkPath& b, const SkPathOp shapeOp) { |  490 static void showName(const SkPath& a, const SkPath& b, const SkPathOp shapeOp) { | 
|  488     SkDebugf("\n"); |  491     SkDebugf("\n"); | 
|  489     showPathData(a); |  492     showPathData(a); | 
|  490     showOp(shapeOp); |  493     showOp(shapeOp); | 
|  491     showPathData(b); |  494     showPathData(b); | 
|  492 } |  495 } | 
|  493 #endif |  496 #endif | 
|  494  |  497  | 
 |  498 bool OpDebug(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result, 
     bool expectSuccess); | 
 |  499  | 
|  495 static bool innerPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkP
     ath& b, |  500 static bool innerPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkP
     ath& b, | 
|  496         const SkPathOp shapeOp, const char* testName, bool threaded, bool expect
     Success) { |  501         const SkPathOp shapeOp, const char* testName, bool threaded, bool expect
     Success, | 
 |  502         bool flaky) { | 
|  497 #if 0 && DEBUG_SHOW_TEST_NAME |  503 #if 0 && DEBUG_SHOW_TEST_NAME | 
|  498     showName(a, b, shapeOp); |  504     showName(a, b, shapeOp); | 
|  499 #endif |  505 #endif | 
|  500     SkPath out; |  506     SkPath out; | 
|  501     if (!Op(a, b, shapeOp, &out) ) { |  507     if (!OpDebug(a, b, shapeOp, &out, expectSuccess)) { | 
|  502         SkDebugf("%s did not expect failure\n", __FUNCTION__); |  508         SkDebugf("%s did not expect failure\n", __FUNCTION__); | 
|  503         REPORTER_ASSERT(reporter, 0); |  509         REPORTER_ASSERT(reporter, 0); | 
|  504         return false; |  510         return false; | 
|  505     } |  511     } | 
|  506     if (!reporter->verbose()) { |  512     if (!reporter->verbose()) { | 
|  507         return true; |  513         return true; | 
|  508     } |  514     } | 
|  509     SkPath pathOut, scaledPathOut; |  515     SkPath pathOut, scaledPathOut; | 
|  510     SkRegion rgnA, rgnB, openClip, rgnOut; |  516     SkRegion rgnA, rgnB, openClip, rgnOut; | 
|  511     openClip.setRect(-16000, -16000, 16000, 16000); |  517     openClip.setRect(-16000, -16000, 16000, 16000); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|  524     scaledB.setFillType(b.getFillType()); |  530     scaledB.setFillType(b.getFillType()); | 
|  525     scaledRgnA.setPath(scaledA, openClip); |  531     scaledRgnA.setPath(scaledA, openClip); | 
|  526     scaledRgnB.setPath(scaledB, openClip); |  532     scaledRgnB.setPath(scaledB, openClip); | 
|  527     scaledRgnOut.op(scaledRgnA, scaledRgnB, (SkRegion::Op) shapeOp); |  533     scaledRgnOut.op(scaledRgnA, scaledRgnB, (SkRegion::Op) shapeOp); | 
|  528     scaledRgnOut.getBoundaryPath(&scaledPathOut); |  534     scaledRgnOut.getBoundaryPath(&scaledPathOut); | 
|  529     SkBitmap bitmap; |  535     SkBitmap bitmap; | 
|  530     SkPath scaledOut; |  536     SkPath scaledOut; | 
|  531     scaledOut.addPath(out, scale); |  537     scaledOut.addPath(out, scale); | 
|  532     scaledOut.setFillType(out.getFillType()); |  538     scaledOut.setFillType(out.getFillType()); | 
|  533     int result = comparePaths(reporter, testName, pathOut, scaledPathOut, out, s
     caledOut, bitmap, |  539     int result = comparePaths(reporter, testName, pathOut, scaledPathOut, out, s
     caledOut, bitmap, | 
|  534             a, b, shapeOp, scale, expectSuccess); |  540             a, b, shapeOp, scale, expectSuccess, flaky); | 
|  535     reporter->bumpTestCount(); |  541     reporter->bumpTestCount(); | 
|  536     return result == 0; |  542     return result == 0; | 
|  537 } |  543 } | 
|  538  |  544  | 
|  539 bool testPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b, |  545 bool testPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b, | 
|  540         const SkPathOp shapeOp, const char* testName) { |  546         const SkPathOp shapeOp, const char* testName) { | 
|  541     return innerPathOp(reporter, a, b, shapeOp, testName, false, true); |  547     return innerPathOp(reporter, a, b, shapeOp, testName, false, true, false); | 
 |  548 } | 
 |  549  | 
 |  550 bool testPathOpFlaky(skiatest::Reporter* reporter, const SkPath& a, const SkPath
     & b, | 
 |  551         const SkPathOp shapeOp, const char* testName) { | 
 |  552     return innerPathOp(reporter, a, b, shapeOp, testName, false, true, true); | 
|  542 } |  553 } | 
|  543  |  554  | 
|  544 bool testPathOpCheck(skiatest::Reporter* reporter, const SkPath& a, const SkPath
     & b, |  555 bool testPathOpCheck(skiatest::Reporter* reporter, const SkPath& a, const SkPath
     & b, | 
|  545         const SkPathOp shapeOp, const char* testName, bool checkFail) { |  556         const SkPathOp shapeOp, const char* testName, bool checkFail) { | 
|  546     return innerPathOp(reporter, a, b, shapeOp, testName, false, checkFail); |  557     return innerPathOp(reporter, a, b, shapeOp, testName, false, checkFail, fals
     e); | 
|  547 } |  558 } | 
|  548  |  559  | 
|  549 bool testPathOpFailCheck(skiatest::Reporter* reporter, const SkPath& a, const Sk
     Path& b, |  560 bool testPathOpFailCheck(skiatest::Reporter* reporter, const SkPath& a, const Sk
     Path& b, | 
|  550         const SkPathOp shapeOp, const char* testName) { |  561         const SkPathOp shapeOp, const char* testName) { | 
|  551     return innerPathOp(reporter, a, b, shapeOp, testName, false, false); |  562     return innerPathOp(reporter, a, b, shapeOp, testName, false, false, false); | 
|  552 } |  563 } | 
|  553  |  564  | 
|  554 bool testPathFailOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath&
      b, |  565 bool testPathFailOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath&
      b, | 
|  555                  const SkPathOp shapeOp, const char* testName) { |  566                  const SkPathOp shapeOp, const char* testName) { | 
|  556 #if DEBUG_SHOW_TEST_NAME |  567 #if DEBUG_SHOW_TEST_NAME | 
|  557     showName(a, b, shapeOp); |  568     showName(a, b, shapeOp); | 
|  558 #endif |  569 #endif | 
|  559     SkPath orig; |  570     SkPath orig; | 
|  560     orig.lineTo(54, 43); |  571     orig.lineTo(54, 43); | 
|  561     SkPath out = orig; |  572     SkPath out = orig; | 
|  562     if (Op(a, b, shapeOp, &out) ) { |  573     if (Op(a, b, shapeOp, &out) ) { | 
|  563         SkDebugf("%s test is expected to fail\n", __FUNCTION__); |  574         SkDebugf("%s test is expected to fail\n", __FUNCTION__); | 
|  564         REPORTER_ASSERT(reporter, 0); |  575         REPORTER_ASSERT(reporter, 0); | 
|  565         return false; |  576         return false; | 
|  566     } |  577     } | 
|  567     SkASSERT(out == orig); |  578     SkASSERT(out == orig); | 
|  568     return true; |  579     return true; | 
|  569 } |  580 } | 
|  570  |  581  | 
|  571 bool testThreadedPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkP
     ath& b, |  582 bool testThreadedPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkP
     ath& b, | 
|  572                  const SkPathOp shapeOp, const char* testName) { |  583                  const SkPathOp shapeOp, const char* testName) { | 
|  573     return innerPathOp(reporter, a, b, shapeOp, testName, true, true); |  584     return innerPathOp(reporter, a, b, shapeOp, testName, true, true, false); | 
|  574 } |  585 } | 
|  575  |  586  | 
|  576 SK_DECLARE_STATIC_MUTEX(gMutex); |  587 SK_DECLARE_STATIC_MUTEX(gMutex); | 
|  577  |  588  | 
|  578 void initializeTests(skiatest::Reporter* reporter, const char* test) { |  589 void initializeTests(skiatest::Reporter* reporter, const char* test) { | 
|  579 #if 0  // doesn't work yet |  590 #if 0  // doesn't work yet | 
|  580     SK_CONF_SET("images.jpeg.suppressDecoderWarnings", true); |  591     SK_CONF_SET("images.jpeg.suppressDecoderWarnings", true); | 
|  581     SK_CONF_SET("images.png.suppressDecoderWarnings", true); |  592     SK_CONF_SET("images.png.suppressDecoderWarnings", true); | 
|  582 #endif |  593 #endif | 
|  583     if (reporter->verbose()) { |  594     if (reporter->verbose()) { | 
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  676         if (foundSkip && tests[index].fun != firstTest) { |  687         if (foundSkip && tests[index].fun != firstTest) { | 
|  677             SkDebugf("    %s,\n", tests[index].str); |  688             SkDebugf("    %s,\n", tests[index].str); | 
|  678         } |  689         } | 
|  679         if (tests[index].fun == stopTest || index == last) { |  690         if (tests[index].fun == stopTest || index == last) { | 
|  680             break; |  691             break; | 
|  681         } |  692         } | 
|  682         index += reverse ? -1 : 1; |  693         index += reverse ? -1 : 1; | 
|  683     } while (true); |  694     } while (true); | 
|  684 #endif |  695 #endif | 
|  685 } |  696 } | 
| OLD | NEW |