OLD | NEW |
---|---|
1 /* | 1 /* |
epoger
2013/03/20 19:06:12
patchset 1: same as patchset 4 from https://codere
| |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 /* | 8 /* |
9 * Code for the "gm" (Golden Master) rendering comparison tool. | 9 * Code for the "gm" (Golden Master) rendering comparison tool. |
10 * | 10 * |
11 * If you make changes to this, re-run the self-tests at gm/tests/run.sh | 11 * If you make changes to this, re-run the self-tests at gm/tests/run.sh |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
254 // The common case: no error means nothing to record. | 254 // The common case: no error means nothing to record. |
255 if (kEmptyErrorBitfield == errorType) { | 255 if (kEmptyErrorBitfield == errorType) { |
256 return; | 256 return; |
257 } | 257 } |
258 | 258 |
259 // If only certain error type(s) were reported, we know we can ignore th em. | 259 // If only certain error type(s) were reported, we know we can ignore th em. |
260 if (errorType == (errorType & kIgnorable_ErrorBitmask)) { | 260 if (errorType == (errorType & kIgnorable_ErrorBitmask)) { |
261 return; | 261 return; |
262 } | 262 } |
263 | 263 |
264 FailRec& rec = fFailedTests.push_back(make_name( | 264 SkString completeName = name; |
265 name.c_str(), renderModeDescriptor)); | 265 completeName.append(renderModeDescriptor); |
266 FailRec& rec = fFailedTests.push_back(completeName); | |
266 rec.fIsPixelError = | 267 rec.fIsPixelError = |
267 (kEmptyErrorBitfield != (errorType & kImageMismatch_ErrorBitmask)); | 268 (kEmptyErrorBitfield != (errorType & kImageMismatch_ErrorBitmask)); |
268 } | 269 } |
269 | 270 |
270 // List contents of fFailedTests via SkDebug. | 271 // List contents of fFailedTests via SkDebug. |
271 void ListErrors() { | 272 void ListErrors() { |
272 for (int i = 0; i < fFailedTests.count(); ++i) { | 273 for (int i = 0; i < fFailedTests.count(); ++i) { |
273 if (fFailedTests[i].fIsPixelError) { | 274 if (fFailedTests[i].fIsPixelError) { |
274 gm_fprintf(stderr, "\t\t%s pixel_error\n", fFailedTests[i].fName .c_str()); | 275 gm_fprintf(stderr, "\t\t%s pixel_error\n", fFailedTests[i].fName .c_str()); |
275 } else { | 276 } else { |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
583 * _ErrorBitmask values otherwise. | 584 * _ErrorBitmask values otherwise. |
584 * | 585 * |
585 * If fMismatchPath has been set, and there are pixel diffs, then the | 586 * If fMismatchPath has been set, and there are pixel diffs, then the |
586 * actual bitmap will be written out to a file within fMismatchPath. | 587 * actual bitmap will be written out to a file within fMismatchPath. |
587 * | 588 * |
588 * @param expectations what expectations to compare actualBitmap against | 589 * @param expectations what expectations to compare actualBitmap against |
589 * @param actualBitmap the image we actually generated | 590 * @param actualBitmap the image we actually generated |
590 * @param baseNameString name of test without renderModeDescriptor added | 591 * @param baseNameString name of test without renderModeDescriptor added |
591 * @param renderModeDescriptor e.g., "-rtree", "-deferred" | 592 * @param renderModeDescriptor e.g., "-rtree", "-deferred" |
592 * @param addToJsonSummary whether to add these results (both actual and | 593 * @param addToJsonSummary whether to add these results (both actual and |
593 * expected) to the JSON summary | 594 * expected) to the JSON summary. Regardless of this setting, if |
594 * | 595 * we find an image mismatch in this test, we will write these |
595 * TODO: For now, addToJsonSummary is only set to true within | 596 * results to the JSON summary. (This is so that we will always |
596 * compare_test_results_to_stored_expectations(), so results of our | 597 * report errors across rendering modes, such as pipe vs tiled. |
597 * in-memory comparisons (Rtree vs regular, etc.) are not written to the | 598 * See https://codereview.chromium.org/12825005/ ) |
598 * JSON summary. We may wish to change that. | |
599 */ | 599 */ |
600 ErrorBitfield compare_to_expectations(Expectations expectations, | 600 ErrorBitfield compare_to_expectations(Expectations expectations, |
601 const SkBitmap& actualBitmap, | 601 const SkBitmap& actualBitmap, |
602 const SkString& baseNameString, | 602 const SkString& baseNameString, |
603 const char renderModeDescriptor[], | 603 const char renderModeDescriptor[], |
604 bool addToJsonSummary=false) { | 604 bool addToJsonSummary) { |
605 ErrorBitfield retval; | 605 ErrorBitfield retval; |
606 Checksum actualChecksum = SkBitmapChecksummer::Compute64(actualBitmap); | 606 Checksum actualChecksum = SkBitmapChecksummer::Compute64(actualBitmap); |
607 SkString completeNameString = baseNameString; | 607 SkString completeNameString = baseNameString; |
608 completeNameString.append(renderModeDescriptor); | 608 completeNameString.append(renderModeDescriptor); |
609 const char* completeName = completeNameString.c_str(); | 609 const char* completeName = completeNameString.c_str(); |
610 | 610 |
611 if (expectations.empty()) { | 611 if (expectations.empty()) { |
612 retval = kMissingExpectations_ErrorBitmask; | 612 retval = kMissingExpectations_ErrorBitmask; |
613 } else if (expectations.match(actualChecksum)) { | 613 } else if (expectations.match(actualChecksum)) { |
614 retval = kEmptyErrorBitfield; | 614 retval = kEmptyErrorBitfield; |
615 } else { | 615 } else { |
616 addToJsonSummary = true; | |
616 retval = kImageMismatch_ErrorBitmask; | 617 retval = kImageMismatch_ErrorBitmask; |
617 | 618 |
618 // Write out the "actuals" for any mismatches, if we have | 619 // Write out the "actuals" for any mismatches, if we have |
619 // been directed to do so. | 620 // been directed to do so. |
620 if (fMismatchPath) { | 621 if (fMismatchPath) { |
621 SkString path = | 622 SkString path = |
622 make_filename(fMismatchPath, renderModeDescriptor, | 623 make_filename(fMismatchPath, renderModeDescriptor, |
623 baseNameString.c_str(), "png"); | 624 baseNameString.c_str(), "png"); |
624 write_bitmap(path, actualBitmap); | 625 write_bitmap(path, actualBitmap); |
625 } | 626 } |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
773 * @param referenceBitmap bitmap we expected to be generated | 774 * @param referenceBitmap bitmap we expected to be generated |
774 */ | 775 */ |
775 ErrorBitfield compare_test_results_to_reference_bitmap( | 776 ErrorBitfield compare_test_results_to_reference_bitmap( |
776 GM* gm, const ConfigData& gRec, const char renderModeDescriptor [], | 777 GM* gm, const ConfigData& gRec, const char renderModeDescriptor [], |
777 SkBitmap& actualBitmap, const SkBitmap* referenceBitmap) { | 778 SkBitmap& actualBitmap, const SkBitmap* referenceBitmap) { |
778 | 779 |
779 SkASSERT(referenceBitmap); | 780 SkASSERT(referenceBitmap); |
780 SkString name = make_name(gm->shortName(), gRec.fName); | 781 SkString name = make_name(gm->shortName(), gRec.fName); |
781 Expectations expectations(*referenceBitmap); | 782 Expectations expectations(*referenceBitmap); |
782 return compare_to_expectations(expectations, actualBitmap, | 783 return compare_to_expectations(expectations, actualBitmap, |
783 name, renderModeDescriptor); | 784 name, renderModeDescriptor, false); |
784 } | 785 } |
785 | 786 |
786 static SkPicture* generate_new_picture(GM* gm, BbhType bbhType, uint32_t rec ordFlags, | 787 static SkPicture* generate_new_picture(GM* gm, BbhType bbhType, uint32_t rec ordFlags, |
787 SkScalar scale = SK_Scalar1) { | 788 SkScalar scale = SK_Scalar1) { |
788 // Pictures are refcounted so must be on heap | 789 // Pictures are refcounted so must be on heap |
789 SkPicture* pict; | 790 SkPicture* pict; |
790 int width = SkScalarCeilToInt(SkScalarMul(SkIntToScalar(gm->getISize().w idth()), scale)); | 791 int width = SkScalarCeilToInt(SkScalarMul(SkIntToScalar(gm->getISize().w idth()), scale)); |
791 int height = SkScalarCeilToInt(SkScalarMul(SkIntToScalar(gm->getISize(). height()), scale)); | 792 int height = SkScalarCeilToInt(SkScalarMul(SkIntToScalar(gm->getISize(). height()), scale)); |
792 | 793 |
793 if (kTileGrid_BbhType == bbhType) { | 794 if (kTileGrid_BbhType == bbhType) { |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
881 // expected in some cases, so don't report a test failure. | 882 // expected in some cases, so don't report a test failure. |
882 if (!generate_image(gm, gRec, context, rt, &bitmap, true)) { | 883 if (!generate_image(gm, gRec, context, rt, &bitmap, true)) { |
883 return kEmptyErrorBitfield; | 884 return kEmptyErrorBitfield; |
884 } | 885 } |
885 return compare_test_results_to_reference_bitmap( | 886 return compare_test_results_to_reference_bitmap( |
886 gm, gRec, "-deferred", bitmap, &referenceBitmap); | 887 gm, gRec, "-deferred", bitmap, &referenceBitmap); |
887 } | 888 } |
888 return kEmptyErrorBitfield; | 889 return kEmptyErrorBitfield; |
889 } | 890 } |
890 | 891 |
891 ErrorBitfield test_pipe_playback(GM* gm, | 892 ErrorBitfield test_pipe_playback(GM* gm, const ConfigData& gRec, |
892 const ConfigData& gRec, | 893 const SkBitmap& referenceBitmap, bool simul ateFailure) { |
893 const SkBitmap& referenceBitmap) { | |
894 ErrorBitfield errors = kEmptyErrorBitfield; | 894 ErrorBitfield errors = kEmptyErrorBitfield; |
895 for (size_t i = 0; i < SK_ARRAY_COUNT(gPipeWritingFlagCombos); ++i) { | 895 for (size_t i = 0; i < SK_ARRAY_COUNT(gPipeWritingFlagCombos); ++i) { |
896 SkBitmap bitmap; | 896 SkBitmap bitmap; |
897 SkISize size = gm->getISize(); | 897 SkISize size = gm->getISize(); |
898 setup_bitmap(gRec, size, &bitmap); | 898 setup_bitmap(gRec, size, &bitmap); |
899 SkCanvas canvas(bitmap); | 899 SkCanvas canvas(bitmap); |
900 installFilter(&canvas); | 900 installFilter(&canvas); |
901 PipeController pipeController(&canvas); | 901 PipeController pipeController(&canvas); |
902 SkGPipeWriter writer; | 902 SkGPipeWriter writer; |
903 SkCanvas* pipeCanvas = writer.startRecording( | 903 SkCanvas* pipeCanvas = writer.startRecording( |
904 &pipeController, gPipeWritingFlagCombos[i].flags); | 904 &pipeController, gPipeWritingFlagCombos[i].flags); |
905 invokeGM(gm, pipeCanvas, false, false); | 905 if (!simulateFailure) { |
906 invokeGM(gm, pipeCanvas, false, false); | |
907 } | |
906 complete_bitmap(&bitmap); | 908 complete_bitmap(&bitmap); |
907 writer.endRecording(); | 909 writer.endRecording(); |
908 SkString string("-pipe"); | 910 SkString string("-pipe"); |
909 string.append(gPipeWritingFlagCombos[i].name); | 911 string.append(gPipeWritingFlagCombos[i].name); |
910 errors |= compare_test_results_to_reference_bitmap( | 912 errors |= compare_test_results_to_reference_bitmap( |
911 gm, gRec, string.c_str(), bitmap, &referenceBitmap); | 913 gm, gRec, string.c_str(), bitmap, &referenceBitmap); |
912 if (errors != kEmptyErrorBitfield) { | 914 if (errors != kEmptyErrorBitfield) { |
913 break; | 915 break; |
914 } | 916 } |
915 } | 917 } |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1053 DEFINE_string(modulo, "", "[--modulo <remainder> <divisor>]: only run tests for which " | 1055 DEFINE_string(modulo, "", "[--modulo <remainder> <divisor>]: only run tests for which " |
1054 "testIndex %% divisor == remainder."); | 1056 "testIndex %% divisor == remainder."); |
1055 DEFINE_bool(pdf, true, "Exercise the pdf rendering test pass."); | 1057 DEFINE_bool(pdf, true, "Exercise the pdf rendering test pass."); |
1056 DEFINE_bool(pipe, true, "Exercise the SkGPipe replay test pass."); | 1058 DEFINE_bool(pipe, true, "Exercise the SkGPipe replay test pass."); |
1057 DEFINE_string2(readPath, r, "", "Read reference images from this dir, and report " | 1059 DEFINE_string2(readPath, r, "", "Read reference images from this dir, and report " |
1058 "any differences between those and the newly generated ones."); | 1060 "any differences between those and the newly generated ones."); |
1059 DEFINE_bool(replay, true, "Exercise the SkPicture replay test pass."); | 1061 DEFINE_bool(replay, true, "Exercise the SkPicture replay test pass."); |
1060 DEFINE_string2(resourcePath, i, "", "Directory that stores image resources."); | 1062 DEFINE_string2(resourcePath, i, "", "Directory that stores image resources."); |
1061 DEFINE_bool(rtree, true, "Exercise the R-Tree variant of SkPicture test pass."); | 1063 DEFINE_bool(rtree, true, "Exercise the R-Tree variant of SkPicture test pass."); |
1062 DEFINE_bool(serialize, true, "Exercise the SkPicture serialization & deserializa tion test pass."); | 1064 DEFINE_bool(serialize, true, "Exercise the SkPicture serialization & deserializa tion test pass."); |
1065 DEFINE_bool(simulatePipePlaybackFailure, false, "Simulate a rendering failure in pipe mode only."); | |
1063 DEFINE_bool(tiledPipe, false, "Exercise tiled SkGPipe replay."); | 1066 DEFINE_bool(tiledPipe, false, "Exercise tiled SkGPipe replay."); |
1064 DEFINE_bool(tileGrid, true, "Exercise the tile grid variant of SkPicture."); | 1067 DEFINE_bool(tileGrid, true, "Exercise the tile grid variant of SkPicture."); |
1065 DEFINE_string(tileGridReplayScales, "", "Space separated list of floating-point scale " | 1068 DEFINE_string(tileGridReplayScales, "", "Space separated list of floating-point scale " |
1066 "factors to be used for tileGrid playback testing. Default value: 1.0"); | 1069 "factors to be used for tileGrid playback testing. Default value: 1.0"); |
1067 DEFINE_string(writeJsonSummaryPath, "", "Write a JSON-formatted result summary t o this file."); | 1070 DEFINE_string(writeJsonSummaryPath, "", "Write a JSON-formatted result summary t o this file."); |
1068 DEFINE_bool2(verbose, v, false, "Print diagnostics (e.g. list each config to be tested)."); | 1071 DEFINE_bool2(verbose, v, false, "Print diagnostics (e.g. list each config to be tested)."); |
1069 DEFINE_string2(writePath, w, "", "Write rendered images into this directory."); | 1072 DEFINE_string2(writePath, w, "", "Write rendered images into this directory."); |
1070 DEFINE_string2(writePicturePath, wp, "", "Write .skp files into this directory." ); | 1073 DEFINE_string2(writePicturePath, wp, "", "Write .skp files into this directory." ); |
1071 | 1074 |
1072 static int findConfig(const char config[]) { | 1075 static int findConfig(const char config[]) { |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1359 gm, compareConfig, suffix.c_str(), bitmap, &comparisonBitmap); | 1362 gm, compareConfig, suffix.c_str(), bitmap, &comparisonBitmap); |
1360 } | 1363 } |
1361 } | 1364 } |
1362 | 1365 |
1363 // run the pipe centric GM steps | 1366 // run the pipe centric GM steps |
1364 if (!(gmFlags & GM::kSkipPipe_Flag)) { | 1367 if (!(gmFlags & GM::kSkipPipe_Flag)) { |
1365 | 1368 |
1366 ErrorBitfield pipeErrors = kEmptyErrorBitfield; | 1369 ErrorBitfield pipeErrors = kEmptyErrorBitfield; |
1367 | 1370 |
1368 if (FLAGS_pipe) { | 1371 if (FLAGS_pipe) { |
1369 pipeErrors |= gmmain.test_pipe_playback(gm, compareConfig, compariso nBitmap); | 1372 pipeErrors |= gmmain.test_pipe_playback(gm, compareConfig, compariso nBitmap, |
1373 FLAGS_simulatePipePlaybackFa ilure); | |
1370 } | 1374 } |
1371 | 1375 |
1372 if ((kEmptyErrorBitfield == pipeErrors) && | 1376 if ((kEmptyErrorBitfield == pipeErrors) && |
1373 FLAGS_tiledPipe && !(gmFlags & GM::kSkipTiled_Flag)) { | 1377 FLAGS_tiledPipe && !(gmFlags & GM::kSkipTiled_Flag)) { |
1374 pipeErrors |= gmmain.test_tiled_pipe_playback(gm, compareConfig, com parisonBitmap); | 1378 pipeErrors |= gmmain.test_tiled_pipe_playback(gm, compareConfig, com parisonBitmap); |
1375 } | 1379 } |
1376 | 1380 |
1377 errorsForAllModes |= pipeErrors; | 1381 errorsForAllModes |= pipeErrors; |
1378 } | 1382 } |
1379 return errorsForAllModes; | 1383 return errorsForAllModes; |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1524 moduloRemainder = -1; | 1528 moduloRemainder = -1; |
1525 } | 1529 } |
1526 if (moduloRemainder < 0 || moduloRemainder >= moduloDivisor) { | 1530 if (moduloRemainder < 0 || moduloRemainder >= moduloDivisor) { |
1527 moduloRemainder = -1; | 1531 moduloRemainder = -1; |
1528 } | 1532 } |
1529 | 1533 |
1530 // Accumulate success of all tests. | 1534 // Accumulate success of all tests. |
1531 int testsRun = 0; | 1535 int testsRun = 0; |
1532 int testsPassed = 0; | 1536 int testsPassed = 0; |
1533 int testsFailed = 0; | 1537 int testsFailed = 0; |
1538 int testsWithDrawingModeDiscrepancies = 0; | |
1534 int testsMissingReferenceImages = 0; | 1539 int testsMissingReferenceImages = 0; |
1535 | 1540 |
1536 int gmIndex = -1; | 1541 int gmIndex = -1; |
1537 SkString moduloStr; | 1542 SkString moduloStr; |
1538 | 1543 |
1539 // If we will be writing out files, prepare subdirectories. | 1544 // If we will be writing out files, prepare subdirectories. |
1540 if (FLAGS_writePath.count() == 1) { | 1545 if (FLAGS_writePath.count() == 1) { |
1541 if (!sk_mkdir(FLAGS_writePath[0])) { | 1546 if (!sk_mkdir(FLAGS_writePath[0])) { |
1542 return -1; | 1547 return -1; |
1543 } | 1548 } |
(...skipping 25 matching lines...) Expand all Loading... | |
1569 const char* shortName = gm->shortName(); | 1574 const char* shortName = gm->shortName(); |
1570 if (skip_name(FLAGS_match, shortName)) { | 1575 if (skip_name(FLAGS_match, shortName)) { |
1571 SkDELETE(gm); | 1576 SkDELETE(gm); |
1572 continue; | 1577 continue; |
1573 } | 1578 } |
1574 | 1579 |
1575 SkISize size = gm->getISize(); | 1580 SkISize size = gm->getISize(); |
1576 gm_fprintf(stdout, "%sdrawing... %s [%d %d]\n", moduloStr.c_str(), short Name, | 1581 gm_fprintf(stdout, "%sdrawing... %s [%d %d]\n", moduloStr.c_str(), short Name, |
1577 size.width(), size.height()); | 1582 size.width(), size.height()); |
1578 | 1583 |
1579 ErrorBitfield testErrors = kEmptyErrorBitfield; | 1584 ErrorBitfield compositeErrors = kEmptyErrorBitfield; |
1580 testErrors |= run_multiple_configs(gmmain, gm, configs, grFactory); | 1585 ErrorBitfield multipleConfigErrors = run_multiple_configs(gmmain, gm, co nfigs, grFactory); |
1586 compositeErrors |= multipleConfigErrors; | |
1581 | 1587 |
1582 SkBitmap comparisonBitmap; | 1588 SkBitmap comparisonBitmap; |
1583 const ConfigData compareConfig = | 1589 const ConfigData compareConfig = |
1584 { SkBitmap::kARGB_8888_Config, kRaster_Backend, kDontCare_GLContextT ype, 0, kRW_ConfigFlag, "comparison", false }; | 1590 { SkBitmap::kARGB_8888_Config, kRaster_Backend, kDontCare_GLContextT ype, 0, |
1585 testErrors |= gmmain.generate_image(gm, compareConfig, NULL, NULL, &comp arisonBitmap, false); | 1591 kRW_ConfigFlag, "comparison", false }; |
1592 ErrorBitfield generateModeBaselineErrors = gmmain.generate_image( | |
1593 gm, compareConfig, NULL, NULL, &comparisonBitmap, false); | |
1594 compositeErrors |= generateModeBaselineErrors; | |
1586 | 1595 |
1587 // TODO(epoger): only run this if gmmain.generate_image() succeeded? | 1596 // TODO(epoger): only run this if generateModeBaselineErrors is kEmptyEr rorBitfield? |
1588 // Otherwise, what are we comparing against? | 1597 // Otherwise, what are we comparing against? |
1589 testErrors |= run_multiple_modes(gmmain, gm, compareConfig, comparisonBi tmap); | 1598 ErrorBitfield multipleModeErrors = run_multiple_modes(gmmain, gm, compar eConfig, |
1599 comparisonBitmap); | |
1600 compositeErrors |= multipleModeErrors; | |
1590 | 1601 |
1591 // Update overall results. | 1602 // A non-ignorable error in run_multiple_configs(), or ANY error in |
1592 // We only tabulate the particular error types that we currently | 1603 // generate_image()/run_multiple_modes(), counts as a failure. |
1593 // care about (e.g., missing reference images). Later on, if we | |
1594 // want to also tabulate other error types, we can do so. | |
1595 testsRun++; | 1604 testsRun++; |
1596 if (!gmmain.fExpectationsSource.get() || | 1605 if (kEmptyErrorBitfield != multipleModeErrors) { |
1597 (kEmptyErrorBitfield != (kMissingExpectations_ErrorBitmask & testErr ors))) { | 1606 testsWithDrawingModeDiscrepancies++; |
1598 testsMissingReferenceImages++; | 1607 testsFailed++; |
1599 } | 1608 } else if (kEmptyErrorBitfield != generateModeBaselineErrors) { |
1600 if (testErrors == (testErrors & kIgnorable_ErrorBitmask)) { | 1609 testsFailed++; |
1610 } else if (compositeErrors == (compositeErrors & kIgnorable_ErrorBitmask )) { | |
1601 testsPassed++; | 1611 testsPassed++; |
1602 } else { | 1612 } else { |
1603 testsFailed++; | 1613 testsFailed++; |
1604 } | 1614 } |
1615 // Any other result categories we care to report. | |
1616 if (!gmmain.fExpectationsSource.get() || | |
1617 (kEmptyErrorBitfield != (kMissingExpectations_ErrorBitmask & composi teErrors))) { | |
1618 testsMissingReferenceImages++; | |
1619 } | |
1605 | 1620 |
1606 SkDELETE(gm); | 1621 SkDELETE(gm); |
1607 } | 1622 } |
1608 gm_fprintf(stdout, "Ran %d tests: %d passed, %d failed, %d missing reference images\n", | 1623 gm_fprintf(stdout, "Ran %d tests: %d passed, %d failed, %d with drawing mode discrepancies, " |
1609 testsRun, testsPassed, testsFailed, testsMissingReferenceImages); | 1624 "%d missing reference images\n", |
1625 testsRun, testsPassed, testsFailed, testsWithDrawingModeDiscrepan cies, | |
1626 testsMissingReferenceImages); | |
1610 gmmain.ListErrors(); | 1627 gmmain.ListErrors(); |
1611 | 1628 |
1612 if (FLAGS_writeJsonSummaryPath.count() == 1) { | 1629 if (FLAGS_writeJsonSummaryPath.count() == 1) { |
1613 Json::Value actualResults; | 1630 Json::Value actualResults; |
1614 actualResults[kJsonKey_ActualResults_Failed] = | 1631 actualResults[kJsonKey_ActualResults_Failed] = |
1615 gmmain.fJsonActualResults_Failed; | 1632 gmmain.fJsonActualResults_Failed; |
1616 actualResults[kJsonKey_ActualResults_FailureIgnored] = | 1633 actualResults[kJsonKey_ActualResults_FailureIgnored] = |
1617 gmmain.fJsonActualResults_FailureIgnored; | 1634 gmmain.fJsonActualResults_FailureIgnored; |
1618 actualResults[kJsonKey_ActualResults_NoComparison] = | 1635 actualResults[kJsonKey_ActualResults_NoComparison] = |
1619 gmmain.fJsonActualResults_NoComparison; | 1636 gmmain.fJsonActualResults_NoComparison; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1653 if (FLAGS_forceBWtext) { | 1670 if (FLAGS_forceBWtext) { |
1654 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); | 1671 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); |
1655 } | 1672 } |
1656 } | 1673 } |
1657 | 1674 |
1658 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 1675 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
1659 int main(int argc, char * const argv[]) { | 1676 int main(int argc, char * const argv[]) { |
1660 return tool_main(argc, (char**) argv); | 1677 return tool_main(argc, (char**) argv); |
1661 } | 1678 } |
1662 #endif | 1679 #endif |
OLD | NEW |