| 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
|
|
|