diff --git a/src/gpu/GrLayerCache.cpp b/src/gpu/GrLayerCache.cpp
index 50f7abe..0481d14 100644
--- a/src/gpu/GrLayerCache.cpp
+++ b/src/gpu/GrLayerCache.cpp
@@ -153,12 +153,14 @@
 
     if (layer->locked()) {
         // This layer is already locked
+#ifdef SK_DEBUG
         if (layer->isAtlased()) {
-            this->incPlotLock(layer->plot()->id());
+            // It claims to be atlased
             SkASSERT(!dontAtlas);
             SkASSERT(layer->rect().width() == desc.fWidth);
             SkASSERT(layer->rect().height() == desc.fHeight);
         }
+#endif
         return false;
     }
 
@@ -166,7 +168,7 @@
         // Hooray it is still in the atlas - make sure it stays there
         SkASSERT(!dontAtlas);
         layer->setLocked(true);
-        this->incPlotLock(layer->plot()->id());
+        fPlotLocks[layer->plot()->id()]++;
         return false;
     } else if (!dontAtlas && PlausiblyAtlasable(desc.fWidth, desc.fHeight)) {
         // Not in the atlas - will it fit?
@@ -191,7 +193,7 @@
                 layer->setTexture(fAtlas->getTexture(), bounds);
                 layer->setPlot(plot);
                 layer->setLocked(true);
-                this->incPlotLock(layer->plot()->id());
+                fPlotLocks[layer->plot()->id()]++;
                 return true;
             }
 
@@ -217,7 +219,7 @@
 void GrLayerCache::unlock(GrCachedLayer* layer) {
     SkDEBUGCODE(GrAutoValidateLayer avl(fAtlas->getTexture(), layer);)
 
-    if (NULL == layer) {
+    if (NULL == layer || !layer->locked()) {
         // invalid or not locked
         return;
     }
@@ -225,7 +227,8 @@
     if (layer->isAtlased()) {
         const int plotID = layer->plot()->id();
 
-        this->decPlotLock(plotID);
+        SkASSERT(fPlotLocks[plotID] > 0);
+        fPlotLocks[plotID]--;
         // At this point we could aggressively clear out un-locked plots but
         // by delaying we may be able to reuse some of the atlased layers later.
 #if DISABLE_CACHING
@@ -250,6 +253,9 @@
 
 #ifdef SK_DEBUG
 void GrLayerCache::validate() const {
+    int plotLocks[kNumPlotsX * kNumPlotsY];
+    memset(plotLocks, 0, sizeof(plotLocks));
+
     SkTDynamicHash<GrCachedLayer, GrCachedLayer::Key>::ConstIter iter(&fLayerHash);
     for (; !iter.done(); ++iter) {
         const GrCachedLayer* layer = &(*iter);
@@ -264,7 +270,7 @@
             SkASSERT(!pictInfo->fPlotUsage.isEmpty());
 #endif
         } else {
-            // If there is no picture info for this picture then all of its
+            // If there is no picture info for this layer then all of its
             // layers should be non-atlased.
             SkASSERT(!layer->isAtlased());
         }
@@ -276,10 +282,14 @@
             SkASSERT(pictInfo->fPlotUsage.contains(layer->plot()));
 
             if (layer->locked()) {
-                SkASSERT(fPlotLocks[layer->plot()->id()] > 0);
+                plotLocks[layer->plot()->id()]++;
             }
         } 
     }
+
+    for (int i = 0; i < kNumPlotsX*kNumPlotsY; ++i) {
+        SkASSERT(plotLocks[i] == fPlotLocks[i]);
+    }
 }
 
 class GrAutoValidateCache : ::SkNoncopyable {
diff --git a/src/gpu/GrLayerCache.h b/src/gpu/GrLayerCache.h
index 7bc98b0..790b82a 100644
--- a/src/gpu/GrLayerCache.h
+++ b/src/gpu/GrLayerCache.h
@@ -231,10 +231,9 @@
     // This implements a plot-centric locking mechanism (since the atlas
     // backing texture is always locked). Each layer that is locked (i.e.,
     // needed for the current rendering) in a plot increments the plot lock
-    // count for that plot for each time it is used. Similarly, once a 
-    // rendering is complete all the layers used in it decrement the lock
-    // count for the used plots. Plots with a 0 lock count are open for 
-    // recycling/purging.
+    // count for that plot. Similarly, once a rendering is complete all the
+    // layers used in it decrement the lock count for the used plots.
+    // Plots with a 0 lock count are open for recycling/purging.
     int fPlotLocks[kNumPlotsX * kNumPlotsY];
 
     void initAtlas();
@@ -256,12 +255,6 @@
     // was purged; false otherwise.
     bool purgePlot();
 
-    void incPlotLock(int plotIdx) { ++fPlotLocks[plotIdx]; }
-    void decPlotLock(int plotIdx) {
-        SkASSERT(fPlotLocks[plotIdx] > 0);
-        --fPlotLocks[plotIdx];
-    }
-
     // for testing
     friend class TestingAccess;
     int numLayers() const { return fLayerHash.count(); }
