GM: allow caller to specify which result types trigger an error
Review URL: https://codereview.chromium.org/14187007
git-svn-id: http://skia.googlecode.com/svn/trunk@8652 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index 91aef10..a91a28f 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -174,13 +174,14 @@
| SkGPipeWriter::kSharedAddressSpace_Flag }
};
+const static ErrorCombination kDefaultIgnorableErrorTypes = ErrorCombination()
+ .plus(kMissingExpectations_ErrorType)
+ .plus(kIntentionallySkipped_ErrorType);
+
class GMMain {
public:
- GMMain() : fUseFileHierarchy(false), fMismatchPath(NULL), fTestsRun(0),
- fRenderModesEncountered(1) {
- fIgnorableErrorCombination.add(kMissingExpectations_ErrorType);
- fIgnorableErrorCombination.add(kIntentionallySkipped_ErrorType);
- }
+ GMMain() : fUseFileHierarchy(false), fIgnorableErrorTypes(kDefaultIgnorableErrorTypes),
+ fMismatchPath(NULL), fTestsRun(0), fRenderModesEncountered(1) {}
SkString make_name(const char shortName[], const char configName[]) {
SkString name;
@@ -291,7 +292,7 @@
int significantErrors = 0;
for (int typeInt = 0; typeInt <= kLast_ErrorType; typeInt++) {
ErrorType type = static_cast<ErrorType>(typeInt);
- if (!fIgnorableErrorCombination.includes(type)) {
+ if (!fIgnorableErrorTypes.includes(type)) {
significantErrors += fFailedTests[type].count();
}
}
@@ -305,7 +306,7 @@
* @param verbose whether to be all verbose about it
*/
void DisplayResultTypeSummary(ErrorType type, bool verbose) {
- bool isIgnorableType = fIgnorableErrorCombination.includes(type);
+ bool isIgnorableType = fIgnorableErrorTypes.includes(type);
SkString line;
if (isIgnorableType) {
@@ -1105,7 +1106,7 @@
//
bool fUseFileHierarchy;
- ErrorCombination fIgnorableErrorCombination;
+ ErrorCombination fIgnorableErrorTypes;
const char* fMismatchPath;
@@ -1209,6 +1210,18 @@
#endif
DEFINE_bool(hierarchy, false, "Whether to use multilevel directory structure "
"when reading/writing files.");
+// TODO(epoger): Maybe should make SkCommandLineFlags handle default string
+// values differently, so that the first definition of ignoreErrorTypes worked?
+#if 0
+DEFINE_string(ignoreErrorTypes, kDefaultIgnorableErrorTypes.asString(" ").c_str(),
+ "Space-separated list of ErrorTypes that should be ignored. If any *other* error "
+ "types are encountered, the tool will exit with a nonzero return value.");
+#else
+DEFINE_string(ignoreErrorTypes, "", SkString(SkString(
+ "Space-separated list of ErrorTypes that should be ignored. If any *other* error "
+ "types are encountered, the tool will exit with a nonzero return value. "
+ "Defaults to: ") += kDefaultIgnorableErrorTypes.asString(" ")).c_str());
+#endif
DEFINE_string(match, "", "Only run tests whose name includes this substring/these substrings "
"(more than one can be supplied, separated by spaces).");
DEFINE_string(mismatchPath, "", "Write images for tests that failed due to "
@@ -1639,6 +1652,20 @@
}
}
+ if (FLAGS_ignoreErrorTypes.count() > 0) {
+ gmmain.fIgnorableErrorTypes = ErrorCombination();
+ for (int i = 0; i < FLAGS_ignoreErrorTypes.count(); i++) {
+ ErrorType type;
+ const char *name = FLAGS_ignoreErrorTypes[i];
+ if (!getErrorTypeByName(name, &type)) {
+ gm_fprintf(stderr, "cannot find ErrorType with name '%s'\n", name);
+ return -1;
+ } else {
+ gmmain.fIgnorableErrorTypes.add(type);
+ }
+ }
+ }
+
#if SK_SUPPORT_GPU
if (FLAGS_gpuCacheSize.count() > 0) {
if (FLAGS_gpuCacheSize.count() != 2) {