skpdiff: add ability to write the diff scores in a csv file (one line per pair of diff images, with the result of each diff engine)

Review URL: https://codereview.chromium.org/19786004

git-svn-id: http://skia.googlecode.com/svn/trunk@10194 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
edisonn@google.com 2013-07-19 17:19:47 +00:00
parent e4eaea2d12
commit 9345d94db6
2 changed files with 46 additions and 0 deletions

View File

@ -6,6 +6,7 @@
*/
#include "SkBitmap.h"
#include "SkCommandLineFlags.h"
#include "SkImageDecoder.h"
#include "SkOSFile.h"
#include "SkStream.h"
@ -14,6 +15,8 @@
#include "SkImageDiffer.h"
#include "skpdiff_util.h"
DECLARE_string(csv);
SkDiffContext::SkDiffContext() {
fRecords = NULL;
fDiffers = NULL;
@ -68,6 +71,28 @@ void SkDiffContext::addDiff(const char* baselinePath, const char* testPath) {
newRecord->fNext = fRecords;
fRecords = newRecord;
FILE* csvFile = NULL;
if (!FLAGS_csv.isEmpty()) {
csvFile = fopen(FLAGS_csv[0], "a");
SkASSERT(csvFile);
if (ftell(csvFile) == 0) {
fprintf(csvFile, "%s", "skp");
for (int differIndex = 0; differIndex < fDifferCount; differIndex++) {
SkImageDiffer* differ = fDiffers[differIndex];
fprintf(csvFile, ", %s", differ->getName());
}
fprintf(csvFile, "\n");
}
}
if (csvFile) {
const char* filename = baselinePath + strlen(baselinePath) - 1;
while (filename > baselinePath && *(filename - 1) != '/') {
filename--;
}
fprintf(csvFile, "%s", filename);
}
// Perform each diff
for (int differIndex = 0; differIndex < fDifferCount; differIndex++) {
SkImageDiffer* differ = fDiffers[differIndex];
@ -80,6 +105,10 @@ void SkDiffContext::addDiff(const char* baselinePath, const char* testPath) {
diffData.fDiffName = differ->getName();
diffData.fResult = differ->getResult(diffID);
if (csvFile) {
fprintf(csvFile, ", %f", diffData.fResult);
}
int poiCount = differ->getPointsOfInterestCount(diffID);
SkIPoint* poi = differ->getPointsOfInterest(diffID);
diffData.fPointsOfInterest.append(poiCount, poi);
@ -87,8 +116,17 @@ void SkDiffContext::addDiff(const char* baselinePath, const char* testPath) {
// Because we are doing everything synchronously for now, we are done with the diff
// after reading it.
differ->deleteDiff(diffID);
} else {
if (csvFile) {
fprintf(csvFile, ", -1");
}
}
}
if (csvFile) {
fprintf(csvFile, "\n");
fclose(csvFile);
}
}

View File

@ -32,6 +32,7 @@ DEFINE_string2(folders, f, "", "Compare two folders with identical subfile names
DEFINE_string2(patterns, p, "", "Use two patterns to compare images: <baseline> <test>");
DEFINE_string2(output, o, "skpdiff_output.json", "Writes the output of these diffs to output: <output>");
DEFINE_bool(jsonp, true, "Output JSON with padding");
DEFINE_string(csv, "", "Writes the output of these diffs to a csv file");
#if SK_SUPPORT_OPENCL
/// A callback for any OpenCL errors
@ -169,6 +170,13 @@ int main(int argc, char** argv) {
}
}
if (!FLAGS_csv.isEmpty()) {
if (1 != FLAGS_csv.count()) {
SkDebugf("csv flag expects one argument: <csv file>\n");
return 1;
}
}
SkDiffContext ctx;
ctx.setDiffers(chosenDiffers);