diff --git a/src/core/SkGlyphRunPainter.cpp b/src/core/SkGlyphRunPainter.cpp
index b5c2c00..54539a7 100644
--- a/src/core/SkGlyphRunPainter.cpp
+++ b/src/core/SkGlyphRunPainter.cpp
@@ -343,17 +343,6 @@
                     glyphRunList, target->glyphPainter());
         } else {
             textBlobCache->makeMRU(cacheBlob.get());
-
-            if (CACHE_SANITY_CHECK) {
-                sk_sp<GrTextBlob> sanityBlob(textBlobCache->makeBlob(
-                        glyphRunList, grStrikeCache, viewMatrix, color, forceW));
-                sanityBlob->setupKey(key, blurRec, listPaint);
-                cacheBlob->generateFromGlyphRunList(
-                        *context->priv().caps()->shaderCaps(), fOptions,
-                        listPaint, viewMatrix, props, glyphRunList,
-                        target->glyphPainter());
-                GrTextBlob::AssertEqual(*sanityBlob, *cacheBlob);
-            }
         }
     } else {
         if (canCache) {
diff --git a/src/gpu/text/GrTextBlob.cpp b/src/gpu/text/GrTextBlob.cpp
index 793c848..722ddf6 100644
--- a/src/gpu/text/GrTextBlob.cpp
+++ b/src/gpu/text/GrTextBlob.cpp
@@ -243,10 +243,6 @@
 
     void* allocation = ::operator new (size);
 
-    if (CACHE_SANITY_CHECK) {
-        sk_bzero(allocation, size);
-    }
-
     sk_sp<GrTextBlob> blob{new (allocation) GrTextBlob{
         size, strikeCache, viewMatrix, origin, color, forceWForDistanceFields}};
 
@@ -530,57 +526,6 @@
     }
 }
 
-void GrTextBlob::AssertEqual(const GrTextBlob& l, const GrTextBlob& r) {
-    SkASSERT_RELEASE(l.fSize == r.fSize);
-
-    SkASSERT_RELEASE(l.fBlurRec.fSigma == r.fBlurRec.fSigma);
-    SkASSERT_RELEASE(l.fBlurRec.fStyle == r.fBlurRec.fStyle);
-
-    SkASSERT_RELEASE(l.fStrokeInfo.fFrameWidth == r.fStrokeInfo.fFrameWidth);
-    SkASSERT_RELEASE(l.fStrokeInfo.fMiterLimit == r.fStrokeInfo.fMiterLimit);
-    SkASSERT_RELEASE(l.fStrokeInfo.fJoin == r.fStrokeInfo.fJoin);
-
-    SkASSERT_RELEASE(l.fKey == r.fKey);
-    //SkASSERT_RELEASE(l.fPaintColor == r.fPaintColor); // Colors might not actually be identical
-    SkASSERT_RELEASE(l.fMaxMinScale == r.fMaxMinScale);
-    SkASSERT_RELEASE(l.fMinMaxScale == r.fMinMaxScale);
-    SkASSERT_RELEASE(l.fTextType == r.fTextType);
-
-    for(auto t : SkMakeZip(l.fSubRuns, r.fSubRuns)) {
-        const SubRun& lSubRun = std::get<0>(t);
-        const SubRun& rSubRun = std::get<1>(t);
-        SkASSERT(lSubRun.drawAsPaths() == rSubRun.drawAsPaths());
-        if (!lSubRun.drawAsPaths()) {
-
-            // TODO we can do this check, but we have to apply the VM to the old vertex bounds
-            //SkASSERT_RELEASE(lSubRun.vertexBounds() == rSubRun.vertexBounds());
-
-            if (lSubRun.strike()) {
-                SkASSERT_RELEASE(rSubRun.strike());
-                SkASSERT_RELEASE(GrTextStrike::GetKey(*lSubRun.strike()) ==
-                                 GrTextStrike::GetKey(*rSubRun.strike()));
-
-            } else {
-                SkASSERT_RELEASE(!rSubRun.strike());
-            }
-
-            SkASSERT_RELEASE(lSubRun.vertexStartIndex() == rSubRun.vertexStartIndex());
-            SkASSERT_RELEASE(lSubRun.glyphStartIndex() == rSubRun.glyphStartIndex());
-            SkASSERT_RELEASE(lSubRun.maskFormat() == rSubRun.maskFormat());
-            SkASSERT_RELEASE(lSubRun.drawAsDistanceFields() == rSubRun.drawAsDistanceFields());
-            SkASSERT_RELEASE(lSubRun.hasUseLCDText() == rSubRun.hasUseLCDText());
-        } else {
-            SkASSERT_RELEASE(lSubRun.fPaths.size() == rSubRun.fPaths.size());
-            for(auto p : SkMakeZip(lSubRun.fPaths, rSubRun.fPaths)) {
-                const PathGlyph& lPath = std::get<0>(p);
-                const PathGlyph& rPath = std::get<1>(p);
-                SkASSERT_RELEASE(lPath.fPath == rPath.fPath);
-                // We can't assert that these have the same translations
-            }
-        }
-    }
-}
-
 void GrTextBlob::initReusableBlob(SkColor luminanceColor) {
     fLuminanceColor = luminanceColor;
 }
diff --git a/src/gpu/text/GrTextBlob.h b/src/gpu/text/GrTextBlob.h
index 3015fed..f87d8e1 100644
--- a/src/gpu/text/GrTextBlob.h
+++ b/src/gpu/text/GrTextBlob.h
@@ -32,12 +32,6 @@
 class SkTextBlob;
 class SkTextBlobRunIterator;
 
-// With this flag enabled, the GrTextContext will, as a sanity check, regenerate every blob
-// that comes in to verify the integrity of its cache
-// This is of dubious value, and maybe should be removed. I checked it on 11/21/2019, and many
-// tests failed.
-#define CACHE_SANITY_CHECK 0
-
 /*
  * A GrTextBlob contains a fully processed SkTextBlob, suitable for nearly immediate drawing
  * on the GPU.  These are initially created with valid positions and colors, but invalid
@@ -48,7 +42,6 @@
  * The only thing(aside from a memcopy) required to flush a GrTextBlob is to ensure that
  * the GrAtlas will not evict anything the Blob needs.
  *
- * *WARNING* If you add new fields to this struct, then you may need to to update AssertEqual
  */
 class GrTextBlob final : public SkNVRefCnt<GrTextBlob>, public SkGlyphRunPainterInterface {
 public:
@@ -248,8 +241,6 @@
 
     static const int kVerticesPerGlyph = 4;
 
-    static void AssertEqual(const GrTextBlob&, const GrTextBlob&);
-
     // This function will only be called when we are generating a blob from scratch.
     // The color here is the GrPaint color, and it is used to determine whether we
     // have to regenerate LCD text blobs.
