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 |