Index: experimental/skpdiff/SkPMetric.cpp |
diff --git a/experimental/skpdiff/SkPMetric.cpp b/experimental/skpdiff/SkPMetric.cpp |
index 7fbdec87aa4a5e8957f828ed41cba2399176776b..3aca0ab4fdcc3520a2646d8da1b8c47c982dcdcd 100644 |
--- a/experimental/skpdiff/SkPMetric.cpp |
+++ b/experimental/skpdiff/SkPMetric.cpp |
@@ -229,7 +229,7 @@ static void convolve(const ImageL* imageL, |
} |
} |
-float pmetric(const ImageLAB* baselineLAB, const ImageLAB* testLAB) { |
+float pmetric(const ImageLAB* baselineLAB, const ImageLAB* testLAB, SkTDArray<SkIPoint>* poi) { |
int width = baselineLAB->width; |
int height = baselineLAB->height; |
int maxLevels = (int)log2(width < height ? width : height); |
@@ -367,6 +367,7 @@ float pmetric(const ImageLAB* baselineLAB, const ImageLAB* testLAB) { |
if (isFailure) { |
failures++; |
+ poi->push()->set(x, y); |
} |
} |
} |
@@ -384,13 +385,13 @@ const char* SkPMetric::getName() { |
int SkPMetric::queueDiff(SkBitmap* baseline, SkBitmap* test) { |
int diffID = fQueuedDiffs.count(); |
double startTime = get_seconds(); |
- QueuedDiff* diff = fQueuedDiffs.push(); |
+ QueuedDiff& diff = fQueuedDiffs.push_back(); |
+ diff.result = 0.0; |
// Ensure the images are comparable |
if (baseline->width() != test->width() || baseline->height() != test->height() || |
baseline->width() <= 0 || baseline->height() <= 0) { |
- diff->finished = true; |
- diff->result = 0.0; |
+ diff.finished = true; |
return diffID; |
} |
@@ -400,7 +401,7 @@ int SkPMetric::queueDiff(SkBitmap* baseline, SkBitmap* test) { |
bitmap_to_cielab(baseline, &baselineLAB); |
bitmap_to_cielab(test, &testLAB); |
- diff->result = pmetric(&baselineLAB, &testLAB); |
+ diff.result = pmetric(&baselineLAB, &testLAB, &diff.poi); |
SkDebugf("Time: %f\n", (get_seconds() - startTime)); |
@@ -408,6 +409,10 @@ int SkPMetric::queueDiff(SkBitmap* baseline, SkBitmap* test) { |
} |
+void SkPMetric::deleteDiff(int id) { |
+ fQueuedDiffs[id].poi.reset(); |
+} |
+ |
bool SkPMetric::isFinished(int id) { |
return fQueuedDiffs[id].finished; |
} |
@@ -415,3 +420,11 @@ bool SkPMetric::isFinished(int id) { |
double SkPMetric::getResult(int id) { |
return fQueuedDiffs[id].result; |
} |
+ |
+int SkPMetric::getPointsOfInterestCount(int id) { |
+ return fQueuedDiffs[id].poi.count(); |
+} |
+ |
+SkIPoint* SkPMetric::getPointsOfInterest(int id) { |
+ return fQueuedDiffs[id].poi.begin(); |
+} |