diff --git a/src/core/SkBlitter.h b/src/core/SkBlitter.h
index 4d34ce3..1fc4959 100644
--- a/src/core/SkBlitter.h
+++ b/src/core/SkBlitter.h
@@ -15,6 +15,7 @@
 #include "SkRegion.h"
 #include "SkShader.h"
 
+class SkArenaAlloc;
 class SkMatrix;
 class SkPaint;
 class SkPixmap;
@@ -144,7 +145,7 @@
                                    const SkPaint&,
                                    const SkPixmap& src,
                                    int left, int top,
-                                   SkTBlitterAllocator*);
+                                   SkArenaAlloc*);
     ///@}
 
     static SkShader::ContextRec::DstType PreferredShaderDest(const SkImageInfo&);
diff --git a/src/core/SkBlitter_Sprite.cpp b/src/core/SkBlitter_Sprite.cpp
index cef4cfa..4c184bd 100644
--- a/src/core/SkBlitter_Sprite.cpp
+++ b/src/core/SkBlitter_Sprite.cpp
@@ -5,8 +5,8 @@
  * found in the LICENSE file.
  */
 
+#include "SkArenaAlloc.h"
 #include "SkOpts.h"
-#include "SkSmallAllocator.h"
 #include "SkSpriteBlitter.h"
 
 SkSpriteBlitter::SkSpriteBlitter(const SkPixmap& source)
