diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index f205080..71d0d13 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -1543,7 +1543,7 @@
         return;
     }
 
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(
             paint, props, this->scalerContextFlags(), fMatrix);
 
     // The Blitter Choose needs to be live while using the blitter below.
@@ -1575,7 +1575,7 @@
     SkPaint::GlyphCacheProc glyphCacheProc = SkPaint::GetGlyphCacheProc(paint.getTextEncoding(),
                                                                         paint.isDevKernText(),
                                                                         true);
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(
             paint, props, this->scalerContextFlags(), nullptr);
 
     const char*        stop = text + byteLength;
@@ -1623,7 +1623,7 @@
         return;
     }
 
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(
             paint, props, this->scalerContextFlags(), fMatrix);
 
     // The Blitter Choose needs to be live while using the blitter below.
diff --git a/src/core/SkGlyphCache.cpp b/src/core/SkGlyphCache.cpp
index 5327d1a..3475b60 100644
--- a/src/core/SkGlyphCache.cpp
+++ b/src/core/SkGlyphCache.cpp
@@ -9,7 +9,6 @@
 #include "SkGraphics.h"
 #include "SkMutex.h"
 #include "SkOnce.h"
-#include "SkPaintPriv.h"
 #include "SkPath.h"
 #include "SkTemplates.h"
 #include "SkTypeface.h"
@@ -387,38 +386,6 @@
     SkDebugf("%s\n", msg.c_str());
 }
 
