Index: tools/skpdiff/SkDiffContext.h |
diff --git a/tools/skpdiff/SkDiffContext.h b/tools/skpdiff/SkDiffContext.h |
index 9669ae0ad39e79250f6007c30a3bf47707e10f37..2d971059c2f725dce47b7c064c188b27a269db0c 100644 |
--- a/tools/skpdiff/SkDiffContext.h |
+++ b/tools/skpdiff/SkDiffContext.h |
@@ -8,12 +8,14 @@ |
#ifndef SkDiffContext_DEFINED |
#define SkDiffContext_DEFINED |
+#include "SkImageDiffer.h" |
#include "SkString.h" |
#include "SkTArray.h" |
#include "SkTDArray.h" |
+#include "SkTLList.h" |
+#include "SkThread.h" |
class SkWStream; |
-class SkImageDiffer; |
/** |
* Collects records of diffs and outputs them as JSON. |
@@ -64,29 +66,33 @@ public: |
* Output the records of each diff in JSON. |
* |
* The format of the JSON document is one top level array named "records". |
- * Each record in the array is an object with both a "baselinePath" and "testPath" string field. |
+ * Each record in the array is an object with the following values: |
+ * "commonName" : string containing the common prefix of the baselinePath |
+ * and testPath filenames |
+ * "baselinePath" : string containing the path to the baseline image |
+ * "testPath" : string containing the path to the test image |
+ * "differencePath" : (optional) string containing the path to an alpha |
+ * mask of the pixel difference between the baseline |
+ * and test images |
+ * |
* They also have an array named "diffs" with each element being one diff record for the two |
* images indicated in the above field. |
* A diff record includes: |
* "differName" : string name of the diff metric used |
* "result" : numerical result of the diff |
- * "pointsOfInterest" : an array of coordinates (stored as a 2-array of ints) of interesting |
- * points |
* |
* Here is an example: |
* |
* { |
* "records": [ |
* { |
- * "baselinePath": "queue.png", |
- * "testPath": "queue.png", |
+ * "commonName": "queue.png", |
+ * "baselinePath": "/a/queue.png", |
+ * "testPath": "/b/queue.png", |
* "diffs": [ |
* { |
* "differName": "different_pixels", |
* "result": 1, |
- * "pointsOfInterest": [ |
- * [285,279], |
- * ] |
* } |
* ] |
* } |
@@ -107,8 +113,7 @@ public: |
private: |
struct DiffData { |
const char* fDiffName; |
- double fResult; |
- SkTDArray<SkIPoint> fPointsOfInterest; |
+ SkImageDiffer::Result fResult; |
}; |
struct DiffRecord { |
@@ -117,13 +122,22 @@ private: |
SkString fBaselinePath; |
SkString fTestPath; |
SkTArray<DiffData> fDiffs; |
- DiffRecord* fNext; |
}; |
+ // This is needed to work around a bug in the multithreaded case where the |
+ // image decoders are crashing when large numbers of threads are invoking |
+ // the decoder at the same time. |
+ // see https://code.google.com/p/skia/issues/detail?id=1803 |
+ SkMutex fImageMutex; |
+ |
+ // Used to protect access to fRecords and ensure only one thread is |
+ // adding new entries at a time. |
+ SkMutex fRecordMutex; |
+ |
// We use linked list for the records so that their pointers remain stable. A resizable array |
// might change its pointers, which would make it harder for async diffs to record their |
// results. |
- DiffRecord * fRecords; |
+ SkTLList<DiffRecord> fRecords; |
SkImageDiffer** fDiffers; |
int fDifferCount; |