diff --git a/src/lazy/SkLazyPixelRef.cpp b/src/lazy/SkLazyPixelRef.cpp
index c262884..a20b3c0 100644
--- a/src/lazy/SkLazyPixelRef.cpp
+++ b/src/lazy/SkLazyPixelRef.cpp
@@ -12,6 +12,13 @@
 #include "SkImageCache.h"
 #include "SkImagePriv.h"
 
+#if LAZY_CACHE_STATS
+#include "SkThread.h"
+
+int32_t SkLazyPixelRef::gCacheHits;
+int32_t SkLazyPixelRef::gCacheMisses;
+#endif
+
 SkLazyPixelRef::SkLazyPixelRef(SkData* data, SkBitmapFactory::DecodeProc proc, SkImageCache* cache)
     // Pass NULL for the Mutex so that the default (ring buffer) will be used.
     : INHERITED(NULL)
@@ -61,33 +68,44 @@
     }
     SkBitmapFactory::Target target;
     // Check to see if the pixels still exist in the cache.
-    target.fAddr = SkImageCache::UNINITIALIZED_ID == fCacheId ?
-                   NULL : fImageCache->pinCache(fCacheId);
-    if (NULL == target.fAddr) {
-        SkImage::Info info;
-        SkASSERT(fData != NULL && fData->size() > 0);
-        // FIXME: As an optimization, only do this part once.
-        fErrorInDecoding = !fDecodeProc(fData->data(), fData->size(), &info, NULL);
-        if (fErrorInDecoding) {
-            fCacheId = SkImageCache::UNINITIALIZED_ID;
-            return NULL;
+    if (SkImageCache::UNINITIALIZED_ID == fCacheId) {
+        target.fAddr = NULL;
+    } else {
+        target.fAddr = fImageCache->pinCache(fCacheId);
+        if (NULL != target.fAddr) {
+#if LAZY_CACHE_STATS
+            sk_atomic_inc(&gCacheHits);
+#endif
+            return target.fAddr;
         }
-        // Allocate the memory.
-        size_t bytes = ComputeMinRowBytesAndSize(info, &target.fRowBytes);
+#if LAZY_CACHE_STATS
+        sk_atomic_inc(&gCacheMisses);
+#endif
+    }
+    SkASSERT(NULL == target.fAddr);
+    SkImage::Info info;
+    SkASSERT(fData != NULL && fData->size() > 0);
+    // FIXME: As an optimization, only do this part once.
+    fErrorInDecoding = !fDecodeProc(fData->data(), fData->size(), &info, NULL);
+    if (fErrorInDecoding) {
+        fCacheId = SkImageCache::UNINITIALIZED_ID;
+        return NULL;
+    }
+    // Allocate the memory.
+    size_t bytes = ComputeMinRowBytesAndSize(info, &target.fRowBytes);
 
-        target.fAddr = fImageCache->allocAndPinCache(bytes, &fCacheId);
-        if (NULL == target.fAddr) {
-            // Space could not be allocated.
-            fCacheId = SkImageCache::UNINITIALIZED_ID;
-            return NULL;
-        }
-        SkASSERT(SkImageCache::UNINITIALIZED_ID != fCacheId);
-        fErrorInDecoding = !fDecodeProc(fData->data(), fData->size(), &info, &target);
-        if (fErrorInDecoding) {
-            fImageCache->throwAwayCache(fCacheId);
-            fCacheId = SkImageCache::UNINITIALIZED_ID;
-            return NULL;
-        }
+    target.fAddr = fImageCache->allocAndPinCache(bytes, &fCacheId);
+    if (NULL == target.fAddr) {
+        // Space could not be allocated.
+        fCacheId = SkImageCache::UNINITIALIZED_ID;
+        return NULL;
+    }
+    SkASSERT(SkImageCache::UNINITIALIZED_ID != fCacheId);
+    fErrorInDecoding = !fDecodeProc(fData->data(), fData->size(), &info, &target);
+    if (fErrorInDecoding) {
+        fImageCache->throwAwayCache(fCacheId);
+        fCacheId = SkImageCache::UNINITIALIZED_ID;
+        return NULL;
     }
     return target.fAddr;
 }
diff --git a/src/lazy/SkLazyPixelRef.h b/src/lazy/SkLazyPixelRef.h
index e5a20bd..af85f90 100644
--- a/src/lazy/SkLazyPixelRef.h
+++ b/src/lazy/SkLazyPixelRef.h
@@ -17,6 +17,12 @@
 class SkData;
 class SkImageCache;
 
+#ifdef SK_DEBUG
+    #define LAZY_CACHE_STATS 1
+#elif !defined(LAZY_CACHE_STATS)
+    #define LAZY_CACHE_STATS 0
+#endif
+
 /**
  *  PixelRef which defers decoding until SkBitmap::lockPixels() is called.
  */
@@ -38,6 +44,12 @@
     intptr_t getCacheId() const { return fCacheId; }
 #endif
 
+#if LAZY_CACHE_STATS
+    static int32_t GetCacheHits() { return gCacheHits; }
+    static int32_t GetCacheMisses() { return gCacheMisses; }
+    static void ResetCacheStats() { gCacheHits = gCacheMisses = 0; }
+#endif
+
     // No need to flatten this object. When flattening an SkBitmap, SkOrderedWriteBuffer will check
     // the encoded data and write that instead.
     // Future implementations of SkFlattenableWriteBuffer will need to special case for
@@ -57,6 +69,11 @@
     SkImageCache*               fImageCache;
     intptr_t                    fCacheId;
 
+#if LAZY_CACHE_STATS
+    static int32_t              gCacheHits;
+    static int32_t              gCacheMisses;
+#endif
+
     typedef SkPixelRef INHERITED;
 };
 
