diff --git a/src/utils/SkBitmapHasher.cpp b/src/utils/SkBitmapHasher.cpp
index e8352e5..82cbe9f 100644
--- a/src/utils/SkBitmapHasher.cpp
+++ b/src/utils/SkBitmapHasher.cpp
@@ -7,15 +7,20 @@
 
 #include "SkBitmap.h"
 #include "SkBitmapHasher.h"
-#include "SkCityHash.h"
 #include "SkEndian.h"
 #include "SkImageEncoder.h"
+
+#ifdef BITMAPHASHER_USES_TRUNCATED_MD5
+#include "SkMD5.h"
+#else
+#include "SkCityHash.h"
 #include "SkStream.h"
+#endif
 
 /**
- * Write an integer value to a stream in little-endian order.
+ * Write an int32 value to a stream in little-endian order.
  */
-static void write_int_to_buffer(uint32_t val, SkWStream* out) {
+static void write_int32_to_buffer(uint32_t val, SkWStream* out) {
     val = SkEndian_SwapLE32(val);
     for (size_t byte = 0; byte < 4; ++byte) {
         out->write8((uint8_t)(val & 0xff));
@@ -23,18 +28,29 @@
     }
 }
 
+/**
+ * Return the first 8 bytes of a bytearray, encoded as a little-endian uint64.
+ */
+static inline uint64_t first_8_bytes_as_uint64(const uint8_t *bytearray) {
+    return SkEndian_SwapLE64(*(reinterpret_cast<const uint64_t *>(bytearray)));
+}
+
 /*static*/ bool SkBitmapHasher::ComputeDigestInternal(const SkBitmap& bitmap,
                                                       SkHashDigest *result) {
+#ifdef BITMAPHASHER_USES_TRUNCATED_MD5
+    SkMD5 out;
+#else
     size_t pixelBufferSize = bitmap.width() * bitmap.height() * 4;
     size_t totalBufferSize = pixelBufferSize + 2 * sizeof(uint32_t);
 
     SkAutoMalloc bufferManager(totalBufferSize);
     char *bufferStart = static_cast<char *>(bufferManager.get());
     SkMemoryWStream out(bufferStart, totalBufferSize);
+#endif
 
     // start with the x/y dimensions
-    write_int_to_buffer(SkToU32(bitmap.width()), &out);
-    write_int_to_buffer(SkToU32(bitmap.height()), &out);
+    write_int32_to_buffer(SkToU32(bitmap.width()), &out);
+    write_int32_to_buffer(SkToU32(bitmap.height()), &out);
 
     // add all the pixel data
     SkAutoTDelete<SkImageEncoder> enc(CreateARGBImageEncoder());
@@ -42,7 +58,13 @@
         return false;
     }
 
+#ifdef BITMAPHASHER_USES_TRUNCATED_MD5
+    SkMD5::Digest digest;
+    out.finish(digest);
+    *result = first_8_bytes_as_uint64(digest.data);
+#else
     *result = SkCityHash::Compute64(bufferStart, totalBufferSize);
+#endif
     return true;
 }
 
