Index: gm/gm_expectations.h |
=================================================================== |
--- gm/gm_expectations.h (revision 8826) |
+++ gm/gm_expectations.h (working copy) |
@@ -12,6 +12,7 @@ |
#include "SkBitmap.h" |
#include "SkBitmapHasher.h" |
#include "SkData.h" |
+#include "SkHashDigest.h" |
#include "SkImageDecoder.h" |
#include "SkOSFile.h" |
#include "SkRefCnt.h" |
@@ -46,6 +47,23 @@ |
namespace skiagm { |
// The actual type we use to represent a checksum is hidden in here. |
+#ifdef BITMAP_HASH_TYPE_SkHashDigest |
+ typedef SkHashDigest Checksum; |
+ static inline Json::Value asJsonValue(Checksum checksum) { |
+ // TODO(epoger): This creates a new copy of the string representation |
+ // of the checksum, by calling Json::duplicateStringValue(). |
+ // We may want to investigate calling Json::Value(const StaticString &value) |
+ // instead, which eliminates the copy but requires that StaticString |
+ // to "stick around". |
+ return Json::Value(checksum.toHexString().c_str()); |
+ } |
+ static inline Checksum asChecksum(Json::Value jsonValue) { |
+ SkHashDigest digest; |
+ // TODO(epoger): handle error in copyFromHexString()? |
+ digest.copyFromHexString(jsonValue.asCString()); |
+ return digest; |
+ } |
+#else |
typedef Json::UInt64 Checksum; |
static inline Json::Value asJsonValue(Checksum checksum) { |
return checksum; |
@@ -53,6 +71,7 @@ |
static inline Checksum asChecksum(Json::Value jsonValue) { |
return jsonValue.asUInt64(); |
} |
+#endif |
static void gm_fprintf(FILE *stream, const char format[], ...) { |
va_list args; |
@@ -94,11 +113,10 @@ |
Expectations(const SkBitmap& bitmap, bool ignoreFailure=kDefaultIgnoreFailure) { |
fBitmap = bitmap; |
fIgnoreFailure = ignoreFailure; |
- SkHashDigest digest; |
- // TODO(epoger): Better handling for error returned by ComputeDigest()? |
- // For now, we just report a digest of 0 in error cases, like before. |
+ BITMAP_HASH_TYPE digest; |
if (!SkBitmapHasher::ComputeDigest(bitmap, &digest)) { |
- digest = 0; |
+ // TODO(epoger): Better handling for error returned by ComputeDigest()? |
+ // For now, we just leave digest empty... |
} |
fAllowedChecksums.push_back() = digest; |
} |
@@ -140,6 +158,16 @@ |
} else { |
for (Json::ArrayIndex i=0; i<allowedChecksums.size(); i++) { |
Json::Value checksumElement = allowedChecksums[i]; |
+#ifdef BITMAP_HASH_TYPE_SkHashDigest |
+ if (!checksumElement.isString()) { |
+ gm_fprintf(stderr, "found non-string checksum" |
+ " in json element '%s'\n", |
+ jsonElement.toStyledString().c_str()); |
+ DEBUGFAIL_SEE_STDERR; |
+ } else { |
+ fAllowedChecksums.push_back() = asChecksum(checksumElement); |
+ } |
+#else |
if (!checksumElement.isIntegral()) { |
gm_fprintf(stderr, "found non-integer checksum" |
" in json element '%s'\n", |
@@ -148,6 +176,7 @@ |
} else { |
fAllowedChecksums.push_back() = asChecksum(checksumElement); |
} |
+#endif |
} |
} |
} |
@@ -170,7 +199,7 @@ |
*/ |
bool match(Checksum actualChecksum) const { |
for (int i=0; i < this->fAllowedChecksums.count(); i++) { |
- Checksum allowedChecksum = this->fAllowedChecksums[i]; |
+ BITMAP_HASH_TYPE allowedChecksum = this->fAllowedChecksums[i]; |
if (allowedChecksum == actualChecksum) { |
return true; |
} |
@@ -197,7 +226,7 @@ |
Json::Value allowedChecksumArray; |
if (!this->fAllowedChecksums.empty()) { |
for (int i=0; i < this->fAllowedChecksums.count(); i++) { |
- Checksum allowedChecksum = this->fAllowedChecksums[i]; |
+ BITMAP_HASH_TYPE allowedChecksum = this->fAllowedChecksums[i]; |
allowedChecksumArray.append(asJsonValue(allowedChecksum)); |
} |
} |
@@ -207,7 +236,7 @@ |
private: |
const static bool kDefaultIgnoreFailure = false; |
- SkTArray<Checksum> fAllowedChecksums; |
+ SkTArray<BITMAP_HASH_TYPE> fAllowedChecksums; |
bool fIgnoreFailure; |
SkBitmap fBitmap; |
}; |