OLD | NEW |
1 /* | 1 /* |
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 * |
(...skipping 851 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 } | 862 } |
863 | 863 |
864 /** | 864 /** |
865 * Add this result to the appropriate JSON collection of actual results (but
just ONE), | 865 * Add this result to the appropriate JSON collection of actual results (but
just ONE), |
866 * depending on errors encountered. | 866 * depending on errors encountered. |
867 */ | 867 */ |
868 void add_actual_results_to_json_summary(const char testName[], | 868 void add_actual_results_to_json_summary(const char testName[], |
869 const GmResultDigest &actualResultDi
gest, | 869 const GmResultDigest &actualResultDi
gest, |
870 ErrorCombination errors, | 870 ErrorCombination errors, |
871 bool ignoreFailure) { | 871 bool ignoreFailure) { |
| 872 // FIXME (scroggo): JSON is disabled in Android framework until we solve |
| 873 // skbug.com/2448 |
| 874 #ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK |
872 Json::Value jsonActualResults = actualResultDigest.asJsonTypeValuePair()
; | 875 Json::Value jsonActualResults = actualResultDigest.asJsonTypeValuePair()
; |
873 Json::Value *resultCollection = NULL; | 876 Json::Value *resultCollection = NULL; |
874 | 877 |
875 if (errors.isEmpty()) { | 878 if (errors.isEmpty()) { |
876 resultCollection = &this->fJsonActualResults_Succeeded; | 879 resultCollection = &this->fJsonActualResults_Succeeded; |
877 } else if (errors.includes(kRenderModeMismatch_ErrorType)) { | 880 } else if (errors.includes(kRenderModeMismatch_ErrorType)) { |
878 resultCollection = &this->fJsonActualResults_Failed; | 881 resultCollection = &this->fJsonActualResults_Failed; |
879 } else if (errors.includes(kExpectationsMismatch_ErrorType)) { | 882 } else if (errors.includes(kExpectationsMismatch_ErrorType)) { |
880 if (ignoreFailure) { | 883 if (ignoreFailure) { |
881 resultCollection = &this->fJsonActualResults_FailureIgnored; | 884 resultCollection = &this->fJsonActualResults_FailureIgnored; |
(...skipping 11 matching lines...) Expand all Loading... |
893 // JSON file, we should fix this (and add a test case for | 896 // JSON file, we should fix this (and add a test case for |
894 // which an expectation is given but the test is never | 897 // which an expectation is given but the test is never |
895 // run). | 898 // run). |
896 resultCollection = &this->fJsonActualResults_NoComparison; | 899 resultCollection = &this->fJsonActualResults_NoComparison; |
897 } | 900 } |
898 | 901 |
899 // If none of the above cases match, we don't add it to ANY tally of act
ual results. | 902 // If none of the above cases match, we don't add it to ANY tally of act
ual results. |
900 if (resultCollection) { | 903 if (resultCollection) { |
901 (*resultCollection)[testName] = jsonActualResults; | 904 (*resultCollection)[testName] = jsonActualResults; |
902 } | 905 } |
| 906 #endif |
903 } | 907 } |
904 | 908 |
905 /** | 909 /** |
906 * Add this test to the JSON collection of expected results. | 910 * Add this test to the JSON collection of expected results. |
907 */ | 911 */ |
908 void add_expected_results_to_json_summary(const char testName[], | 912 void add_expected_results_to_json_summary(const char testName[], |
909 Expectations expectations) { | 913 Expectations expectations) { |
| 914 // FIXME (scroggo): JSON is disabled in Android framework until we solve |
| 915 // skbug.com/2448 |
| 916 #ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK |
910 this->fJsonExpectedResults[testName] = expectations.asJsonValue(); | 917 this->fJsonExpectedResults[testName] = expectations.asJsonValue(); |
| 918 #endif |
911 } | 919 } |
912 | 920 |
913 /** | 921 /** |
914 * Compare actualBitmap to expectations stored in this->fExpectationsSource. | 922 * Compare actualBitmap to expectations stored in this->fExpectationsSource. |
915 * | 923 * |
916 * @param gm which test generated the actualBitmap | 924 * @param gm which test generated the actualBitmap |
917 * @param gRec | 925 * @param gRec |
918 * @param configName The config name to look for in the expectation file. | 926 * @param configName The config name to look for in the expectation file. |
919 * @param actualBitmapAndDigest ptr to bitmap generated by this run, or NULL | 927 * @param actualBitmapAndDigest ptr to bitmap generated by this run, or NULL |
920 * if we don't have a usable bitmap representation | 928 * if we don't have a usable bitmap representation |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1260 // collection of tests that have failed with each ErrorType | 1268 // collection of tests that have failed with each ErrorType |
1261 SkTArray<SkString> fFailedTests[kLast_ErrorType+1]; | 1269 SkTArray<SkString> fFailedTests[kLast_ErrorType+1]; |
1262 SkTArray<SkString> fTestsSkippedOnAllRenderModes; | 1270 SkTArray<SkString> fTestsSkippedOnAllRenderModes; |
1263 int fTestsRun; | 1271 int fTestsRun; |
1264 SkTDict<int> fRenderModesEncountered; | 1272 SkTDict<int> fRenderModesEncountered; |
1265 | 1273 |
1266 // Where to read expectations (expected image hash digests, etc.) from. | 1274 // Where to read expectations (expected image hash digests, etc.) from. |
1267 // If unset, we don't do comparisons. | 1275 // If unset, we don't do comparisons. |
1268 SkAutoTUnref<ExpectationsSource> fExpectationsSource; | 1276 SkAutoTUnref<ExpectationsSource> fExpectationsSource; |
1269 | 1277 |
| 1278 // FIXME (scroggo): JSON is disabled in Android framework until we solve |
| 1279 // skbug.com/2448 |
| 1280 #ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK |
1270 // JSON summaries that we generate as we go (just for output). | 1281 // JSON summaries that we generate as we go (just for output). |
1271 Json::Value fJsonExpectedResults; | 1282 Json::Value fJsonExpectedResults; |
1272 Json::Value fJsonActualResults_Failed; | 1283 Json::Value fJsonActualResults_Failed; |
1273 Json::Value fJsonActualResults_FailureIgnored; | 1284 Json::Value fJsonActualResults_FailureIgnored; |
1274 Json::Value fJsonActualResults_NoComparison; | 1285 Json::Value fJsonActualResults_NoComparison; |
1275 Json::Value fJsonActualResults_Succeeded; | 1286 Json::Value fJsonActualResults_Succeeded; |
1276 | 1287 #endif |
1277 }; // end of GMMain class definition | 1288 }; // end of GMMain class definition |
1278 | 1289 |
1279 #if SK_SUPPORT_GPU | 1290 #if SK_SUPPORT_GPU |
1280 static const GLContextType kDontCare_GLContextType = GrContextFactory::kNative_G
LContextType; | 1291 static const GLContextType kDontCare_GLContextType = GrContextFactory::kNative_G
LContextType; |
1281 #else | 1292 #else |
1282 static const GLContextType kDontCare_GLContextType = 0; | 1293 static const GLContextType kDontCare_GLContextType = 0; |
1283 #endif | 1294 #endif |
1284 | 1295 |
1285 static const ConfigData gRec[] = { | 1296 static const ConfigData gRec[] = { |
1286 { SkBitmap::kARGB_8888_Config, kRaster_Backend, kDontCare_GLContextType,
0, kRW_ConfigFlag, "8888", true }, | 1297 { SkBitmap::kARGB_8888_Config, kRaster_Backend, kDontCare_GLContextType,
0, kRW_ConfigFlag, "8888", true }, |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1466 DEFINE_bool(serialize, false, "Exercise the SkPicture serialization & deserializ
ation test pass."); | 1477 DEFINE_bool(serialize, false, "Exercise the SkPicture serialization & deserializ
ation test pass."); |
1467 DEFINE_bool(simulatePipePlaybackFailure, false, "Simulate a rendering failure in
pipe mode only."); | 1478 DEFINE_bool(simulatePipePlaybackFailure, false, "Simulate a rendering failure in
pipe mode only."); |
1468 DEFINE_bool(tiledPipe, false, "Exercise tiled SkGPipe replay."); | 1479 DEFINE_bool(tiledPipe, false, "Exercise tiled SkGPipe replay."); |
1469 DEFINE_bool(tileGrid, false, "Exercise the tile grid variant of SkPicture."); | 1480 DEFINE_bool(tileGrid, false, "Exercise the tile grid variant of SkPicture."); |
1470 DEFINE_string(tileGridReplayScales, "", "Space separated list of floating-point
scale " | 1481 DEFINE_string(tileGridReplayScales, "", "Space separated list of floating-point
scale " |
1471 "factors to be used for tileGrid playback testing. Default value:
1.0"); | 1482 "factors to be used for tileGrid playback testing. Default value:
1.0"); |
1472 DEFINE_bool2(verbose, v, false, "Give more detail (e.g. list all GMs run, more i
nfo about " | 1483 DEFINE_bool2(verbose, v, false, "Give more detail (e.g. list all GMs run, more i
nfo about " |
1473 "each test)."); | 1484 "each test)."); |
1474 DEFINE_bool(writeChecksumBasedFilenames, false, "When writing out actual images,
use checksum-" | 1485 DEFINE_bool(writeChecksumBasedFilenames, false, "When writing out actual images,
use checksum-" |
1475 "based filenames, as rebaseline.py will use when downloading them fr
om Google Storage"); | 1486 "based filenames, as rebaseline.py will use when downloading them fr
om Google Storage"); |
| 1487 // FIXME (scroggo): JSON is disabled in Android framework until we solve |
| 1488 // skbug.com/2448 |
| 1489 #ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK |
1476 DEFINE_string(writeJsonSummaryPath, "", "Write a JSON-formatted result summary t
o this file."); | 1490 DEFINE_string(writeJsonSummaryPath, "", "Write a JSON-formatted result summary t
o this file."); |
| 1491 #endif |
1477 DEFINE_string2(writePath, w, "", "Write rendered images into this directory."); | 1492 DEFINE_string2(writePath, w, "", "Write rendered images into this directory."); |
1478 DEFINE_string2(writePicturePath, p, "", "Write .skp files into this directory.")
; | 1493 DEFINE_string2(writePicturePath, p, "", "Write .skp files into this directory.")
; |
1479 DEFINE_int32(pdfJpegQuality, -1, "Encodes images in JPEG at quality level N, " | 1494 DEFINE_int32(pdfJpegQuality, -1, "Encodes images in JPEG at quality level N, " |
1480 "which can be in range 0-100). N = -1 will disable JPEG compression
. " | 1495 "which can be in range 0-100). N = -1 will disable JPEG compression
. " |
1481 "Default is N = 100, maximum quality."); | 1496 "Default is N = 100, maximum quality."); |
1482 // TODO(edisonn): pass a matrix instead of forcePerspectiveMatrix | 1497 // TODO(edisonn): pass a matrix instead of forcePerspectiveMatrix |
1483 // Either the 9 numbers defining the matrix | 1498 // Either the 9 numbers defining the matrix |
1484 // or probably more readable would be to replace it with a set of a few predicat
es | 1499 // or probably more readable would be to replace it with a set of a few predicat
es |
1485 // Like --prerotate 100 200 10 --posttranslate 10, 10 | 1500 // Like --prerotate 100 200 10 --posttranslate 10, 10 |
1486 // Probably define spacial names like centerx, centery, top, bottom, left, right | 1501 // Probably define spacial names like centerx, centery, top, bottom, left, right |
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2191 SkDebugf("readPath %s does not exist!\n", readPath); | 2206 SkDebugf("readPath %s does not exist!\n", readPath); |
2192 return false; | 2207 return false; |
2193 } | 2208 } |
2194 if (sk_isdir(readPath)) { | 2209 if (sk_isdir(readPath)) { |
2195 if (FLAGS_verbose) { | 2210 if (FLAGS_verbose) { |
2196 SkDebugf("reading from %s\n", readPath); | 2211 SkDebugf("reading from %s\n", readPath); |
2197 } | 2212 } |
2198 gmmain->fExpectationsSource.reset(SkNEW_ARGS( | 2213 gmmain->fExpectationsSource.reset(SkNEW_ARGS( |
2199 IndividualImageExpectationsSource, (readPath))); | 2214 IndividualImageExpectationsSource, (readPath))); |
2200 } else { | 2215 } else { |
| 2216 // FIXME (scroggo): JSON is disabled in Android framework until we solve |
| 2217 // skbug.com/2448 |
| 2218 #ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK |
2201 if (FLAGS_verbose) { | 2219 if (FLAGS_verbose) { |
2202 SkDebugf("reading expectations from JSON summary file %s\n", rea
dPath); | 2220 SkDebugf("reading expectations from JSON summary file %s\n", rea
dPath); |
2203 } | 2221 } |
2204 gmmain->fExpectationsSource.reset(SkNEW_ARGS(JsonExpectationsSource,
(readPath))); | 2222 gmmain->fExpectationsSource.reset(SkNEW_ARGS(JsonExpectationsSource,
(readPath))); |
| 2223 #endif |
2205 } | 2224 } |
2206 } | 2225 } |
2207 return true; | 2226 return true; |
2208 } | 2227 } |
2209 | 2228 |
2210 static bool parse_flags_resource_path() { | 2229 static bool parse_flags_resource_path() { |
2211 if (FLAGS_resourcePath.count() == 1) { | 2230 if (FLAGS_resourcePath.count() == 1) { |
2212 GM::SetResourcePath(FLAGS_resourcePath[0]); | 2231 GM::SetResourcePath(FLAGS_resourcePath[0]); |
2213 } | 2232 } |
2214 return true; | 2233 return true; |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2401 // https://code.google.com/p/skia/issues/detail?id=1222 | 2420 // https://code.google.com/p/skia/issues/detail?id=1222 |
2402 // ('GM is unexpectedly skipping tests on Android') | 2421 // ('GM is unexpectedly skipping tests on Android') |
2403 #ifndef SK_BUILD_FOR_ANDROID | 2422 #ifndef SK_BUILD_FOR_ANDROID |
2404 if (expectedNumberOfTests != gmmain.fTestsRun) { | 2423 if (expectedNumberOfTests != gmmain.fTestsRun) { |
2405 SkDebugf("expected %d tests, but ran or skipped %d tests\n", | 2424 SkDebugf("expected %d tests, but ran or skipped %d tests\n", |
2406 expectedNumberOfTests, gmmain.fTestsRun); | 2425 expectedNumberOfTests, gmmain.fTestsRun); |
2407 reportError = true; | 2426 reportError = true; |
2408 } | 2427 } |
2409 #endif | 2428 #endif |
2410 | 2429 |
| 2430 // FIXME (scroggo): JSON is disabled in Android framework until we solve |
| 2431 // skbug.com/2448 |
| 2432 #ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK |
2411 if (FLAGS_writeJsonSummaryPath.count() == 1) { | 2433 if (FLAGS_writeJsonSummaryPath.count() == 1) { |
2412 Json::Value root = CreateJsonTree( | 2434 Json::Value root = CreateJsonTree( |
2413 gmmain.fJsonExpectedResults, | 2435 gmmain.fJsonExpectedResults, |
2414 gmmain.fJsonActualResults_Failed, gmmain.fJsonActualResults_FailureI
gnored, | 2436 gmmain.fJsonActualResults_Failed, gmmain.fJsonActualResults_FailureI
gnored, |
2415 gmmain.fJsonActualResults_NoComparison, gmmain.fJsonActualResults_Su
cceeded); | 2437 gmmain.fJsonActualResults_NoComparison, gmmain.fJsonActualResults_Su
cceeded); |
2416 std::string jsonStdString = root.toStyledString(); | 2438 std::string jsonStdString = root.toStyledString(); |
2417 SkFILEWStream stream(FLAGS_writeJsonSummaryPath[0]); | 2439 SkFILEWStream stream(FLAGS_writeJsonSummaryPath[0]); |
2418 stream.write(jsonStdString.c_str(), jsonStdString.length()); | 2440 stream.write(jsonStdString.c_str(), jsonStdString.length()); |
2419 } | 2441 } |
| 2442 #endif |
2420 | 2443 |
2421 #if SK_SUPPORT_GPU | 2444 #if SK_SUPPORT_GPU |
2422 | 2445 |
2423 #if GR_CACHE_STATS | 2446 #if GR_CACHE_STATS |
2424 for (int i = 0; i < configs.count(); i++) { | 2447 for (int i = 0; i < configs.count(); i++) { |
2425 ConfigData config = gRec[configs[i]]; | 2448 ConfigData config = gRec[configs[i]]; |
2426 | 2449 |
2427 if (FLAGS_verbose && (kGPU_Backend == config.fBackend)) { | 2450 if (FLAGS_verbose && (kGPU_Backend == config.fBackend)) { |
2428 GrContext* gr = grFactory->get(config.fGLContextType); | 2451 GrContext* gr = grFactory->get(config.fGLContextType); |
2429 | 2452 |
(...skipping 26 matching lines...) Expand all Loading... |
2456 if (FLAGS_forceBWtext) { | 2479 if (FLAGS_forceBWtext) { |
2457 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); | 2480 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); |
2458 } | 2481 } |
2459 } | 2482 } |
2460 | 2483 |
2461 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 2484 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
2462 int main(int argc, char * const argv[]) { | 2485 int main(int argc, char * const argv[]) { |
2463 return tool_main(argc, (char**) argv); | 2486 return tool_main(argc, (char**) argv); |
2464 } | 2487 } |
2465 #endif | 2488 #endif |
OLD | NEW |