Index: tools/image_expectations.h |
diff --git a/tools/image_expectations.h b/tools/image_expectations.h |
index ae1df193548f90fec65f73af9e12b722539b6b64..2d58b929737fe6feebfceb79adf98be48b75fdc0 100644 |
--- a/tools/image_expectations.h |
+++ b/tools/image_expectations.h |
@@ -11,7 +11,6 @@ |
#include "SkBitmap.h" |
#include "SkJSONCPP.h" |
#include "SkOSFile.h" |
-#include "SkRefCnt.h" |
namespace sk_tools { |
@@ -20,14 +19,12 @@ namespace sk_tools { |
* |
* Currently, this is always a uint64_t hash digest of an SkBitmap. |
*/ |
- class ImageDigest : public SkRefCnt { |
+ class ImageDigest { |
public: |
/** |
* Create an ImageDigest of a bitmap. |
* |
- * 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. |
+ * Computes the hash of the bitmap lazily, since that is an expensive operation. |
* |
* @param bitmap image to get the digest of |
*/ |
@@ -43,36 +40,105 @@ namespace sk_tools { |
explicit ImageDigest(const SkString &hashType, uint64_t hashValue); |
/** |
+ * Returns true iff this and other ImageDigest represent identical images. |
+ */ |
+ bool equals(ImageDigest &other); |
+ |
+ /** |
* Returns the hash digest type as an SkString. |
* |
* For now, this always returns kJsonValue_Image_ChecksumAlgorithm_Bitmap64bitMD5 . |
*/ |
- SkString getHashType() const; |
+ SkString getHashType(); |
/** |
* Returns the hash digest value as a uint64_t. |
+ * |
+ * Since the hash is computed lazily, this may take some time, and it may modify |
+ * some fields on this object. |
*/ |
- uint64_t getHashValue() const; |
+ uint64_t getHashValue(); |
private: |
+ const SkBitmap fBitmap; |
uint64_t fHashValue; |
+ bool fComputedHashValue; |
}; |
/** |
- * 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. |
+ * Container that holds a reference to an SkBitmap and its ImageDigest. |
*/ |
class BitmapAndDigest { |
public: |
explicit BitmapAndDigest(const SkBitmap &bitmap); |
- const ImageDigest *getImageDigestPtr(); |
const SkBitmap *getBitmapPtr() const; |
+ |
+ /** |
+ * Returns a pointer to the ImageDigest. |
+ * |
+ * Since the hash is computed lazily within the ImageDigest object, we cannot mandate |
+ * that it be held const. |
+ */ |
+ ImageDigest *getImageDigestPtr(); |
private: |
const SkBitmap fBitmap; |
- SkAutoTUnref<ImageDigest> fImageDigestRef; |
+ ImageDigest fImageDigest; |
+ }; |
+ |
+ /** |
+ * Expected test result: expected image (if any), and whether we want to ignore failures on |
+ * this test or not. |
+ * |
+ * This is just an ImageDigest (or lack thereof, if there is no expectation) and a boolean |
+ * telling us whether to ignore failures. |
+ */ |
+ class Expectation { |
+ public: |
+ /** |
+ * No expectation at all. |
+ */ |
+ explicit Expectation(bool ignoreFailure=kDefaultIgnoreFailure); |
+ |
+ /** |
+ * Expect an image, passed as hashType/hashValue. |
+ */ |
+ explicit Expectation(const SkString &hashType, uint64_t hashValue, |
+ bool ignoreFailure=kDefaultIgnoreFailure); |
+ |
+ /** |
+ * Expect an image, passed as a bitmap. |
+ */ |
+ explicit Expectation(const SkBitmap& bitmap, |
+ bool ignoreFailure=kDefaultIgnoreFailure); |
+ |
+ /** |
+ * Returns true iff we want to ignore failed expectations. |
+ */ |
+ bool ignoreFailure() const; |
+ |
+ /** |
+ * Returns true iff there are no allowed results. |
+ */ |
+ bool empty() const; |
+ |
+ /** |
+ * Returns true iff we are expecting a particular image, and imageDigest matches it. |
+ * |
+ * If empty() returns true, this will return false. |
+ * |
+ * If this expectation DOES contain an image, and imageDigest doesn't match it, |
+ * this method will return false regardless of what ignoreFailure() would return. |
+ * (The caller can check that separately.) |
+ */ |
+ bool matches(ImageDigest &imageDigest); |
+ |
+ private: |
+ static const bool kDefaultIgnoreFailure = false; |
+ |
+ const bool fIsEmpty; |
+ const bool fIgnoreFailure; |
+ ImageDigest fImageDigest; // cannot be const, because it computes its hash lazily |
}; |
/** |
@@ -107,7 +173,7 @@ namespace sk_tools { |
* @param digest description of the image's contents |
* @param tileNumber if not NULL, pointer to tile number |
*/ |
- void add(const char *sourceName, const char *fileName, const ImageDigest &digest, |
+ void add(const char *sourceName, const char *fileName, ImageDigest &digest, |
const int *tileNumber=NULL); |
/** |
@@ -119,15 +185,15 @@ namespace sk_tools { |
void addDescription(const char *key, const char *value); |
/** |
- * Returns true if this test result matches its expectations. |
- * If there are no expectations for this test result, this will return false. |
+ * Returns the Expectation for this test. |
* |
* @param sourceName name of the source file that generated this result |
- * @param digest description of the image's contents |
* @param tileNumber if not NULL, pointer to tile number |
+ * |
+ * TODO(stephana): To make this work for GMs, we will need to add parameters for |
+ * config, and maybe renderMode/builder? |
*/ |
- bool matchesExpectation(const char *sourceName, const ImageDigest &digest, |
- const int *tileNumber=NULL); |
+ Expectation getExpectation(const char *sourceName, const int *tileNumber=NULL); |
/** |
* Writes the summary (as constructed so far) to a file. |