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