diff --git a/include/gpu/GrGpuResource.h b/include/gpu/GrGpuResource.h
index 61849e7..f20bad3 100644
--- a/include/gpu/GrGpuResource.h
+++ b/include/gpu/GrGpuResource.h
@@ -80,14 +80,9 @@
 #endif
     }
 
-
 protected:
     GrIORef() : fRefCnt(1), fPendingReads(0), fPendingWrites(0) {}
 
-    bool internalHasPendingRead() const { return SkToBool(fPendingReads); }
-    bool internalHasPendingWrite() const { return SkToBool(fPendingWrites); }
-    bool internalHasPendingIO() const { return SkToBool(fPendingWrites | fPendingReads); }
-
 private:
     void addPendingRead() const {
         this->validate();
diff --git a/include/gpu/GrSurface.h b/include/gpu/GrSurface.h
index 24eb39a..8315c63 100644
--- a/include/gpu/GrSurface.h
+++ b/include/gpu/GrSurface.h
@@ -135,10 +135,6 @@
      */
     bool savePixels(const char* filename);
 
-    bool hasPendingRead() const;
-    bool hasPendingWrite() const;
-    bool hasPendingIO() const;
-
 protected:
     GrSurface(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc)
     : INHERITED(gpu, isWrapped)
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index afe396d..eb8455a 100755
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -1347,7 +1347,7 @@
         }
     }
 
-    if (!(kDontFlush_PixelOpsFlag & flags) && texture->hasPendingIO()) {
+    if (!(kDontFlush_PixelOpsFlag & flags)) {
         this->flush();
     }
 
@@ -1418,7 +1418,7 @@
         }
     }
 
-    if (!(kDontFlush_PixelOpsFlag & flags) && target->hasPendingWrite()) {
+    if (!(kDontFlush_PixelOpsFlag & flags)) {
         this->flush();
     }
 
diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp
index b9e84c0..efbe861 100644
--- a/src/gpu/GrInOrderDrawBuffer.cpp
+++ b/src/gpu/GrInOrderDrawBuffer.cpp
@@ -833,7 +833,7 @@
 
 void GrInOrderDrawBuffer::recordStateIfNecessary() {
     if (fStates.empty()) {
-        this->convertDrawStateToPendingExec(&fStates.push_back(this->getDrawState()));
+        fStates.push_back() = this->getDrawState();
         this->addToCmdBuffer(kSetState_Cmd);
         return;
     }
diff --git a/src/gpu/GrSurface.cpp b/src/gpu/GrSurface.cpp
index d15cbdf..52ab4fd 100644
--- a/src/gpu/GrSurface.cpp
+++ b/src/gpu/GrSurface.cpp
@@ -44,39 +44,3 @@
 
     return true;
 }
-
-bool GrSurface::hasPendingRead() const {
-    const GrTexture* thisTex = this->asTexture();
-    if (thisTex && thisTex->internalHasPendingRead()) {
-        return true;
-    }
-    const GrRenderTarget* thisRT = this->asRenderTarget();
-    if (thisRT && thisRT->internalHasPendingRead()) {
-        return true;
-    }
-    return false;
-}
-
-bool GrSurface::hasPendingWrite() const {
-    const GrTexture* thisTex = this->asTexture();
-    if (thisTex && thisTex->internalHasPendingWrite()) {
-        return true;
-    }
-    const GrRenderTarget* thisRT = this->asRenderTarget();
-    if (thisRT && thisRT->internalHasPendingWrite()) {
-        return true;
-    }
-    return false;
-}
-
-bool GrSurface::hasPendingIO() const {
-    const GrTexture* thisTex = this->asTexture();
-    if (thisTex && thisTex->internalHasPendingIO()) {
-        return true;
-    }
-    const GrRenderTarget* thisRT = this->asRenderTarget();
-    if (thisRT && thisRT->internalHasPendingIO()) {
-        return true;
-    }
-    return false;
-}
