add --listfailingbase option
BUG=skia:
Review URL: https://codereview.chromium.org/833223002
diff --git a/tools/skdiff_main.cpp b/tools/skdiff_main.cpp
index df07844..fdd83a6 100644
--- a/tools/skdiff_main.cpp
+++ b/tools/skdiff_main.cpp
@@ -17,7 +17,6 @@
#include "SkTDArray.h"
#include "SkTemplates.h"
#include "SkTSearch.h"
-#include "SkTypes.h"
__SK_FORCE_IMAGE_DECODER_LINKING;
@@ -38,6 +37,30 @@
typedef SkTDArray<SkString*> StringArray;
typedef StringArray FileArray;
+static void add_unique_basename(StringArray* array, const SkString& filename) {
+ // trim off dirs
+ const char* src = filename.c_str();
+ const char* trimmed = strrchr(src, SkPATH_SEPARATOR);
+ if (trimmed) {
+ trimmed += 1; // skip the separator
+ } else {
+ trimmed = src;
+ }
+ const char* end = strrchr(trimmed, '.');
+ if (!end) {
+ end = trimmed + strlen(trimmed);
+ }
+ SkString result(trimmed, end - trimmed);
+
+ // only add unique entries
+ for (int i = 0; i < array->count(); ++i) {
+ if (*array->getAt(i) == result) {
+ return;
+ }
+ }
+ *array->append() = new SkString(result);
+}
+
struct DiffSummary {
DiffSummary ()
: fNumMatches(0)
@@ -64,6 +87,8 @@
FileArray fResultsOfType[DiffRecord::kResultCount];
FileArray fStatusOfType[DiffResource::kStatusCount][DiffResource::kStatusCount];
+ StringArray fFailedBaseNames[DiffRecord::kResultCount];
+
void printContents(const FileArray& fileArray,
const char* baseStatus, const char* comparisonStatus,
bool listFilenames) {
@@ -142,6 +167,19 @@
}
}
+ void printfFailingBaseNames(const char separator[]) {
+ for (int resultInt = 0; resultInt < DiffRecord::kResultCount; ++resultInt) {
+ const StringArray& array = fFailedBaseNames[resultInt];
+ if (array.count()) {
+ printf("%s [%d]%s", DiffRecord::ResultNames[resultInt], array.count(), separator);
+ for (int j = 0; j < array.count(); ++j) {
+ printf("%s%s", array[j]->c_str(), separator);
+ }
+ printf("\n");
+ }
+ }
+ }
+
void add (DiffRecord* drp) {
uint32_t mismatchValue;
@@ -188,6 +226,15 @@
SkDEBUGFAIL("adding DiffRecord with unhandled fResult value");
break;
}
+
+ switch (drp->fResult) {
+ case DiffRecord::kEqualBits_Result:
+ case DiffRecord::kEqualPixels_Result:
+ break;
+ default:
+ add_unique_basename(&fFailedBaseNames[drp->fResult], drp->fBase.fFilename);
+ break;
+ }
}
};
@@ -581,6 +628,7 @@
bool printDirNames = true;
bool recurseIntoSubdirs = true;
bool verbose = false;
+ bool listFailingBase = false;
RecordArray differences;
DiffSummary summary;
@@ -705,6 +753,10 @@
return kGenericError;
}
}
+ if (!strcmp(argv[i], "--listFailingBase")) {
+ listFailingBase = true;
+ continue;
+ }
SkDebugf("Unrecognized argument <%s>\n", argv[i]);
usage(argv[0]);
@@ -758,6 +810,10 @@
verbose, &summary);
summary.print(listFilenames, failOnResultType, failOnStatusType);
+ if (listFailingBase) {
+ summary.printfFailingBaseNames("\n");
+ }
+
if (differences.count()) {
qsort(differences.begin(), differences.count(),
sizeof(DiffRecord*), sortProc);