| 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 "SkImageDecoder.h" | 9 #include "SkImageDecoder.h" |
| 10 #include "SkOSFile.h" | 10 #include "SkOSFile.h" |
| 11 #include "SkRunnable.h" | 11 #include "Runnable.h" |
| 12 #include "SkSize.h" | 12 #include "SkSize.h" |
| 13 #include "SkStream.h" | 13 #include "SkStream.h" |
| 14 #include "SkTDict.h" | 14 #include "SkTDict.h" |
| 15 #include "SkThreadPool.h" | 15 #include "ThreadPool.h" |
| 16 | 16 |
| 17 #include "SkDiffContext.h" | 17 #include "SkDiffContext.h" |
| 18 #include "SkImageDiffer.h" | 18 #include "SkImageDiffer.h" |
| 19 #include "skpdiff_util.h" | 19 #include "skpdiff_util.h" |
| 20 | 20 |
| 21 SkDiffContext::SkDiffContext() { | 21 SkDiffContext::SkDiffContext() { |
| 22 fDiffers = NULL; | 22 fDiffers = NULL; |
| 23 fDifferCount = 0; | 23 fDifferCount = 0; |
| 24 fThreadCount = SkThreadPool::kThreadPerCore; | 24 fThreadCount = ThreadPool::kThreadPerCore; |
| 25 } | 25 } |
| 26 | 26 |
| 27 SkDiffContext::~SkDiffContext() { | 27 SkDiffContext::~SkDiffContext() { |
| 28 if (NULL != fDiffers) { | 28 if (NULL != fDiffers) { |
| 29 SkDELETE_ARRAY(fDiffers); | 29 SkDELETE_ARRAY(fDiffers); |
| 30 } | 30 } |
| 31 } | 31 } |
| 32 | 32 |
| 33 void SkDiffContext::setAlphaMaskDir(const SkString& path) { | 33 void SkDiffContext::setAlphaMaskDir(const SkString& path) { |
| 34 if (!path.isEmpty() && sk_mkdir(path.c_str())) { | 34 if (!path.isEmpty() && sk_mkdir(path.c_str())) { |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 newRecord->fCommonN
ame.c_str()); | 180 newRecord->fCommonN
ame.c_str()); |
| 181 SkImageEncoder::EncodeFile(newRecord->fWhiteDiffPath.c_str(), | 181 SkImageEncoder::EncodeFile(newRecord->fWhiteDiffPath.c_str(), |
| 182 diffData.fResult.whiteDiffBitmap, | 182 diffData.fResult.whiteDiffBitmap, |
| 183 SkImageEncoder::kPNG_Type, 100); | 183 SkImageEncoder::kPNG_Type, 100); |
| 184 diffData.fResult.whiteDiffBitmap.reset(); | 184 diffData.fResult.whiteDiffBitmap.reset(); |
| 185 bitmapsToCreate.whiteDiff = false; | 185 bitmapsToCreate.whiteDiff = false; |
| 186 } | 186 } |
| 187 } | 187 } |
| 188 } | 188 } |
| 189 | 189 |
| 190 class SkThreadedDiff : public SkRunnable { | 190 class SkThreadedDiff : public Runnable { |
| 191 public: | 191 public: |
| 192 SkThreadedDiff() : fDiffContext(NULL) { } | 192 SkThreadedDiff() : fDiffContext(NULL) { } |
| 193 | 193 |
| 194 void setup(SkDiffContext* diffContext, const SkString& baselinePath, const S
kString& testPath) { | 194 void setup(SkDiffContext* diffContext, const SkString& baselinePath, const S
kString& testPath) { |
| 195 fDiffContext = diffContext; | 195 fDiffContext = diffContext; |
| 196 fBaselinePath = baselinePath; | 196 fBaselinePath = baselinePath; |
| 197 fTestPath = testPath; | 197 fTestPath = testPath; |
| 198 } | 198 } |
| 199 | 199 |
| 200 virtual void run() SK_OVERRIDE { | 200 virtual void run() SK_OVERRIDE { |
| 201 fDiffContext->addDiff(fBaselinePath.c_str(), fTestPath.c_str()); | 201 fDiffContext->addDiff(fBaselinePath.c_str(), fTestPath.c_str()); |
| 202 } | 202 } |
| 203 | 203 |
| 204 private: | 204 private: |
| 205 SkDiffContext* fDiffContext; | 205 SkDiffContext* fDiffContext; |
| 206 SkString fBaselinePath; | 206 SkString fBaselinePath; |
| 207 SkString fTestPath; | 207 SkString fTestPath; |
| 208 }; | 208 }; |
| 209 | 209 |
| 210 void SkDiffContext::diffDirectories(const char baselinePath[], const char testPa
th[]) { | 210 void SkDiffContext::diffDirectories(const char baselinePath[], const char testPa
th[]) { |
| 211 // Get the files in the baseline, we will then look for those inside the tes
t path | 211 // Get the files in the baseline, we will then look for those inside the tes
t path |
| 212 SkTArray<SkString> baselineEntries; | 212 SkTArray<SkString> baselineEntries; |
| 213 if (!get_directory(baselinePath, &baselineEntries)) { | 213 if (!get_directory(baselinePath, &baselineEntries)) { |
| 214 SkDebugf("Unable to open path \"%s\"\n", baselinePath); | 214 SkDebugf("Unable to open path \"%s\"\n", baselinePath); |
| 215 return; | 215 return; |
| 216 } | 216 } |
| 217 | 217 |
| 218 SkThreadPool threadPool(fThreadCount); | 218 ThreadPool threadPool(fThreadCount); |
| 219 SkTArray<SkThreadedDiff> runnableDiffs; | 219 SkTArray<SkThreadedDiff> runnableDiffs; |
| 220 runnableDiffs.reset(baselineEntries.count()); | 220 runnableDiffs.reset(baselineEntries.count()); |
| 221 | 221 |
| 222 for (int x = 0; x < baselineEntries.count(); x++) { | 222 for (int x = 0; x < baselineEntries.count(); x++) { |
| 223 const char* baseFilename = baselineEntries[x].c_str(); | 223 const char* baseFilename = baselineEntries[x].c_str(); |
| 224 | 224 |
| 225 // Find the real location of each file to compare | 225 // Find the real location of each file to compare |
| 226 SkString baselineFile = SkOSPath::SkPathJoin(baselinePath, baseFilename)
; | 226 SkString baselineFile = SkOSPath::SkPathJoin(baselinePath, baseFilename)
; |
| 227 SkString testFile = SkOSPath::SkPathJoin(testPath, baseFilename); | 227 SkString testFile = SkOSPath::SkPathJoin(testPath, baseFilename); |
| 228 | 228 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 254 if (!glob_files(testPattern, &testEntries)) { | 254 if (!glob_files(testPattern, &testEntries)) { |
| 255 SkDebugf("Unable to get pattern \"%s\"\n", testPattern); | 255 SkDebugf("Unable to get pattern \"%s\"\n", testPattern); |
| 256 return; | 256 return; |
| 257 } | 257 } |
| 258 | 258 |
| 259 if (baselineEntries.count() != testEntries.count()) { | 259 if (baselineEntries.count() != testEntries.count()) { |
| 260 SkDebugf("Baseline and test patterns do not yield corresponding number o
f files\n"); | 260 SkDebugf("Baseline and test patterns do not yield corresponding number o
f files\n"); |
| 261 return; | 261 return; |
| 262 } | 262 } |
| 263 | 263 |
| 264 SkThreadPool threadPool(fThreadCount); | 264 ThreadPool threadPool(fThreadCount); |
| 265 SkTArray<SkThreadedDiff> runnableDiffs; | 265 SkTArray<SkThreadedDiff> runnableDiffs; |
| 266 runnableDiffs.reset(baselineEntries.count()); | 266 runnableDiffs.reset(baselineEntries.count()); |
| 267 | 267 |
| 268 for (int x = 0; x < baselineEntries.count(); x++) { | 268 for (int x = 0; x < baselineEntries.count(); x++) { |
| 269 runnableDiffs[x].setup(this, baselineEntries[x], testEntries[x]); | 269 runnableDiffs[x].setup(this, baselineEntries[x], testEntries[x]); |
| 270 threadPool.add(&runnableDiffs[x]); | 270 threadPool.add(&runnableDiffs[x]); |
| 271 } | 271 } |
| 272 | 272 |
| 273 threadPool.wait(); | 273 threadPool.wait(); |
| 274 } | 274 } |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 for (int i = 0; i < cntColumns; i++) { | 433 for (int i = 0; i < cntColumns; i++) { |
| 434 SkString str; | 434 SkString str; |
| 435 str.printf(", %f", values[i]); | 435 str.printf(", %f", values[i]); |
| 436 stream.writeText(str.c_str()); | 436 stream.writeText(str.c_str()); |
| 437 } | 437 } |
| 438 stream.writeText("\n"); | 438 stream.writeText("\n"); |
| 439 | 439 |
| 440 currentRecord = iter2.next(); | 440 currentRecord = iter2.next(); |
| 441 } | 441 } |
| 442 } | 442 } |
| OLD | NEW |