Index: gm/gmmain.cpp |
=================================================================== |
--- gm/gmmain.cpp (revision 9186) |
+++ gm/gmmain.cpp (working copy) |
@@ -192,7 +192,25 @@ |
GMMain() : fUseFileHierarchy(false), fIgnorableErrorTypes(kDefaultIgnorableErrorTypes), |
fMismatchPath(NULL), fTestsRun(0), fRenderModesEncountered(1) {} |
- SkString make_name(const char shortName[], const char configName[]) { |
+ SkString make_filename(const char *path, |
+ const char *renderModeDescriptor, |
+ const char *shortNamePlusConfig, |
+ const char *suffix) { |
+ SkString filename(shortNamePlusConfig); |
+ filename.append(renderModeDescriptor); |
+ filename.appendUnichar('.'); |
+ filename.append(suffix); |
+ return SkPathJoin(path, filename.c_str()); |
+ } |
+ |
+ /** |
+ * Assemble shortNamePlusConfig from (surprise!) shortName and configName. |
+ * |
+ * The method for doing so depends on whether we are using hierarchical naming. |
+ * For example, shortName "selftest1" and configName "8888" could be assembled into |
+ * either "selftest1_8888" or "8888/selftest1". |
+ */ |
+ SkString make_shortname_plus_config(const char *shortName, const char *configName) { |
epoger
2013/05/19 09:00:43
Patchset 2 renames some variables, parameters, and
|
SkString name; |
if (0 == strlen(configName)) { |
name.append(shortName); |
@@ -269,7 +287,8 @@ |
* We even record successes, and errors that we regard as |
* "ignorable"; we can filter them out later. |
*/ |
- void RecordTestResults(const ErrorCombination& errorCombination, const SkString& name, |
+ void RecordTestResults(const ErrorCombination& errorCombination, |
+ const SkString& shortNamePlusConfig, |
const char renderModeDescriptor []) { |
// Things to do regardless of errorCombination. |
fTestsRun++; |
@@ -283,7 +302,7 @@ |
} |
// Things to do only if there is some error condition. |
- SkString fullName = name; |
+ SkString fullName = shortNamePlusConfig; |
fullName.append(renderModeDescriptor); |
for (int typeInt = 0; typeInt <= kLast_ErrorType; typeInt++) { |
ErrorType type = static_cast<ErrorType>(typeInt); |
@@ -603,7 +622,8 @@ |
} |
ErrorCombination write_reference_image(const ConfigData& gRec, const char writePath [], |
- const char renderModeDescriptor [], const SkString& name, |
+ const char renderModeDescriptor [], |
+ const SkString& shortNamePlusConfig, |
SkBitmap& bitmap, SkDynamicMemoryWStream* document) { |
SkString path; |
bool success = false; |
@@ -611,17 +631,17 @@ |
gRec.fBackend == kGPU_Backend || |
(gRec.fBackend == kPDF_Backend && CAN_IMAGE_PDF)) { |
- path = make_filename(writePath, renderModeDescriptor, name.c_str(), |
+ path = make_filename(writePath, renderModeDescriptor, shortNamePlusConfig.c_str(), |
kPNG_FileExtension); |
success = write_bitmap(path, bitmap); |
} |
if (kPDF_Backend == gRec.fBackend) { |
- path = make_filename(writePath, renderModeDescriptor, name.c_str(), |
+ path = make_filename(writePath, renderModeDescriptor, shortNamePlusConfig.c_str(), |
"pdf"); |
success = write_document(path, *document); |
} |
if (kXPS_Backend == gRec.fBackend) { |
- path = make_filename(writePath, renderModeDescriptor, name.c_str(), |
+ path = make_filename(writePath, renderModeDescriptor, shortNamePlusConfig.c_str(), |
"xps"); |
success = write_document(path, *document); |
} |
@@ -639,7 +659,7 @@ |
// |
// When we make that change, we should probably add a |
// WritingReferenceImage test to the gm self-tests.) |
- RecordTestResults(errors, name, renderModeDescriptor); |
+ RecordTestResults(errors, shortNamePlusConfig, renderModeDescriptor); |
return errors; |
} |
} |
@@ -709,7 +729,7 @@ |
* |
* @param expectations what expectations to compare actualBitmap against |
* @param actualBitmap the image we actually generated |
- * @param baseNameString name of test without renderModeDescriptor added |
+ * @param shortNamePlusConfig name of test without renderModeDescriptor added |
* @param renderModeDescriptor e.g., "-rtree", "-deferred" |
* @param addToJsonSummary whether to add these results (both actual and |
* expected) to the JSON summary. Regardless of this setting, if |
@@ -720,7 +740,7 @@ |
*/ |
ErrorCombination compare_to_expectations(Expectations expectations, |
const SkBitmap& actualBitmap, |
- const SkString& baseNameString, |
+ const SkString& shortNamePlusConfig, |
const char renderModeDescriptor[], |
bool addToJsonSummary) { |
ErrorCombination errors; |
@@ -730,7 +750,7 @@ |
if (!SkBitmapHasher::ComputeDigest(actualBitmap, &actualBitmapHash)) { |
actualBitmapHash = 0; |
} |
- SkString completeNameString = baseNameString; |
+ SkString completeNameString = shortNamePlusConfig; |
completeNameString.append(renderModeDescriptor); |
completeNameString.append("."); |
completeNameString.append(kPNG_FileExtension); |
@@ -753,7 +773,7 @@ |
if (fMismatchPath) { |
SkString path = |
make_filename(fMismatchPath, renderModeDescriptor, |
- baseNameString.c_str(), kPNG_FileExtension); |
+ shortNamePlusConfig.c_str(), kPNG_FileExtension); |
write_bitmap(path, actualBitmap); |
} |
@@ -764,7 +784,7 @@ |
report_bitmap_diffs(*expectedBitmapPtr, actualBitmap, completeName); |
} |
} |
- RecordTestResults(errors, baseNameString, renderModeDescriptor); |
+ RecordTestResults(errors, shortNamePlusConfig, renderModeDescriptor); |
if (addToJsonSummary) { |
add_actual_results_to_json_summary(completeName, actualBitmapHash, errors, |
@@ -842,9 +862,12 @@ |
GM* gm, const ConfigData& gRec, const char writePath[], |
SkBitmap& actualBitmap, SkDynamicMemoryWStream* pdf) { |
- SkString name = make_name(gm->shortName(), gRec.fName); |
+ SkString shortNamePlusConfig = make_shortname_plus_config(gm->shortName(), gRec.fName); |
+ SkString nameWithExtension(shortNamePlusConfig); |
+ nameWithExtension.append("."); |
+ nameWithExtension.append(kPNG_FileExtension); |
+ |
ErrorCombination errors; |
- |
ExpectationsSource *expectationsSource = this->fExpectationsSource.get(); |
if (expectationsSource && (gRec.fFlags & kRead_ConfigFlag)) { |
/* |
@@ -860,12 +883,9 @@ |
* force_all_opaque(). |
* See comments above complete_bitmap() for more detail. |
*/ |
- SkString nameWithExtension(name); |
- nameWithExtension.append("."); |
- nameWithExtension.append(kPNG_FileExtension); |
Expectations expectations = expectationsSource->get(nameWithExtension.c_str()); |
errors.add(compare_to_expectations(expectations, actualBitmap, |
- name, "", true)); |
+ shortNamePlusConfig, "", true)); |
} else { |
// If we are running without expectations, we still want to |
// record the actual results. |
@@ -875,13 +895,11 @@ |
if (!SkBitmapHasher::ComputeDigest(actualBitmap, &actualBitmapHash)) { |
actualBitmapHash = 0; |
} |
- SkString nameWithExtension(name); |
- nameWithExtension.append("."); |
- nameWithExtension.append(kPNG_FileExtension); |
add_actual_results_to_json_summary(nameWithExtension.c_str(), actualBitmapHash, |
ErrorCombination(kMissingExpectations_ErrorType), |
false); |
- RecordTestResults(ErrorCombination(kMissingExpectations_ErrorType), name, ""); |
+ RecordTestResults(ErrorCombination(kMissingExpectations_ErrorType), |
+ shortNamePlusConfig, ""); |
} |
// TODO: Consider moving this into compare_to_expectations(), |
@@ -890,7 +908,7 @@ |
// renderModes of all tests! That would be a lot of files. |
if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) { |
errors.add(write_reference_image(gRec, writePath, "", |
- name, actualBitmap, pdf)); |
+ shortNamePlusConfig, actualBitmap, pdf)); |
} |
return errors; |
@@ -899,19 +917,19 @@ |
/** |
* Compare actualBitmap to referenceBitmap. |
* |
- * @param baseNameString name of test without renderModeDescriptor added |
+ * @param shortNamePlusConfig name of test without renderModeDescriptor added |
* @param renderModeDescriptor |
* @param actualBitmap actual bitmap generated by this run |
* @param referenceBitmap bitmap we expected to be generated |
*/ |
ErrorCombination compare_test_results_to_reference_bitmap( |
- const SkString& baseNameString, const char renderModeDescriptor[], |
+ const SkString& shortNamePlusConfig, const char renderModeDescriptor[], |
SkBitmap& actualBitmap, const SkBitmap* referenceBitmap) { |
SkASSERT(referenceBitmap); |
Expectations expectations(*referenceBitmap); |
return compare_to_expectations(expectations, actualBitmap, |
- baseNameString, renderModeDescriptor, false); |
+ shortNamePlusConfig, renderModeDescriptor, false); |
} |
static SkPicture* generate_new_picture(GM* gm, BbhType bbhType, uint32_t recordFlags, |
@@ -1028,23 +1046,25 @@ |
// something like kImageGeneration_ErrorType? |
return kEmpty_ErrorCombination; |
} |
- const SkString name = make_name(gm->shortName(), gRec.fName); |
+ const SkString shortNamePlusConfig = make_shortname_plus_config(gm->shortName(), |
+ gRec.fName); |
return compare_test_results_to_reference_bitmap( |
- name, renderModeDescriptor, bitmap, &referenceBitmap); |
+ shortNamePlusConfig, renderModeDescriptor, bitmap, &referenceBitmap); |
} |
return kEmpty_ErrorCombination; |
} |
ErrorCombination test_pipe_playback(GM* gm, const ConfigData& gRec, |
const SkBitmap& referenceBitmap, bool simulateFailure) { |
- const SkString name = make_name(gm->shortName(), gRec.fName); |
+ const SkString shortNamePlusConfig = make_shortname_plus_config(gm->shortName(), |
+ gRec.fName); |
ErrorCombination errors; |
for (size_t i = 0; i < SK_ARRAY_COUNT(gPipeWritingFlagCombos); ++i) { |
SkString renderModeDescriptor("-pipe"); |
renderModeDescriptor.append(gPipeWritingFlagCombos[i].name); |
if (gm->getFlags() & GM::kSkipPipe_Flag) { |
- RecordTestResults(kIntentionallySkipped_ErrorType, name, |
+ RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePlusConfig, |
renderModeDescriptor.c_str()); |
errors.add(kIntentionallySkipped_ErrorType); |
} else { |
@@ -1066,7 +1086,7 @@ |
complete_bitmap(&bitmap); |
writer.endRecording(); |
errors.add(compare_test_results_to_reference_bitmap( |
- name, renderModeDescriptor.c_str(), bitmap, &referenceBitmap)); |
+ shortNamePlusConfig, renderModeDescriptor.c_str(), bitmap, &referenceBitmap)); |
if (!errors.isEmpty()) { |
break; |
} |
@@ -1077,7 +1097,8 @@ |
ErrorCombination test_tiled_pipe_playback(GM* gm, const ConfigData& gRec, |
const SkBitmap& referenceBitmap) { |
- const SkString name = make_name(gm->shortName(), gRec.fName); |
+ const SkString shortNamePlusConfig = make_shortname_plus_config(gm->shortName(), |
+ gRec.fName); |
ErrorCombination errors; |
for (size_t i = 0; i < SK_ARRAY_COUNT(gPipeWritingFlagCombos); ++i) { |
SkString renderModeDescriptor("-tiled pipe"); |
@@ -1085,7 +1106,7 @@ |
if ((gm->getFlags() & GM::kSkipPipe_Flag) || |
(gm->getFlags() & GM::kSkipTiled_Flag)) { |
- RecordTestResults(kIntentionallySkipped_ErrorType, name, |
+ RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePlusConfig, |
renderModeDescriptor.c_str()); |
errors.add(kIntentionallySkipped_ErrorType); |
} else { |
@@ -1102,7 +1123,7 @@ |
invokeGM(gm, pipeCanvas, false, false); |
complete_bitmap(&bitmap); |
writer.endRecording(); |
- errors.add(compare_test_results_to_reference_bitmap(name, |
+ errors.add(compare_test_results_to_reference_bitmap(shortNamePlusConfig, |
renderModeDescriptor.c_str(), |
bitmap, &referenceBitmap)); |
if (!errors.isEmpty()) { |
@@ -1422,7 +1443,8 @@ |
for (int i = 0; i < configs.count(); i++) { |
ConfigData config = gRec[configs[i]]; |
- const SkString name = gmmain.make_name(gm->shortName(), config.fName); |
+ const SkString shortNamePlusConfig = gmmain.make_shortname_plus_config(gm->shortName(), |
+ config.fName); |
// Skip any tests that we don't even need to try. |
// If any of these were skipped on a per-GM basis, record them as |
@@ -1432,7 +1454,7 @@ |
continue; |
} |
if (gmFlags & GM::kSkipPDF_Flag) { |
- gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, name, |
+ gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePlusConfig, |
renderModeDescriptor); |
errorsForAllConfigs.add(kIntentionallySkipped_ErrorType); |
continue; |
@@ -1441,14 +1463,14 @@ |
if ((gmFlags & GM::kSkip565_Flag) && |
(kRaster_Backend == config.fBackend) && |
(SkBitmap::kRGB_565_Config == config.fConfig)) { |
- gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, name, |
+ gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePlusConfig, |
renderModeDescriptor); |
errorsForAllConfigs.add(kIntentionallySkipped_ErrorType); |
continue; |
} |
if ((gmFlags & GM::kSkipGPU_Flag) && |
kGPU_Backend == config.fBackend) { |
- gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, name, |
+ gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePlusConfig, |
renderModeDescriptor); |
errorsForAllConfigs.add(kIntentionallySkipped_ErrorType); |
continue; |
@@ -1535,27 +1557,30 @@ |
const SkTDArray<SkScalar> &tileGridReplayScales) { |
ErrorCombination errorsForAllModes; |
uint32_t gmFlags = gm->getFlags(); |
- const SkString name = gmmain.make_name(gm->shortName(), compareConfig.fName); |
+ const SkString shortNamePlusConfig = gmmain.make_shortname_plus_config(gm->shortName(), |
+ compareConfig.fName); |
SkPicture* pict = gmmain.generate_new_picture(gm, kNone_BbhType, 0); |
SkAutoUnref aur(pict); |
if (FLAGS_replay) { |
const char renderModeDescriptor[] = "-replay"; |
if (gmFlags & GM::kSkipPicture_Flag) { |
- gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, name, renderModeDescriptor); |
+ gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePlusConfig, |
+ renderModeDescriptor); |
errorsForAllModes.add(kIntentionallySkipped_ErrorType); |
} else { |
SkBitmap bitmap; |
gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap); |
errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitmap( |
- name, renderModeDescriptor, bitmap, &comparisonBitmap)); |
+ shortNamePlusConfig, renderModeDescriptor, bitmap, &comparisonBitmap)); |
} |
} |
if (FLAGS_serialize) { |
const char renderModeDescriptor[] = "-serialize"; |
if (gmFlags & GM::kSkipPicture_Flag) { |
- gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, name, renderModeDescriptor); |
+ gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePlusConfig, |
+ renderModeDescriptor); |
errorsForAllModes.add(kIntentionallySkipped_ErrorType); |
} else { |
SkPicture* repict = gmmain.stream_to_new_picture(*pict); |
@@ -1563,15 +1588,19 @@ |
SkBitmap bitmap; |
gmmain.generate_image_from_picture(gm, compareConfig, repict, &bitmap); |
errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitmap( |
- name, renderModeDescriptor, bitmap, &comparisonBitmap)); |
+ shortNamePlusConfig, renderModeDescriptor, bitmap, &comparisonBitmap)); |
} |
} |
if ((1 == FLAGS_writePicturePath.count()) && |
!(gmFlags & GM::kSkipPicture_Flag)) { |
const char* pictureSuffix = "skp"; |
- SkString path = make_filename(FLAGS_writePicturePath[0], "", |
- gm->shortName(), pictureSuffix); |
+ // TODO(epoger): In this case, we call make_filename() with |
epoger
2013/05/19 09:00:43
Any insights on this? I think it's worth looking
|
+ // just the shortName instead of shortNamePlusConfig. I |
+ // suspect that is incorrect, because runs with different |
+ // configs will write out to the same filename. |
+ SkString path = gmmain.make_filename(FLAGS_writePicturePath[0], "", |
+ gm->shortName(), pictureSuffix); |
SkFILEWStream stream(path.c_str()); |
pict->serialize(&stream); |
} |
@@ -1579,7 +1608,8 @@ |
if (FLAGS_rtree) { |
const char renderModeDescriptor[] = "-rtree"; |
if (gmFlags & GM::kSkipPicture_Flag) { |
- gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, name, renderModeDescriptor); |
+ gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePlusConfig, |
+ renderModeDescriptor); |
errorsForAllModes.add(kIntentionallySkipped_ErrorType); |
} else { |
SkPicture* pict = gmmain.generate_new_picture( |
@@ -1588,7 +1618,7 @@ |
SkBitmap bitmap; |
gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap); |
errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitmap( |
- name, renderModeDescriptor, bitmap, &comparisonBitmap)); |
+ shortNamePlusConfig, renderModeDescriptor, bitmap, &comparisonBitmap)); |
} |
} |
@@ -1603,7 +1633,7 @@ |
if ((gmFlags & GM::kSkipPicture_Flag) || |
((gmFlags & GM::kSkipScaledReplay_Flag) && replayScale != 1)) { |
- gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, name, |
+ gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePlusConfig, |
renderModeDescriptor.c_str()); |
errorsForAllModes.add(kIntentionallySkipped_ErrorType); |
} else { |
@@ -1621,7 +1651,7 @@ |
gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap, |
replayScale /*, true */); |
errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitmap( |
- name, renderModeDescriptor.c_str(), bitmap, &comparisonBitmap)); |
+ shortNamePlusConfig, renderModeDescriptor.c_str(), bitmap, &comparisonBitmap)); |
} |
} |
} |