| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkBitmap.h" | 8 #include "SkBitmap.h" |
| 9 #include "SkCommandLineFlags.h" | |
| 10 #include "SkImageDecoder.h" | 9 #include "SkImageDecoder.h" |
| 11 #include "SkOSFile.h" | 10 #include "SkOSFile.h" |
| 12 #include "SkStream.h" | 11 #include "SkStream.h" |
| 13 | 12 |
| 14 #include "SkDiffContext.h" | 13 #include "SkDiffContext.h" |
| 15 #include "SkImageDiffer.h" | 14 #include "SkImageDiffer.h" |
| 16 #include "skpdiff_util.h" | 15 #include "skpdiff_util.h" |
| 17 | 16 |
| 18 DECLARE_string(csv); | |
| 19 | |
| 20 SkDiffContext::SkDiffContext() { | 17 SkDiffContext::SkDiffContext() { |
| 21 fRecords = NULL; | 18 fRecords = NULL; |
| 22 fDiffers = NULL; | 19 fDiffers = NULL; |
| 23 fDifferCount = 0; | 20 fDifferCount = 0; |
| 24 } | 21 } |
| 25 | 22 |
| 26 SkDiffContext::~SkDiffContext() { | 23 SkDiffContext::~SkDiffContext() { |
| 27 // Delete the record linked list | 24 // Delete the record linked list |
| 28 DiffRecord* currentRecord = fRecords; | 25 DiffRecord* currentRecord = fRecords; |
| 29 while (NULL != currentRecord) { | 26 while (NULL != currentRecord) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 return; | 61 return; |
| 65 } | 62 } |
| 66 | 63 |
| 67 // Setup a record for this diff | 64 // Setup a record for this diff |
| 68 DiffRecord* newRecord = SkNEW(DiffRecord); | 65 DiffRecord* newRecord = SkNEW(DiffRecord); |
| 69 newRecord->fBaselinePath = baselinePath; | 66 newRecord->fBaselinePath = baselinePath; |
| 70 newRecord->fTestPath = testPath; | 67 newRecord->fTestPath = testPath; |
| 71 newRecord->fNext = fRecords; | 68 newRecord->fNext = fRecords; |
| 72 fRecords = newRecord; | 69 fRecords = newRecord; |
| 73 | 70 |
| 74 FILE* csvFile = NULL; | |
| 75 if (!FLAGS_csv.isEmpty()) { | |
| 76 csvFile = fopen(FLAGS_csv[0], "a"); | |
| 77 SkASSERT(csvFile); | |
| 78 if (ftell(csvFile) == 0) { | |
| 79 fprintf(csvFile, "%s", "skp"); | |
| 80 for (int differIndex = 0; differIndex < fDifferCount; differIndex++)
{ | |
| 81 SkImageDiffer* differ = fDiffers[differIndex]; | |
| 82 fprintf(csvFile, ", %s", differ->getName()); | |
| 83 } | |
| 84 fprintf(csvFile, "\n"); | |
| 85 } | |
| 86 } | |
| 87 | |
| 88 if (csvFile) { | |
| 89 const char* filename = baselinePath + strlen(baselinePath) - 1; | |
| 90 while (filename > baselinePath && *(filename - 1) != '/') { | |
| 91 filename--; | |
| 92 } | |
| 93 fprintf(csvFile, "%s", filename); | |
| 94 } | |
| 95 | |
| 96 // Perform each diff | 71 // Perform each diff |
| 97 for (int differIndex = 0; differIndex < fDifferCount; differIndex++) { | 72 for (int differIndex = 0; differIndex < fDifferCount; differIndex++) { |
| 98 SkImageDiffer* differ = fDiffers[differIndex]; | 73 SkImageDiffer* differ = fDiffers[differIndex]; |
| 99 int diffID = differ->queueDiff(&baselineBitmap, &testBitmap); | 74 int diffID = differ->queueDiff(&baselineBitmap, &testBitmap); |
| 100 if (diffID >= 0) { | 75 if (diffID >= 0) { |
| 101 | 76 |
| 102 // Copy the results into data for this record | 77 // Copy the results into data for this record |
| 103 DiffData& diffData = newRecord->fDiffs.push_back(); | 78 DiffData& diffData = newRecord->fDiffs.push_back(); |
| 104 | 79 |
| 105 diffData.fDiffName = differ->getName(); | 80 diffData.fDiffName = differ->getName(); |
| 106 diffData.fResult = differ->getResult(diffID); | 81 diffData.fResult = differ->getResult(diffID); |
| 107 | 82 |
| 108 if (csvFile) { | |
| 109 fprintf(csvFile, ", %f", diffData.fResult); | |
| 110 } | |
| 111 | |
| 112 int poiCount = differ->getPointsOfInterestCount(diffID); | 83 int poiCount = differ->getPointsOfInterestCount(diffID); |
| 113 SkIPoint* poi = differ->getPointsOfInterest(diffID); | 84 SkIPoint* poi = differ->getPointsOfInterest(diffID); |
| 114 diffData.fPointsOfInterest.append(poiCount, poi); | 85 diffData.fPointsOfInterest.append(poiCount, poi); |
| 115 | 86 |
| 116 // Because we are doing everything synchronously for now, we are don
e with the diff | 87 // Because we are doing everything synchronously for now, we are don
e with the diff |
| 117 // after reading it. | 88 // after reading it. |
| 118 differ->deleteDiff(diffID); | 89 differ->deleteDiff(diffID); |
| 119 } else { | |
| 120 if (csvFile) { | |
| 121 fprintf(csvFile, ", -1"); | |
| 122 } | |
| 123 } | 90 } |
| 124 } | 91 } |
| 125 | |
| 126 if (csvFile) { | |
| 127 fprintf(csvFile, "\n"); | |
| 128 fclose(csvFile); | |
| 129 } | |
| 130 } | 92 } |
| 131 | 93 |
| 132 | 94 |
| 133 void SkDiffContext::diffDirectories(const char baselinePath[], const char testPa
th[]) { | 95 void SkDiffContext::diffDirectories(const char baselinePath[], const char testPa
th[]) { |
| 134 // Get the files in the baseline, we will then look for those inside the tes
t path | 96 // Get the files in the baseline, we will then look for those inside the tes
t path |
| 135 SkTArray<SkString> baselineEntries; | 97 SkTArray<SkString> baselineEntries; |
| 136 if (!get_directory(baselinePath, &baselineEntries)) { | 98 if (!get_directory(baselinePath, &baselineEntries)) { |
| 137 SkDebugf("Unable to open path \"%s\"\n", baselinePath); | 99 SkDebugf("Unable to open path \"%s\"\n", baselinePath); |
| 138 return; | 100 return; |
| 139 } | 101 } |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 } | 223 } |
| 262 stream.writeText(" ]\n"); | 224 stream.writeText(" ]\n"); |
| 263 if (useJSONP) { | 225 if (useJSONP) { |
| 264 stream.writeText("};\n"); | 226 stream.writeText("};\n"); |
| 265 } | 227 } |
| 266 else | 228 else |
| 267 { | 229 { |
| 268 stream.writeText("}\n"); | 230 stream.writeText("}\n"); |
| 269 } | 231 } |
| 270 } | 232 } |
| OLD | NEW |