va_end(args);
}
+ SkString SkPathJoin(const char *rootPath, const char *relativePath) {
+ SkString result(rootPath);
+ if (!result.endsWith(SkPATH_SEPARATOR)) {
+ result.appendUnichar(SkPATH_SEPARATOR);
+ }
+ result.append(relativePath);
+ return result;
+ }
+
SkString make_filename(const char path[],
const char renderModeDescriptor[],
const char *name,
const char suffix[]) {
- SkString filename(path);
- if (filename.endsWith(SkPATH_SEPARATOR)) {
- filename.remove(filename.size() - 1, 1);
- }
- filename.appendf("%c%s%s.%s", SkPATH_SEPARATOR,
- name, renderModeDescriptor, suffix);
- return filename;
+ SkString filename(name);
+ filename.append(renderModeDescriptor);
+ filename.appendUnichar('.');
+ filename.append(suffix);
+ return SkPathJoin(path, filename.c_str());
}
// TODO(epoger): This currently assumes that the result SkHashDigest was
// IndividualImageExpectationsSource class...
Expectations IndividualImageExpectationsSource::get(const char *testName) {
- SkString path = make_filename(fRootDir.c_str(), "", testName,
- "png");
+ SkString path = SkPathJoin(fRootDir.c_str(), testName);
SkBitmap referenceBitmap;
bool decodedReferenceBitmap =
SkImageDecoder::DecodeFile(path.c_str(), &referenceBitmap,
void gm_fprintf(FILE *stream, const char format[], ...);
+ /**
+ * Assembles rootPath and relativePath into a single path, like this:
+ * rootPath/relativePath
+ *
+ * Uses SkPATH_SEPARATOR, to work on all platforms.
+ *
+ * TODO(epoger): This should probably move into SkOSFile.h
+ */
+ SkString SkPathJoin(const char *rootPath, const char *relativePath);
+
SkString make_filename(const char path[],
const char renderModeDescriptor[],
const char *name,
const GMRegistry* fReg;
};
+// TODO(epoger): Right now, various places in this code assume that all the
+// image files read/written by GM use this file extension.
+// Search for references to this constant to find these assumptions.
+const static char kPNG_FileExtension[] = "png";
+
enum Backend {
kRaster_Backend,
kGPU_Backend,
(gRec.fBackend == kPDF_Backend && CAN_IMAGE_PDF)) {
path = make_filename(writePath, renderModeDescriptor, name.c_str(),
- "png");
+ kPNG_FileExtension);
success = write_bitmap(path, bitmap);
}
if (kPDF_Backend == gRec.fBackend) {
}
SkString completeNameString = baseNameString;
completeNameString.append(renderModeDescriptor);
+ completeNameString.append(".");
+ completeNameString.append(kPNG_FileExtension);
const char* completeName = completeNameString.c_str();
if (expectations.empty()) {
if (fMismatchPath) {
SkString path =
make_filename(fMismatchPath, renderModeDescriptor,
- baseNameString.c_str(), "png");
+ baseNameString.c_str(), kPNG_FileExtension);
write_bitmap(path, actualBitmap);
}
* force_all_opaque().
* See comments above complete_bitmap() for more detail.
*/
- Expectations expectations = expectationsSource->get(name.c_str());
+ 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));
} else {
if (!SkBitmapHasher::ComputeDigest(actualBitmap, &actualBitmapHash)) {
actualBitmapHash = 0;
}
- add_actual_results_to_json_summary(name.c_str(), actualBitmapHash,
+ 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, "");
{
"actual-results" : {
"failed" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
},
"succeeded" : null
},
"expected-results" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 8863920166200910451 ],
"ignore-failure" : false
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 13451349865803053525 ],
"ignore-failure" : false
}
-GM: ---- 8888/selftest1: 60000 (of 60000) differing pixels, max per-channel mismatch R=0 G=111 B=103 A=0
-GM: ---- 565/selftest1: not computing max per-channel pixel mismatch because non-8888
+GM: ---- 8888/selftest1.png: 60000 (of 60000) differing pixels, max per-channel mismatch R=0 G=111 B=103 A=0
+GM: ---- 565/selftest1.png: not computing max per-channel pixel mismatch because non-8888
{
"actual-results" : {
"failed" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
},
"succeeded" : null
},
"expected-results" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 8863920166200910451 ],
"ignore-failure" : false
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 13451349865803053525 ],
"ignore-failure" : false
}
"failed" : null,
"failure-ignored" : null,
"no-comparison" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
},
"succeeded" : null
},
"expected-results" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : null,
"ignore-failure" : false
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : null,
"ignore-failure" : false
}
"failure-ignored" : null,
"no-comparison" : null,
"succeeded" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
}
},
"expected-results" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 12927999507540085554 ],
"ignore-failure" : false
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 1209453360120438698 ],
"ignore-failure" : false
}
"failure-ignored" : null,
"no-comparison" : null,
"succeeded" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
}
},
"expected-results" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 12927999507540085554 ],
"ignore-failure" : false
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 1209453360120438698 ],
"ignore-failure" : false
}
"failure-ignored" : null,
"no-comparison" : null,
"succeeded" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
}
},
"expected-results" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 12927999507540085554 ],
"ignore-failure" : false
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 1209453360120438698 ],
"ignore-failure" : false
}
"failure-ignored" : null,
"no-comparison" : null,
"succeeded" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
}
},
"expected-results" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 12927999507540085554 ],
"ignore-failure" : false
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 1209453360120438698 ],
"ignore-failure" : false
}
{
"actual-results" : {
"failed" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
},
"succeeded" : null
},
"expected-results" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 8863920166200910451 ],
"ignore-failure" : false
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 13451349865803053525 ],
"ignore-failure" : false
}
"failed" : null,
"failure-ignored" : null,
"no-comparison" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "565/selftest2" : {
+ "565/selftest2.png" : {
"bitmap-64bitMD5" : 8863920166200910451
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
},
- "8888/selftest2" : {
+ "8888/selftest2.png" : {
"bitmap-64bitMD5" : 13451349865803053525
}
},
"failed" : null,
"failure-ignored" : null,
"no-comparison" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
},
"failed" : null,
"failure-ignored" : null,
"no-comparison" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
},
"succeeded" : null
},
"expected-results" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : null,
"ignore-failure" : false
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : null,
"ignore-failure" : false
}
{
"actual-results" : {
"failed" : {
- "comparison/selftest1-pipe" : {
+ "comparison/selftest1-pipe.png" : {
"bitmap-64bitMD5" : 6140979239232854774
}
},
"failure-ignored" : null,
"no-comparison" : null,
"succeeded" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"bitmap-64bitMD5" : 12927999507540085554
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"bitmap-64bitMD5" : 1209453360120438698
}
}
},
"expected-results" : {
- "565/selftest1" : {
+ "565/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 12927999507540085554 ],
"ignore-failure" : false
},
- "8888/selftest1" : {
+ "8888/selftest1.png" : {
"allowed-bitmap-64bitMD5s" : [ 1209453360120438698 ],
"ignore-failure" : false
},
- "comparison/selftest1-pipe" : {
+ "comparison/selftest1-pipe.png" : {
"allowed-bitmap-64bitMD5s" : [ 1209453360120438698 ],
"ignore-failure" : false
}
-GM: ---- comparison/selftest1-pipe: 60000 (of 60000) differing pixels, max per-channel mismatch R=135 G=246 B=135 A=0
+GM: ---- comparison/selftest1-pipe.png: 60000 (of 60000) differing pixels, max per-channel mismatch R=135 G=246 B=135 A=0