diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp
index 1fc8d47..9ce8fa0 100644
--- a/src/gpu/GrGpu.cpp
+++ b/src/gpu/GrGpu.cpp
@@ -32,6 +32,7 @@
 
 GrGpu::GrGpu()
     : fContext(NULL)
+    , fResetCnt(0)
     , fVertexPool(NULL)
     , fIndexPool(NULL)
     , fVertexPoolUseCnt(0)
@@ -61,6 +62,11 @@
     this->releaseResources();
 }
 
+void GrGpu::resetContext() {
+    this->onResetContext();
+    ++fResetCnt;
+}
+
 void GrGpu::abandonResources() {
 
     while (NULL != fResourceHead) {
diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h
index cf29ed7..6961a30 100644
--- a/src/gpu/GrGpu.h
+++ b/src/gpu/GrGpu.h
@@ -288,9 +288,14 @@
     void finalizeReservedVertices();
     void finalizeReservedIndices();
 
-    // overridden by API-specific derived class to handle re-emitting 3D API
-    // preample and dirtying state cache.
-    virtual void resetContext() = 0;
+    // called to handle re-emitting 3D API preample and dirtying state cache.
+    void resetContext();
+    // returns the number of times resetContext has been called. This value
+    // can be used a timestamp to detect when state cache is dirty.
+    int resetCount() const { return fResetCnt; }
+    
+    // subclass implementation of resetContext
+    virtual void onResetContext() = 0;
 
     // overridden by API-specific derived class to create objects.
     virtual GrTexture* onCreateTexture(const GrTextureDesc& desc,
@@ -363,6 +368,8 @@
 
 private:
     GrContext*                  fContext; // not reffed (context refs gpu)
+    
+    int                         fResetCnt;
 
     GrVertexBufferAllocPool*    fVertexPool;
 
diff --git a/src/gpu/GrGpuGL.cpp b/src/gpu/GrGpuGL.cpp
index dc4d78a..1927ae4 100644
--- a/src/gpu/GrGpuGL.cpp
+++ b/src/gpu/GrGpuGL.cpp
@@ -559,7 +559,7 @@
     }
 }
 
-void GrGpuGL::resetContext() {
+void GrGpuGL::onResetContext() {
     if (gPrintStartupSpew && !fPrintedCaps) {
         fPrintedCaps = true;
         this->getCaps().print();
diff --git a/src/gpu/GrGpuGL.h b/src/gpu/GrGpuGL.h
index 51eb4ae..f28f578 100644
--- a/src/gpu/GrGpuGL.h
+++ b/src/gpu/GrGpuGL.h
@@ -70,7 +70,7 @@
     } fHWBounds;
 
     // GrGpu overrides
-    virtual void resetContext();
+    virtual void onResetContext() SK_OVERRIDE;
 
     virtual GrTexture* onCreateTexture(const GrTextureDesc& desc,
                                        const void* srcData,
diff --git a/src/gpu/GrGpuGLFixed.cpp b/src/gpu/GrGpuGLFixed.cpp
index 0c01f77..3534ee7 100644
--- a/src/gpu/GrGpuGLFixed.cpp
+++ b/src/gpu/GrGpuGLFixed.cpp
@@ -67,8 +67,8 @@
 GrGpuGLFixed::~GrGpuGLFixed() {
 }
 
-void GrGpuGLFixed::resetContext() {
-    INHERITED::resetContext();
+void GrGpuGLFixed::onResetContext() {
+    INHERITED::onResetContext();
 
     GL_CALL(Disable(GR_GL_TEXTURE_2D));
 
diff --git a/src/gpu/GrGpuGLFixed.h b/src/gpu/GrGpuGLFixed.h
index ede47aa..a1fce70 100644
--- a/src/gpu/GrGpuGLFixed.h
+++ b/src/gpu/GrGpuGLFixed.h
@@ -29,7 +29,7 @@
                                int indexCount);
 
 private:
-    virtual void resetContext();
+    virtual void onResetContext() SK_OVERRIDE;
 
     // Helpers to make code more readable
     const GrMatrix& getHWSamplerMatrix(int stage) const {
diff --git a/src/gpu/GrGpuGLShaders.cpp b/src/gpu/GrGpuGLShaders.cpp
index 6817580..c287a30 100644
--- a/src/gpu/GrGpuGLShaders.cpp
+++ b/src/gpu/GrGpuGLShaders.cpp
@@ -360,8 +360,8 @@
     }
 }
 
-void GrGpuGLShaders::resetContext() {
-    INHERITED::resetContext();
+void GrGpuGLShaders::onResetContext() {
+    INHERITED::onResetContext();
 
     fHWGeometryState.fVertexOffset = ~0;
 
diff --git a/src/gpu/GrGpuGLShaders.h b/src/gpu/GrGpuGLShaders.h
index fc5215f..baa5d9d 100644
--- a/src/gpu/GrGpuGLShaders.h
+++ b/src/gpu/GrGpuGLShaders.h
@@ -22,14 +22,13 @@
              GrGpuGLShaders(const GrGLInterface* glInterface);
     virtual ~GrGpuGLShaders();
 
-    virtual void resetContext();
-
     virtual void abandonResources();
 
     bool programUnitTest();
 
 protected:
     // overrides from GrGpu
+    virtual void onResetContext() SK_OVERRIDE;
     virtual bool flushGraphicsState(GrPrimitiveType type);
     virtual void setupGeometry(int* startVertex,
                                int* startIndex,
