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

Side by Side Diff: gm/gmmain.cpp

Issue 12807006: gm: report drawing mode discrepancies (e.g. pipe vs tiled) explicitly (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: sync_to_r8292 Created 7 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | gm/tests/outputs/compared-against-different-pixels-images/output-expected/stdout » ('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 /*
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | gm/tests/outputs/compared-against-different-pixels-images/output-expected/stdout » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698