@@ -140,7 +140,7 @@
 // returning null means the caller will call SkBlitter::Choose() and
 // have wrapped the source bitmap inside a shader
 SkBlitter* SkBlitter::ChooseSprite(const SkPixmap& dst, const SkPaint& paint,
-        const SkPixmap& source, int left, int top, SkTBlitterAllocator* allocator) {
+        const SkPixmap& source, int left, int top, SkArenaAlloc* allocator) {
     /*  We currently ignore antialiasing and filtertype, meaning we will take our
         special blitters regardless of these settings. Ignoring filtertype seems fine
         since by definition there is no scale in the matrix. Ignoring antialiasing is
@@ -161,7 +161,7 @@
     SkSpriteBlitter* blitter = nullptr;
 
     if (SkSpriteBlitter_Src_SrcOver::Supports(dst, source, paint)) {
-        blitter = allocator->createT<SkSpriteBlitter_Src_SrcOver>(source);
+        blitter = allocator->make<SkSpriteBlitter_Src_SrcOver>(source);
     } else {
         switch (dst.colorType()) {
             case kRGB_565_SkColorType:
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 2891c95..d11bcd2 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -1331,7 +1331,8 @@
         int ix = SkScalarRoundToInt(matrix.getTranslateX());
         int iy = SkScalarRoundToInt(matrix.getTranslateY());
         if (clipHandlesSprite(*fRC, ix, iy, pmap)) {
-            SkTBlitterAllocator allocator;
+            char storage[kSkBlitterContextSize];
+            SkArenaAlloc allocator{storage};
             // blitter will be owned by the allocator.
             SkBlitter* blitter = SkBlitter::ChooseSprite(fDst, *paint, pmap, ix, iy, &allocator);
             if (blitter) {
@@ -1388,8 +1389,9 @@
     const SkPixmap& pmap = unlocker.pixmap();
 
     if (nullptr == paint.getColorFilter() && clipHandlesSprite(*fRC, x, y, pmap)) {
-        SkTBlitterAllocator allocator;
         // blitter will be owned by the allocator.
+        char storage[kSkBlitterContextSize];
+        SkArenaAlloc allocator{storage};
         SkBlitter* blitter = SkBlitter::ChooseSprite(fDst, paint, pmap, x, y, &allocator);
         if (blitter) {
             SkScan::FillIRect(bounds, *fRC, blitter);
diff --git a/src/core/SkSpriteBlitter.h b/src/core/SkSpriteBlitter.h
index 3a62860..3113d79 100644
--- a/src/core/SkSpriteBlitter.h
+++ b/src/core/SkSpriteBlitter.h
@@ -33,10 +33,10 @@
     // A SkSpriteBlitter must implement blitRect.
     void blitRect(int x, int y, int width, int height) override = 0;
 
-    static SkSpriteBlitter* ChooseD16(const SkPixmap& source, const SkPaint&, SkTBlitterAllocator*);
-    static SkSpriteBlitter* ChooseL32(const SkPixmap& source, const SkPaint&, SkTBlitterAllocator*);
-    static SkSpriteBlitter* ChooseS32(const SkPixmap& source, const SkPaint&, SkTBlitterAllocator*);
-    static SkSpriteBlitter* ChooseF16(const SkPixmap& source, const SkPaint&, SkTBlitterAllocator*);
+    static SkSpriteBlitter* ChooseD16(const SkPixmap& source, const SkPaint&, SkArenaAlloc*);
+    static SkSpriteBlitter* ChooseL32(const SkPixmap& source, const SkPaint&, SkArenaAlloc*);
+    static SkSpriteBlitter* ChooseS32(const SkPixmap& source, const SkPaint&, SkArenaAlloc*);
+    static SkSpriteBlitter* ChooseF16(const SkPixmap& source, const SkPaint&, SkArenaAlloc*);
 
 protected:
     SkPixmap        fDst;
diff --git a/src/core/SkSpriteBlitter4f.cpp b/src/core/SkSpriteBlitter4f.cpp
index 977a264..f893478 100644
--- a/src/core/SkSpriteBlitter4f.cpp
+++ b/src/core/SkSpriteBlitter4f.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "SkSpriteBlitter.h"
+#include "SkArenaAlloc.h"
 #include "SkSpanProcs.h"
 #include "SkTemplates.h"
 #include "SkXfermodePriv.h"
@@ -62,7 +63,7 @@
 
 
 SkSpriteBlitter* SkSpriteBlitter::ChooseF16(const SkPixmap& source, const SkPaint& paint,
-                                            SkTBlitterAllocator* allocator) {
+                                            SkArenaAlloc* allocator) {
     SkASSERT(allocator != nullptr);
 
     if (paint.getMaskFilter() != nullptr) {
@@ -72,7 +73,7 @@
     switch (source.colorType()) {
         case kN32_SkColorType:
         case kRGBA_F16_SkColorType:
-            return allocator->createT<Sprite_F16>(source, paint);
+            return allocator->make<Sprite_F16>(source, paint);
         default:
             return nullptr;
     }
@@ -112,7 +113,7 @@
 
 
 SkSpriteBlitter* SkSpriteBlitter::ChooseS32(const SkPixmap& source, const SkPaint& paint,
-                                            SkTBlitterAllocator* allocator) {
+                                            SkArenaAlloc* allocator) {
     SkASSERT(allocator != nullptr);
 
     if (paint.getMaskFilter() != nullptr) {
@@ -122,7 +123,7 @@
     switch (source.colorType()) {
         case kN32_SkColorType:
         case kRGBA_F16_SkColorType:
-            return allocator->createT<Sprite_sRGB>(source, paint);
+            return allocator->make<Sprite_sRGB>(source, paint);
         default:
             return nullptr;
     }
diff --git a/src/core/SkSpriteBlitter_ARGB32.cpp b/src/core/SkSpriteBlitter_ARGB32.cpp
index 99856a1..6b6d8b1 100644
--- a/src/core/SkSpriteBlitter_ARGB32.cpp
+++ b/src/core/SkSpriteBlitter_ARGB32.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "SkSpriteBlitter.h"
+#include "SkArenaAlloc.h"
 #include "SkBlitRow.h"
 #include "SkColorFilter.h"
 #include "SkColorPriv.h"
@@ -253,7 +254,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 SkSpriteBlitter* SkSpriteBlitter::ChooseL32(const SkPixmap& source, const SkPaint& paint,
-                                            SkTBlitterAllocator* allocator) {
+                                            SkArenaAlloc* allocator) {
     SkASSERT(allocator != nullptr);
 
     if (paint.getMaskFilter() != nullptr) {
@@ -271,22 +272,22 @@
                 return nullptr;    // we only have opaque sprites
             }
             if (!isSrcOver || filter) {
-                blitter = allocator->createT<Sprite_D32_S4444_XferFilter>(source, paint);
+                blitter = allocator->make<Sprite_D32_S4444_XferFilter>(source, paint);
             } else if (source.isOpaque()) {
-                blitter = allocator->createT<Sprite_D32_S4444_Opaque>(source);
+                blitter = allocator->make<Sprite_D32_S4444_Opaque>(source);
             } else {
-                blitter = allocator->createT<Sprite_D32_S4444>(source);
+                blitter = allocator->make<Sprite_D32_S4444>(source);
             }
             break;
         case kN32_SkColorType:
             if (!isSrcOver || filter) {
                 if (255 == alpha) {
                     // this can handle xfermode or filter, but not alpha
-                    blitter = allocator->createT<Sprite_D32_S32A_XferFilter>(source, paint);
+                    blitter = allocator->make<Sprite_D32_S32A_XferFilter>(source, paint);
                 }
             } else {
                 // this can handle alpha, but not xfermode or filter
-                blitter = allocator->createT<Sprite_D32_S32>(source, alpha);
+                blitter = allocator->make<Sprite_D32_S32>(source, alpha);
             }
             break;
         default:
diff --git a/src/core/SkSpriteBlitter_RGB16.cpp b/src/core/SkSpriteBlitter_RGB16.cpp
index 9df7dab..6d9375d 100644
--- a/src/core/SkSpriteBlitter_RGB16.cpp
+++ b/src/core/SkSpriteBlitter_RGB16.cpp
@@ -7,6 +7,7 @@
 
 
 #include "SkSpriteBlitter.h"
+#include "SkArenaAlloc.h"
 #include "SkBlitRow.h"
 #include "SkTemplates.h"
 #include "SkUtils.h"
@@ -300,7 +301,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 SkSpriteBlitter* SkSpriteBlitter::ChooseD16(const SkPixmap& source, const SkPaint& paint,
-                                            SkTBlitterAllocator* allocator) {
+                                            SkArenaAlloc* allocator) {
 
     SkASSERT(allocator != nullptr);
 
@@ -324,7 +325,7 @@
             if (kPremul_SkAlphaType != at && kOpaque_SkAlphaType != at) {
                 break;
             }
-            blitter = allocator->createT<Sprite_D16_S32_BlitRowProc>(source);
+            blitter = allocator->make<Sprite_D16_S32_BlitRowProc>(source);
             break;
         }
         case kARGB_4444_SkColorType:
@@ -332,16 +333,16 @@
                 break;
             }
             if (255 == alpha) {
-                blitter = allocator->createT<Sprite_D16_S4444_Opaque>(source);
+                blitter = allocator->make<Sprite_D16_S4444_Opaque>(source);
             } else {
-                blitter = allocator->createT<Sprite_D16_S4444_Blend>(source, alpha >> 4);
+                blitter = allocator->make<Sprite_D16_S4444_Blend>(source, alpha >> 4);
             }
             break;
         case kRGB_565_SkColorType:
             if (255 == alpha) {
-                blitter = allocator->createT<Sprite_D16_S16_Opaque>(source);
+                blitter = allocator->make<Sprite_D16_S16_Opaque>(source);
             } else {
-                blitter = allocator->createT<Sprite_D16_S16_Blend>(source, alpha);
+                blitter = allocator->make<Sprite_D16_S16_Blend>(source, alpha);
             }
             break;
         case kIndex_8_SkColorType:
@@ -354,15 +355,15 @@
             }
             if (source.isOpaque()) {
                 if (255 == alpha) {
-                    blitter = allocator->createT<Sprite_D16_SIndex8_Opaque>(source);
+                    blitter = allocator->make<Sprite_D16_SIndex8_Opaque>(source);
                 } else {
-                    blitter = allocator->createT<Sprite_D16_SIndex8_Blend>(source, alpha);
+                    blitter = allocator->make<Sprite_D16_SIndex8_Blend>(source, alpha);
                 }
             } else {
                 if (255 == alpha) {
-                    blitter = allocator->createT<Sprite_D16_SIndex8A_Opaque>(source);
+                    blitter = allocator->make<Sprite_D16_SIndex8A_Opaque>(source);
                 } else {
-                    blitter = allocator->createT<Sprite_D16_SIndex8A_Blend>(source, alpha);
+                    blitter = allocator->make<Sprite_D16_SIndex8A_Blend>(source, alpha);
                 }
             }
             break;
