Index: experimental/skpdiff/SkDiffContext.cpp |
=================================================================== |
--- experimental/skpdiff/SkDiffContext.cpp (revision 10232) |
+++ experimental/skpdiff/SkDiffContext.cpp (working copy) |
@@ -9,6 +9,7 @@ |
#include "SkImageDecoder.h" |
#include "SkOSFile.h" |
#include "SkStream.h" |
+#include "SkTDict.h" |
#include "SkDiffContext.h" |
#include "SkImageDiffer.h" |
@@ -230,3 +231,62 @@ |
stream.writeText("}\n"); |
} |
} |
+ |
+void SkDiffContext::outputCsv(SkWStream& stream) { |
+ SkTDict<int> columns(2); |
+ int cntColumns = 0; |
+ |
+ stream.writeText("key"); |
+ |
+ DiffRecord* currentRecord = fRecords; |
+ |
+ // Write CSV header and create a dictionary of all columns. |
+ while (NULL != currentRecord) { |
+ for (int diffIndex = 0; diffIndex < currentRecord->fDiffs.count(); diffIndex++) { |
+ DiffData& data = currentRecord->fDiffs[diffIndex]; |
+ if (!columns.find(data.fDiffName)) { |
+ columns.set(data.fDiffName, cntColumns); |
+ stream.writeText(", "); |
+ stream.writeText(data.fDiffName); |
+ cntColumns++; |
+ } |
+ } |
+ currentRecord = currentRecord->fNext; |
+ } |
+ stream.writeText("\n"); |
+ |
+ double values[100]; |
+ SkASSERT(cntColumns < 100); // Make the array larger, we we ever have so many diff types. |
+ |
+ currentRecord = fRecords; |
+ while (NULL != currentRecord) { |
+ for (int i = 0; i < cntColumns; i++) { |
+ values[i] = -1; |
+ } |
+ |
+ for (int diffIndex = 0; diffIndex < currentRecord->fDiffs.count(); diffIndex++) { |
+ DiffData& data = currentRecord->fDiffs[diffIndex]; |
+ int index = -1; |
+ SkAssertResult(columns.find(data.fDiffName, &index)); |
+ SkASSERT(index >= 0 && index < cntColumns); |
+ values[index] = data.fResult; |
+ } |
+ |
+ const char* filename = currentRecord->fBaselinePath.c_str() + |
+ strlen(currentRecord->fBaselinePath.c_str()) - 1; |
+ while (filename > currentRecord->fBaselinePath.c_str() && *(filename - 1) != '/') { |
+ filename--; |
+ } |
+ |
+ stream.writeText(filename); |
+ |
+ for (int i = 0; i < cntColumns; i++) { |
+ SkString str; |
+ str.printf(", %f", values[i]); |
+ stream.writeText(str.c_str()); |
+ } |
+ stream.writeText("\n"); |
+ |
+ currentRecord = currentRecord->fNext; |
+ } |
+} |