Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Unified Diff: tools/image_expectations.h

Issue 273783004: add --readJsonSummaryPath to render_pictures (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: make BitmapAndDigest lazily compute the bitmap Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/image_expectations.h
diff --git a/tools/image_expectations.h b/tools/image_expectations.h
index 432cf6d3a80bd3f4cbe2e563c2c0d4116a47d7a5..09a945a1b013b05e4ed874e36efb29ae009892e5 100644
--- a/tools/image_expectations.h
+++ b/tools/image_expectations.h
@@ -10,34 +10,89 @@
#include "SkBitmap.h"
#include "SkJSONCPP.h"
+#include "SkRefCnt.h"
namespace sk_tools {
/**
- * Class for collecting image results (checksums) as we go.
+ * The digest of an image (either an image we have generated locally, or an image expectation).
+ *
+ * Currently, this is always a uint64_t hash digest of an SkBitmap.
*/
- class ImageResultsSummary {
+ class ImageDigest : public SkRefCnt {
public:
/**
- * Adds this image to the summary of results.
+ * Create an ImageDigest of a bitmap.
*
- * @param sourceName name of the source file that generated this result
- * @param fileName relative path to the image output file on local disk
- * @param hash hash to store
- * @param tileNumber if not NULL, ptr to tile number
+ * Note that this is an expensive operation, because it has to examine all pixels in
+ * the bitmap. You may wish to consider using the BitmapAndDigest class, which will
+ * compute the ImageDigest lazily.
+ *
+ * @param bitmap image to get the digest of
*/
- void add(const char *sourceName, const char *fileName, uint64_t hash,
- const int *tileNumber=NULL);
+ explicit ImageDigest(const SkBitmap &bitmap);
+
+ /**
+ * Create an ImageDigest using a hashType/hashValue pair.
+ *
+ * @param hashType the algorithm used to generate the hash; for now, only
+ * kJsonValue_Image_ChecksumAlgorithm_Bitmap64bitMD5 is allowed.
+ * @param hashValue the value generated by the hash algorithm for a particular image.
+ */
+ explicit ImageDigest(const SkString &hashType, uint64_t hashValue);
+
+ /**
+ * Returns the hash digest type as an SkString.
+ *
+ * For now, this always returns kJsonValue_Image_ChecksumAlgorithm_Bitmap64bitMD5 .
+ */
+ SkString getHashType() const;
+
+ /**
+ * Returns the hash digest value as a uint64_t.
+ */
+ uint64_t getHashValue() const;
+
+ private:
+ uint64_t fHashValue;
+ };
+
+ /**
+ * Container that holds a reference to an SkBitmap and computes its ImageDigest lazily.
+ *
+ * Computing the ImageDigest can be expensive, so this can help you postpone (or maybe even
+ * avoid) that work.
+ */
+ class BitmapAndDigest {
+ public:
+ explicit BitmapAndDigest(const SkBitmap &bitmap);
+
+ const ImageDigest *getImageDigestPtr();
+ const SkBitmap *getBitmapPtr() const;
+ private:
+ const SkBitmap fBitmap;
+ SkAutoTUnref<ImageDigest> fImageDigestRef;
+ };
+
+ /**
+ * Collects ImageDigests of actually rendered images, perhaps comparing to expectations.
+ */
+ class ImageResultsAndExpectations {
+ public:
+ /**
+ * Adds expectations from a JSON file, returning true if successful.
+ */
+ bool readExpectationsFile(const char *jsonPath);
/**
* Adds this image to the summary of results.
*
* @param sourceName name of the source file that generated this result
* @param fileName relative path to the image output file on local disk
- * @param bitmap bitmap to store the hash of
+ * @param digest description of the image's contents
* @param tileNumber if not NULL, ptr to tile number
*/
- void add(const char *sourceName, const char *fileName, const SkBitmap& bitmap,
+ void add(const char *sourceName, const char *fileName, const ImageDigest &digest,
const int *tileNumber=NULL);
/**
@@ -45,10 +100,20 @@ namespace sk_tools {
*
* @param filename path to write the summary to
*/
- void writeToFile(const char *filename);
+ void writeToFile(const char *filename) const;
private:
+
+ /**
+ * Read the file contents from jsonPath and parse them into jsonRoot.
+ *
+ * Returns true if successful.
+ */
+ static bool Parse(const char *jsonPath, Json::Value *jsonRoot);
+
Json::Value fActualResults;
+ Json::Value fExpectedJsonRoot;
+ Json::Value fExpectedResults;
};
} // namespace sk_tools

Powered by Google App Engine
This is Rietveld 408576698