-SkExclusiveStrikePtr SkGlyphCache::FindStrikeExclusive(const SkDescriptor& desc) {
-    return SkStrikeCache::FindStrikeExclusive(desc);
-}
-
-SkExclusiveStrikePtr SkGlyphCache::FindOrCreateStrikeExclusive(
-    const SkDescriptor& desc, const SkScalerContextEffects& effects, const SkTypeface& typeface)
-{
-    auto cache = SkGlyphCache::FindStrikeExclusive(desc);
-    if (cache == nullptr) {
-        auto scaler = SkStrikeCache::CreateScalerContext(desc, effects, typeface);
-        cache = SkStrikeCache::CreateStrikeExclusive(desc, std::move(scaler));
-    }
-    return cache;
-}
-
-SkExclusiveStrikePtr SkGlyphCache::FindOrCreateStrikeExclusive(
-    const SkPaint& paint,
-    const SkSurfaceProps* surfaceProps,
-    SkScalerContextFlags scalerContextFlags,
-    const SkMatrix* deviceMatrix)
-{
-    SkAutoDescriptor ad;
-    SkScalerContextEffects effects;
-
-    auto desc = SkScalerContext::CreateDescriptorAndEffectsUsingPaint(
-        paint, surfaceProps, scalerContextFlags, deviceMatrix, &ad, &effects);
-
-    auto tf = SkPaintPriv::GetTypefaceOrDefault(paint);
-
-    return FindOrCreateStrikeExclusive(*desc, effects, *tf);
-}
-
 #ifdef SK_DEBUG
 
 void SkGlyphCache::validate() const {
diff --git a/src/core/SkGlyphCache.h b/src/core/SkGlyphCache.h
index ca6ae8f..8d5098a 100644
--- a/src/core/SkGlyphCache.h
+++ b/src/core/SkGlyphCache.h
@@ -123,24 +123,6 @@
 
     SkScalerContext* getScalerContext() const { return fScalerContext.get(); }
 
-    static SkExclusiveStrikePtr FindStrikeExclusive(const SkDescriptor& desc);
-
-    static SkExclusiveStrikePtr FindOrCreateStrikeExclusive(
-        const SkDescriptor& desc,
-        const SkScalerContextEffects& effects,
-        const SkTypeface& typeface);
-
-    static SkExclusiveStrikePtr FindOrCreateStrikeExclusive(
-        const SkPaint& paint,
-        const SkSurfaceProps* surfaceProps,
-        SkScalerContextFlags scalerContextFlags,
-        const SkMatrix* deviceMatrix);
-
-    static SkExclusiveStrikePtr FindOrCreateStrikeExclusive(const SkPaint& paint) {
-        return FindOrCreateStrikeExclusive(
-                paint, nullptr, SkScalerContextFlags::kFakeGammaAndBoostContrast, nullptr);
-    }
-
 #ifdef SK_DEBUG
     void validate() const;
 #else
@@ -244,11 +226,9 @@
     SkAutoGlyphCacheNoGamma(const SkPaint& paint,
                             const SkSurfaceProps* surfaceProps,
                             const SkMatrix* matrix)
-        : INHERITED(SkGlyphCache::FindOrCreateStrikeExclusive(
+        : SkExclusiveStrikePtr(SkStrikeCache::FindOrCreateStrikeExclusive(
             paint, surfaceProps, SkScalerContextFlags::kNone, matrix)) {}
 
-private:
-    using INHERITED = SkExclusiveStrikePtr;
 };
 #define SkAutoGlyphCacheNoGamma(...) SK_REQUIRE_LOCAL_VAR(SkAutoGlyphCacheNoGamma)
 #endif
diff --git a/src/core/SkOverdrawCanvas.cpp b/src/core/SkOverdrawCanvas.cpp
index eee7d83..118b943 100644
--- a/src/core/SkOverdrawCanvas.cpp
+++ b/src/core/SkOverdrawCanvas.cpp
@@ -63,7 +63,7 @@
     ProcessOneGlyphBounds processBounds(this);
     SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
     this->getProps(&props);
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(
             paint, &props, SkScalerContextFlags::kNone, &this->getTotalMatrix());
     SkFindAndPlaceGlyph::ProcessText(paint.getTextEncoding(), (const char*) text, byteLength,
                                      SkPoint::Make(x, y), SkMatrix(), paint.getTextAlign(),
@@ -76,7 +76,7 @@
     ProcessOneGlyphBounds processBounds(this);
     SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
     this->getProps(&props);
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(
             paint, &props, SkScalerContextFlags::kNone, &this->getTotalMatrix());
     SkFindAndPlaceGlyph::ProcessPosText(paint.getTextEncoding(), (const char*) text, byteLength,
                                         SkPoint::Make(0, 0), SkMatrix(), (const SkScalar*) pos, 2,
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index 3dc0af6..141b60b 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -430,7 +430,7 @@
         return SkToInt(byteLength >> 1);
     }
 
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(*this);
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(*this);
 
     const char* text = (const char*)textData;
     const char* stop = text + byteLength;
@@ -487,7 +487,7 @@
         return true;
     }
 
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(*this);
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(*this);
 
     switch (this->getTextEncoding()) {
         case SkPaint::kUTF8_TextEncoding: {
@@ -536,7 +536,7 @@
     SkASSERT(textData != nullptr);
 
     SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(
             *this, &props, SkScalerContextFlags::kFakeGammaAndBoostContrast, nullptr);
 
     for (int index = 0; index < count; index++) {
@@ -801,7 +801,7 @@
     const SkPaint& paint = canon.getPaint();
     SkScalar scale = canon.getScale();
 
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(paint);
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(paint);
 
     SkScalar width = 0;
 
@@ -854,7 +854,7 @@
         maxWidth /= scale;
     }
 
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(paint);
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(paint);
 
     GlyphCacheProc   glyphCacheProc = SkPaint::GetGlyphCacheProc(paint.getTextEncoding(),
                                                                  paint.isDevKernText(),
@@ -924,7 +924,7 @@
 
     {
         auto typeface = SkPaintPriv::GetTypefaceOrDefault(paint);
-        auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(*desc, effects, *typeface);
+        auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(*desc, effects, *typeface);
         *metrics = cache->getFontMetrics();
     }
 
@@ -959,7 +959,7 @@
     const SkPaint& paint = canon.getPaint();
     SkScalar scale = canon.getScale();
 
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(paint);
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(paint);
     GlyphCacheProc      glyphCacheProc = SkPaint::GetGlyphCacheProc(paint.getTextEncoding(),
                                                                     paint.isDevKernText(),
                                                                     nullptr != bounds);
@@ -1741,7 +1741,7 @@
     }
 
     // SRGBTODO: Is this correct?
-    fCache = SkGlyphCache::FindOrCreateStrikeExclusive(
+    fCache = SkStrikeCache::FindOrCreateStrikeExclusive(
         fPaint, nullptr,
         SkScalerContextFlags::kFakeGammaAndBoostContrast, nullptr);
 
diff --git a/src/core/SkRemoteGlyphCache.cpp b/src/core/SkRemoteGlyphCache.cpp
index 9252589..d736223 100644
--- a/src/core/SkRemoteGlyphCache.cpp
+++ b/src/core/SkRemoteGlyphCache.cpp
@@ -326,7 +326,7 @@
     auto typefaceID = SkTypefaceProxy::DownCast(runPaint.getTypeface())->remoteTypefaceID();
     auto& diffs = fStrikeCacheDiff->findStrikeDifferences(*desc, typefaceID);
 
-    auto cache = SkGlyphCache::FindStrikeExclusive(*desc);
+    auto cache = SkStrikeCache::FindStrikeExclusive(*desc);
     bool isSubpixel = SkToBool(rec.fFlags & SkScalerContext::kSubpixelPositioning_Flag);
     SkAxisAlignment axisAlignment = SkAxisAlignment::kNone_SkAxisAlignment;
     if (it.positioning() == SkTextBlob::kHorizontal_Positioning) {
@@ -480,7 +480,7 @@
 
         // TODO: implement effects handling.
         SkScalerContextEffects effects;
-        auto strike = SkGlyphCache::FindStrikeExclusive(*desc);
+        auto strike = SkStrikeCache::FindStrikeExclusive(*desc);
         if (strike == nullptr) {
             auto scaler = SkStrikeCache::CreateScalerContext(*desc, effects, *tf);
             strike = SkStrikeCache::CreateStrikeExclusive(*desc, std::move(scaler), fontMetrics);
diff --git a/src/core/SkStrikeCache.cpp b/src/core/SkStrikeCache.cpp
index 8d0b832..f5ae5bc 100644
--- a/src/core/SkStrikeCache.cpp
+++ b/src/core/SkStrikeCache.cpp
@@ -17,6 +17,7 @@
 #include "SkTraceMemoryDump.h"
 #include "SkTypeface.h"
 #include "SkTypefaceCache.h"
+#include "SkPaintPriv.h"
 
 // Returns the shared globals
 static SkStrikeCache& get_globals() {
@@ -378,4 +379,37 @@
     }
 
     return SkExclusiveStrikePtr(new SkGlyphCache(desc, move(scaler), fontMetrics));
+}
+
+SkExclusiveStrikePtr SkStrikeCache::FindOrCreateStrikeExclusive(
+    const SkDescriptor& desc, const SkScalerContextEffects& effects, const SkTypeface& typeface)
+{
+    auto cache = FindStrikeExclusive(desc);
+    if (cache == nullptr) {
+        auto scaler = CreateScalerContext(desc, effects, typeface);
+        cache = CreateStrikeExclusive(desc, move(scaler));
+    }
+    return cache;
+}
+
+SkExclusiveStrikePtr SkStrikeCache::FindOrCreateStrikeExclusive(
+    const SkPaint& paint,
+    const SkSurfaceProps* surfaceProps,
+    SkScalerContextFlags scalerContextFlags,
+    const SkMatrix* deviceMatrix)
+{
+    SkAutoDescriptor ad;
+    SkScalerContextEffects effects;
+
+    auto desc = SkScalerContext::CreateDescriptorAndEffectsUsingPaint(
+        paint, surfaceProps, scalerContextFlags, deviceMatrix, &ad, &effects);
+
+    auto tf = SkPaintPriv::GetTypefaceOrDefault(paint);
+
+    return FindOrCreateStrikeExclusive(*desc, effects, *tf);
+}
+
+SkExclusiveStrikePtr SkStrikeCache::FindOrCreateStrikeExclusive(const SkPaint& paint) {
+    return FindOrCreateStrikeExclusive(
+            paint, nullptr, kFakeGammaAndBoostContrast, nullptr);
 }
\ No newline at end of file
diff --git a/src/core/SkStrikeCache.h b/src/core/SkStrikeCache.h
index 078adfe..a72e71f 100644
--- a/src/core/SkStrikeCache.h
+++ b/src/core/SkStrikeCache.h
@@ -46,14 +46,27 @@
 
     static ExclusiveStrikePtr FindStrikeExclusive(const SkDescriptor&);
 
-    static std::unique_ptr<SkScalerContext> CreateScalerContext(
-        const SkDescriptor&, const SkScalerContextEffects&, const SkTypeface&);
-
     static ExclusiveStrikePtr CreateStrikeExclusive(
             const SkDescriptor& desc,
             std::unique_ptr<SkScalerContext> scaler,
             SkPaint::FontMetrics* maybeMetrics = nullptr);
 
+    static ExclusiveStrikePtr FindOrCreateStrikeExclusive(
+            const SkDescriptor& desc,
+            const SkScalerContextEffects& effects,
+            const SkTypeface& typeface);
+
+    static ExclusiveStrikePtr FindOrCreateStrikeExclusive(
+            const SkPaint& paint,
+            const SkSurfaceProps* surfaceProps,
+            SkScalerContextFlags scalerContextFlags,
+            const SkMatrix* deviceMatrix);
+
+    static ExclusiveStrikePtr FindOrCreateStrikeExclusive(const SkPaint& paint);
+
+    static std::unique_ptr<SkScalerContext> CreateScalerContext(
+            const SkDescriptor&, const SkScalerContextEffects&, const SkTypeface&);
+
     static void PurgeAll();
 
     static void Dump();
diff --git a/src/gpu/text/GrAtlasTextBlob.cpp b/src/gpu/text/GrAtlasTextBlob.cpp
index 73c8721..611abf7 100644
--- a/src/gpu/text/GrAtlasTextBlob.cpp
+++ b/src/gpu/text/GrAtlasTextBlob.cpp
@@ -71,7 +71,7 @@
     run->fTypeface = SkPaintPriv::RefTypefaceOrDefault(skPaint);
     run->fPathEffect = sk_ref_sp(effects.fPathEffect);
     run->fMaskFilter = sk_ref_sp(effects.fMaskFilter);
-    return SkGlyphCache::FindOrCreateStrikeExclusive(*desc->getDesc(), effects, *run->fTypeface);
+    return SkStrikeCache::FindOrCreateStrikeExclusive(*desc->getDesc(), effects, *run->fTypeface);
 }
 
 void GrAtlasTextBlob::appendGlyph(int runIndex,
diff --git a/src/gpu/text/GrAtlasTextBlobVertexRegenerator.cpp b/src/gpu/text/GrAtlasTextBlobVertexRegenerator.cpp
index 92d6eb0..e2d4fe1 100644
--- a/src/gpu/text/GrAtlasTextBlobVertexRegenerator.cpp
+++ b/src/gpu/text/GrAtlasTextBlobVertexRegenerator.cpp
@@ -245,7 +245,7 @@
             effects.fPathEffect = fRun->fPathEffect.get();
             effects.fMaskFilter = fRun->fMaskFilter.get();
             *fLazyCache =
-                SkGlyphCache::FindOrCreateStrikeExclusive(*desc, effects, *fRun->fTypeface);
+                SkStrikeCache::FindOrCreateStrikeExclusive(*desc, effects, *fRun->fTypeface);
         }
 
         if (regenGlyphs) {
diff --git a/src/gpu/text/GrAtlasTextContext.cpp b/src/gpu/text/GrAtlasTextContext.cpp
index b0f5405..6be6b5b 100644
--- a/src/gpu/text/GrAtlasTextContext.cpp
+++ b/src/gpu/text/GrAtlasTextContext.cpp
@@ -500,7 +500,7 @@
     SkPaint::GlyphCacheProc glyphCacheProc = SkPaint::GetGlyphCacheProc(pathPaint.getTextEncoding(),
                                                                         pathPaint.isDevKernText(),
                                                                         true);
-    auto cache = SkGlyphCache::FindOrCreateStrikeExclusive(
+    auto cache = SkStrikeCache::FindOrCreateStrikeExclusive(
             pathPaint, &props, SkScalerContextFlags::kFakeGammaAndBoostContrast, nullptr);
 
     const char*        stop = text + byteLength;
@@ -703,7 +703,7 @@
 
     {
         auto origPaintCache =
-            SkGlyphCache::FindOrCreateStrikeExclusive(*desc.getDesc(), effects, *typeface);
+            SkStrikeCache::FindOrCreateStrikeExclusive(*desc.getDesc(), effects, *typeface);
 
         SkAutoKern autokern;
         const char* stop = text + byteLength;
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 95864d9..ff14c41 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -1368,7 +1368,7 @@
         scaledGlyphCachePaint.setTextScaleX(paint.getTextScaleX());
         scaledGlyphCachePaint.setTextSkewX(paint.getTextSkewX());
         scaledGlyphCachePaint.setTypeface(sk_ref_sp(typeface));
-        auto scaledGlyphCache = SkGlyphCache::FindOrCreateStrikeExclusive(scaledGlyphCachePaint);
+        auto scaledGlyphCache = SkStrikeCache::FindOrCreateStrikeExclusive(scaledGlyphCachePaint);
         SkTHashMap<SkPDFCanon::BitmapGlyphKey, SkPDFCanon::BitmapGlyph>* map =
             &this->getCanon()->fBitmapGlyphImages;
         for (PositionedGlyph positionedGlyph : fMissingGlyphs) {
diff --git a/src/pdf/SkPDFFont.cpp b/src/pdf/SkPDFFont.cpp
index c9230f0..11c4b58 100644
--- a/src/pdf/SkPDFFont.cpp
+++ b/src/pdf/SkPDFFont.cpp
@@ -38,7 +38,7 @@
     }
     tmpPaint.setTextSize((SkScalar)unitsPerEm);
     const SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
-    return SkGlyphCache::FindOrCreateStrikeExclusive(
+    return SkStrikeCache::FindOrCreateStrikeExclusive(
             tmpPaint, &props, SkScalerContextFlags::kFakeGammaAndBoostContrast, nullptr);
 }
 
diff --git a/src/xps/SkXPSDevice.cpp b/src/xps/SkXPSDevice.cpp
index 2cfb545..856cafe 100644
--- a/src/xps/SkXPSDevice.cpp
+++ b/src/xps/SkXPSDevice.cpp
@@ -1876,7 +1876,7 @@
     newTypefaceUse.fontData = fontData;
     newTypefaceUse.xpsFont = xpsFontResource.release();
     auto glyphCache =
-        SkGlyphCache::FindOrCreateStrikeExclusive(
+        SkStrikeCache::FindOrCreateStrikeExclusive(
             paint, &this->surfaceProps(),
             SkScalerContextFlags::kNone, nullptr);
     unsigned int glyphCount = glyphCache->getGlyphCount();
@@ -2063,7 +2063,7 @@
     HRV(CreateTypefaceUse(paint, &typeface));
 
     auto cache =
-        SkGlyphCache::FindOrCreateStrikeExclusive(
+        SkStrikeCache::FindOrCreateStrikeExclusive(
             paint, &this->surfaceProps(),
             SkScalerContextFlags::kNone, nullptr);
 
@@ -2121,7 +2121,7 @@
     HRV(CreateTypefaceUse(paint, &typeface));
 
     auto cache =
-        SkGlyphCache::FindOrCreateStrikeExclusive(
+        SkStrikeCache::FindOrCreateStrikeExclusive(
             paint, &this->surfaceProps(),
             SkScalerContextFlags::kNone, nullptr);
 
