render_pictures: add --writeJsonSummaryPath
Known issues:
- JSON summary will be empty if --writePath not specified also
- testNames within summary do not include the config (8888, gpu, etc.)
BUG=
R=rmistry@google.com
Author: epoger@google.com
Review URL: https://codereview.chromium.org/98643007
git-svn-id: http://skia.googlecode.com/svn/trunk@12680 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tools/PictureRenderer.h b/tools/PictureRenderer.h
index 6a84130..6d886ab 100644
--- a/tools/PictureRenderer.h
+++ b/tools/PictureRenderer.h
@@ -11,6 +11,7 @@
#include "SkCanvas.h"
#include "SkCountdown.h"
#include "SkDrawFilter.h"
+#include "SkJSONCPP.h"
#include "SkMath.h"
#include "SkPaint.h"
#include "SkPicture.h"
@@ -37,6 +38,30 @@
class TiledPictureRenderer;
+/**
+ * Class for collecting image results (checksums) as we go.
+ */
+class ImageResultsSummary {
+public:
+ /**
+ * Adds this bitmap's hash to the summary of results.
+ *
+ * @param testName name of the test
+ * @param bitmap bitmap to store the hash of
+ */
+ void add(const char *testName, const SkBitmap& bitmap);
+
+ /**
+ * Writes the summary (as constructed so far) to a file.
+ *
+ * @param filename path to write the summary to
+ */
+ void writeToFile(const char *filename);
+
+private:
+ Json::Value fActualResultsNoComparison;
+};
+
class PictureRenderer : public SkRefCnt {
public:
@@ -183,6 +208,10 @@
fGridInfo.fTileInterval.set(width, height);
}
+ void setJsonSummaryPtr(ImageResultsSummary* jsonSummaryPtr) {
+ fJsonSummaryPtr = jsonSummaryPtr;
+ }
+
bool isUsingBitmapDevice() {
return kBitmap_DeviceType == fDeviceType;
}
@@ -266,6 +295,7 @@
PictureRenderer()
: fPicture(NULL)
+ , fJsonSummaryPtr(NULL)
, fDeviceType(kBitmap_DeviceType)
, fBBoxHierarchyType(kNone_BBoxHierarchyType)
, fScaleFactor(SK_Scalar1)
@@ -290,6 +320,7 @@
protected:
SkAutoTUnref<SkCanvas> fCanvas;
SkPicture* fPicture;
+ ImageResultsSummary* fJsonSummaryPtr;
SkDeviceTypes fDeviceType;
BBoxHierarchyType fBBoxHierarchyType;
DrawFilterFlags fDrawFilters[SkDrawFilter::kTypeCount];