diff --git a/src/core/SkBlitter_ARGB32.cpp b/src/core/SkBlitter_ARGB32.cpp
index ce0b14b..c0f1053 100644
--- a/src/core/SkBlitter_ARGB32.cpp
+++ b/src/core/SkBlitter_ARGB32.cpp
@@ -182,7 +182,7 @@
             SkARGB32_Blit32(fDevice, mask, clip, fPMColor);
             break;
         default:
-            SkFAIL("Mask format not handled.");
+            SK_ABORT("Mask format not handled.");
     }
 }
 
@@ -202,7 +202,7 @@
             SkARGB32_Blit32(fDevice, mask, clip, fPMColor);
             break;
         default:
-            SkFAIL("Mask format not handled.");
+            SK_ABORT("Mask format not handled.");
     }
 }
 
diff --git a/src/core/SkBlurImageFilter.cpp b/src/core/SkBlurImageFilter.cpp
index a349b96..7048973 100644
--- a/src/core/SkBlurImageFilter.cpp
+++ b/src/core/SkBlurImageFilter.cpp
@@ -128,7 +128,7 @@
       case SkBlurImageFilter::TileMode::kRepeat_TileMode:
         return GrTextureDomain::kRepeat_Mode;
       default:
-        SkFAIL("Unsupported tile mode.");
+        SK_ABORT("Unsupported tile mode.");
         return GrTextureDomain::kDecal_Mode;
     }
 }
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index bf71fde..b69c441 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -169,7 +169,7 @@
                               SkPoint::Make(x, y), runPaint);
             break;
         default:
-            SkFAIL("unhandled positioning mode");
+            SK_ABORT("unhandled positioning mode");
         }
 
         if (drawFilter) {
diff --git a/src/core/SkFindAndPlaceGlyph.h b/src/core/SkFindAndPlaceGlyph.h
index 5d7c46b..a11c4ec 100644
--- a/src/core/SkFindAndPlaceGlyph.h
+++ b/src/core/SkFindAndPlaceGlyph.h
@@ -150,7 +150,7 @@
             case SkPaint::kGlyphID_TextEncoding:
                 return arena->make<GlyphIdGlyphFinder>(cache);
         }
-        SkFAIL("Should not get here.");
+        SK_ABORT("Should not get here.");
         return nullptr;
     }
 
@@ -262,7 +262,7 @@
                         SkFloatToScalar(glyph.fAdvanceY)};
         }
         // Even though the entire enum is covered above, MVSC doesn't think so. Make it happy.
-        SkFAIL("Should never get here.");
+        SK_ABORT("Should never get here.");
         return {0.0f, 0.0f};
     }
 
@@ -281,7 +281,7 @@
             case kNone_SkAxisAlignment:
                 return {kSubpixelRounding, kSubpixelRounding};
         }
-        SkFAIL("Should not get here.");
+        SK_ABORT("Should not get here.");
         return {0.0f, 0.0f};
     }
 
@@ -300,7 +300,7 @@
                 return {SkScalarToFixed(SkScalarFraction(position.fX) + kSubpixelRounding),
                         SkScalarToFixed(SkScalarFraction(position.fY) + kSubpixelRounding)};
         }
-        SkFAIL("Should not get here.");
+        SK_ABORT("Should not get here.");
         return {0, 0};
     }
 
@@ -325,7 +325,7 @@
         // See GCC bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60277
         virtual SkPoint findAndPositionGlyph(
             const char** text, SkPoint position, ProcessOneGlyph&& processOneGlyph) {
-            SkFAIL("Should never get here.");
+            SK_ABORT("Should never get here.");
             return {0.0f, 0.0f};
         }
     };
@@ -435,7 +435,7 @@
                 return arena->make<GlyphFindAndPlaceSubpixel<
                     ProcessOneGlyph, kTextAlignment, kY_SkAxisAlignment>>(glyphFinder);
         }
-        SkFAIL("Should never get here.");
+        SK_ABORT("Should never get here.");
         return nullptr;
     }
 
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index 0978305..1cc92a4 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -2437,7 +2437,7 @@
                 fLastVec = vec;
                 break;
             case kInvalid_DirChange:
-                SkFAIL("Use of invalid direction change flag");
+                SK_ABORT("Use of invalid direction change flag");
                 break;
         }
     }
diff --git a/src/core/SkRasterClip.cpp b/src/core/SkRasterClip.cpp
index a08119a..b2b0bdc 100644
--- a/src/core/SkRasterClip.cpp
+++ b/src/core/SkRasterClip.cpp
@@ -56,7 +56,7 @@
                 return kContinue_MutateResult;
         }
     }
-    SkFAIL("should not get here");
+    SK_ABORT("should not get here");
     return kDoNothing_MutateResult;
 }
 
diff --git a/src/core/SkScan_AAAPath.cpp b/src/core/SkScan_AAAPath.cpp
index 1a74ce1..e5478ea 100644
--- a/src/core/SkScan_AAAPath.cpp
+++ b/src/core/SkScan_AAAPath.cpp
@@ -226,7 +226,7 @@
 }
 
 void MaskAdditiveBlitter::blitAntiH(int x, int y, const SkAlpha antialias[], int len) {
-    SkFAIL("Don't use this; directly add alphas to the mask.");
+    SK_ABORT("Don't use this; directly add alphas to the mask.");
 }
 
 void MaskAdditiveBlitter::blitAntiH(int x, int y, const SkAlpha alpha) {
diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp
index 355bafe..77ec429 100644
--- a/src/core/SkTextBlob.cpp
+++ b/src/core/SkTextBlob.cpp
@@ -489,7 +489,7 @@
         bounds.setBounds(glyphPosPts, run.glyphCount());
     } break;
     default:
-        SkFAIL("unsupported positioning mode");
+        SK_ABORT("unsupported positioning mode");
     }
 
     // Expand by typeface glyph bounds.
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index fa02104..1b8849a 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -1790,7 +1790,7 @@
                                    random->nextUScalar1(), random->nextUScalar1(), random->nextU());
         }
         default:
-            SkFAIL("Unexpected value.");
+            SK_ABORT("Unexpected value.");
             return nullptr;
     }
 }
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index 1585c9d..5f59637 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -234,7 +234,7 @@
             func = "max";
             break;
         default:
-            SkFAIL("Unexpected type");
+            SK_ABORT("Unexpected type");
             func = ""; // suppress warning
             break;
     }
@@ -248,7 +248,7 @@
             dir = "y";
             break;
         default:
-            SkFAIL("Unknown filter direction.");
+            SK_ABORT("Unknown filter direction.");
             dir = ""; // suppress warning
     }
 
@@ -306,7 +306,7 @@
             pixelSize = 1.0f / texture.height();
             break;
         default:
-            SkFAIL("Unknown filter direction.");
+            SK_ABORT("Unknown filter direction.");
     }
     pdman.set1f(fPixelSizeUni, pixelSize);
 
diff --git a/src/fonts/SkFontMgr_indirect.cpp b/src/fonts/SkFontMgr_indirect.cpp
index f3ba9d1..c04c2b8 100644
--- a/src/fonts/SkFontMgr_indirect.cpp
+++ b/src/fonts/SkFontMgr_indirect.cpp
@@ -64,11 +64,11 @@
 }
 
 void SkFontMgr_Indirect::onGetFamilyName(int index, SkString* familyName) const {
-    SkFAIL("Not implemented");
+    SK_ABORT("Not implemented");
 }
 
 SkFontStyleSet* SkFontMgr_Indirect::onCreateStyleSet(int index) const {
-    SkFAIL("Not implemented");
+    SK_ABORT("Not implemented");
     return nullptr;
 }
 
diff --git a/src/gpu/GrBlend.cpp b/src/gpu/GrBlend.cpp
index 72a89d8..1bb4dd3 100644
--- a/src/gpu/GrBlend.cpp
+++ b/src/gpu/GrBlend.cpp
@@ -102,7 +102,7 @@
         case kISA_GrBlendCoeff:
             return MaskedColor::Mul(MaskedColor::ExtractInverseAlpha(src), value);
         default:
-            SkFAIL("Illegal coefficient");
+            SK_ABORT("Illegal coefficient");
             return MaskedColor();
     }
 }
diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp
index a418452..3d1987a 100644
--- a/src/gpu/GrCaps.cpp
+++ b/src/gpu/GrCaps.cpp
@@ -27,7 +27,7 @@
         case kAlpha_half_GrPixelConfig: return "AlphaHalf";
         case kRGBA_half_GrPixelConfig: return "RGBAHalf";
     }
-    SkFAIL("Invalid pixel config");
+    SK_ABORT("Invalid pixel config");
     return "<invalid>";
 }
 
diff --git a/src/gpu/GrFragmentProcessor.h b/src/gpu/GrFragmentProcessor.h
index 29a302b..8bf30d5 100644
--- a/src/gpu/GrFragmentProcessor.h
+++ b/src/gpu/GrFragmentProcessor.h
@@ -319,7 +319,7 @@
 
 private:
     virtual GrColor4f constantOutputForConstantInput(GrColor4f /* inputColor */) const {
-        SkFAIL("Subclass must override this if advertising this optimization.");
+        SK_ABORT("Subclass must override this if advertising this optimization.");
         return GrColor4f::TransparentBlack();
     }
 
diff --git a/src/gpu/GrPathRange.cpp b/src/gpu/GrPathRange.cpp
index 6cf9de2..8ed4fd6 100644
--- a/src/gpu/GrPathRange.cpp
+++ b/src/gpu/GrPathRange.cpp
@@ -33,7 +33,7 @@
         case kU32_PathIndexType:
             return this->loadPathsIfNeeded(reinterpret_cast<const uint32_t*>(indices), count);
         default:
-            SkFAIL("Unknown path index type");
+            SK_ABORT("Unknown path index type");
     }
 }
 
@@ -48,7 +48,7 @@
         case kU32_PathIndexType:
             return this->assertPathsLoaded(reinterpret_cast<const uint32_t*>(indices), count);
         default:
-            SkFAIL("Unknown path index type");
+            SK_ABORT("Unknown path index type");
     }
 }
 
diff --git a/src/gpu/GrPathRendering.cpp b/src/gpu/GrPathRendering.cpp
index a40f0af..0e947d5 100644
--- a/src/gpu/GrPathRendering.cpp
+++ b/src/gpu/GrPathRendering.cpp
@@ -16,7 +16,7 @@
 const GrUserStencilSettings& GrPathRendering::GetStencilPassSettings(FillType fill) {
     switch (fill) {
         default:
-            SkFAIL("Unexpected path fill.");
+            SK_ABORT("Unexpected path fill.");
         case GrPathRendering::kWinding_FillType: {
             constexpr static GrUserStencilSettings kWindingStencilPass(
                 GrUserStencilSettings::StaticInit<
diff --git a/src/gpu/GrPathRendering.h b/src/gpu/GrPathRendering.h
index ac203ed..bc122de 100644
--- a/src/gpu/GrPathRendering.h
+++ b/src/gpu/GrPathRendering.h
@@ -60,7 +60,7 @@
                 return 6;
 
             default:
-                SkFAIL("Unknown path transform type");
+                SK_ABORT("Unknown path transform type");
                 return 0;
         }
     }
diff --git a/src/gpu/GrProcessor.cpp b/src/gpu/GrProcessor.cpp
index 52aae68..a7dd63c 100644
--- a/src/gpu/GrProcessor.cpp
+++ b/src/gpu/GrProcessor.cpp
@@ -64,7 +64,7 @@
     if (kFPFactoryCount != GetFactories()->count()) {
         SkDebugf("\nExpected %d fragment processor factories, found %d.\n",
                  kFPFactoryCount, GetFactories()->count());
-        SkFAIL("Wrong number of fragment processor factories!");
+        SK_ABORT("Wrong number of fragment processor factories!");
     }
 }
 
@@ -73,7 +73,7 @@
     if (kGPFactoryCount != GetFactories()->count()) {
         SkDebugf("\nExpected %d geometry processor factories, found %d.\n",
                  kGPFactoryCount, GetFactories()->count());
-        SkFAIL("Wrong number of geometry processor factories!");
+        SK_ABORT("Wrong number of geometry processor factories!");
     }
 }
 
@@ -81,7 +81,7 @@
     if (kXPFactoryCount != GetFactories()->count()) {
         SkDebugf("\nExpected %d xp factory factories, found %d.\n",
                  kXPFactoryCount, GetFactories()->count());
-        SkFAIL("Wrong number of xp factory factories!");
+        SK_ABORT("Wrong number of xp factory factories!");
     }
 }
 
@@ -280,7 +280,7 @@
             fFormat = GrImageStorageFormat::kRGBA32f;
             break;
         default:
-            SkFAIL("Config is not (yet) supported as image storage.");
+            SK_ABORT("Config is not (yet) supported as image storage.");
             break;
     }
 }
diff --git a/src/gpu/GrProcessor.h b/src/gpu/GrProcessor.h
index e4bf591..721f7c2 100644
--- a/src/gpu/GrProcessor.h
+++ b/src/gpu/GrProcessor.h
@@ -133,7 +133,7 @@
         // 1 to the returned value.
         uint32_t id = static_cast<uint32_t>(sk_atomic_inc(&gCurrProcessorClassID)) + 1;
         if (!id) {
-            SkFAIL("This should never wrap as it should only be called once for each GrProcessor "
+            SK_ABORT("This should never wrap as it should only be called once for each GrProcessor "
                    "subclass.");
         }
         return id;
diff --git a/src/gpu/GrProcessorUnitTest.cpp b/src/gpu/GrProcessorUnitTest.cpp
index 473903d..7e8d713 100644
--- a/src/gpu/GrProcessorUnitTest.cpp
+++ b/src/gpu/GrProcessorUnitTest.cpp
@@ -19,7 +19,7 @@
     } while (fp->numChildProcessors() != 0);
     return fp;
 #else
-    SkFAIL("Should not be called if !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS");
+    SK_ABORT("Should not be called if !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS");
     return nullptr;
 #endif
 }
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp
index 03b120c..39515ad 100644
--- a/src/gpu/GrRenderTargetContext.cpp
+++ b/src/gpu/GrRenderTargetContext.cpp
@@ -78,7 +78,7 @@
             return GrAllowMixedSamples::kYes == allowMixedSamples ? GrAAType::kMixedSamples
                                                                   : GrAAType::kCoverage;
     }
-    SkFAIL("Unexpected fsaa type");
+    SK_ABORT("Unexpected fsaa type");
     return GrAAType::kNone;
 }
 
diff --git a/src/gpu/GrResourceCache.cpp b/src/gpu/GrResourceCache.cpp
index 5c4cd57..b781e42 100644
--- a/src/gpu/GrResourceCache.cpp
+++ b/src/gpu/GrResourceCache.cpp
@@ -27,7 +27,7 @@
 
     int32_t type = sk_atomic_inc(&gType);
     if (type > SK_MaxU16) {
-        SkFAIL("Too many Resource Types");
+        SK_ABORT("Too many Resource Types");
     }
 
     return static_cast<ResourceType>(type);
@@ -38,7 +38,7 @@
 
     int32_t domain = sk_atomic_inc(&gDomain);
     if (domain > SK_MaxU16) {
-        SkFAIL("Too many GrUniqueKey Domains");
+        SK_ABORT("Too many GrUniqueKey Domains");
     }
 
     return static_cast<Domain>(domain);
diff --git a/src/gpu/GrShaderCaps.cpp b/src/gpu/GrShaderCaps.cpp
index f73d218..06fe03a 100644
--- a/src/gpu/GrShaderCaps.cpp
+++ b/src/gpu/GrShaderCaps.cpp
@@ -34,7 +34,7 @@
     case kHigh_GrSLPrecision:
         return "high";
     default:
-        SkFAIL("Unexpected precision type.");
+        SK_ABORT("Unexpected precision type.");
         return "";
     }
 }
diff --git a/src/gpu/GrShaderVar.cpp b/src/gpu/GrShaderVar.cpp
index e938c36..e6d774c 100644
--- a/src/gpu/GrShaderVar.cpp
+++ b/src/gpu/GrShaderVar.cpp
@@ -17,7 +17,7 @@
         case GrShaderVar::kOut_TypeModifier: return "out";
         case GrShaderVar::kUniform_TypeModifier: return "uniform";
     }
-    SkFAIL("Unknown shader variable type modifier.");
+    SK_ABORT("Unknown shader variable type modifier.");
     return "";
 }
 
@@ -52,7 +52,7 @@
             this->addModifier("volatile");
             return;
     }
-    SkFAIL("Unknown memory model.");
+    SK_ABORT("Unknown memory model.");
 }
 
 void GrShaderVar::setRestrict(GrSLRestrict restrict) {
@@ -63,7 +63,7 @@
             this->addModifier("restrict");
             return;
     }
-    SkFAIL("Unknown restrict.");
+    SK_ABORT("Unknown restrict.");
 }
 
 void GrShaderVar::setIOType(GrIOType ioType) {
@@ -77,7 +77,7 @@
             this->addModifier("writeonly");
             return;
     }
-    SkFAIL("Unknown io type.");
+    SK_ABORT("Unknown io type.");
 }
 
 void GrShaderVar::appendDecl(const GrShaderCaps* shaderCaps, SkString* out) const {
diff --git a/src/gpu/GrShape.cpp b/src/gpu/GrShape.cpp
index 7e0a3a4..eb07ffc 100644
--- a/src/gpu/GrShape.cpp
+++ b/src/gpu/GrShape.cpp
@@ -59,7 +59,7 @@
         case Type::kPath:
             return this->path().getBounds();
     }
-    SkFAIL("Unknown shape type");
+    SK_ABORT("Unknown shape type");
     return kInverted;
 }
 
@@ -143,7 +143,7 @@
             return 2;
         }
     }
-    SkFAIL("Should never get here.");
+    SK_ABORT("Should never get here.");
     return 0;
 }
 
diff --git a/src/gpu/SkGr.h b/src/gpu/SkGr.h
index 126dc4c..d228894 100644
--- a/src/gpu/SkGr.h
+++ b/src/gpu/SkGr.h
@@ -172,7 +172,7 @@
         case SkVertices::kTriangleFan_VertexMode:
             return GrPrimitiveType::kTriangleFan;
     }
-    SkFAIL("Invalid mode");
+    SK_ABORT("Invalid mode");
     return GrPrimitiveType::kPoints;
 }
 
diff --git a/src/gpu/ccpr/GrCCPRCoverageOpsBuilder.cpp b/src/gpu/ccpr/GrCCPRCoverageOpsBuilder.cpp
index 4c61570..19b4049 100644
--- a/src/gpu/ccpr/GrCCPRCoverageOpsBuilder.cpp
+++ b/src/gpu/ccpr/GrCCPRCoverageOpsBuilder.cpp
@@ -88,7 +88,7 @@
         case SkPath::kClose_Verb:
         case SkPath::kDone_Verb:
         default:
-            SkFAIL("Path verb does not have an endpoint.");
+            SK_ABORT("Path verb does not have an endpoint.");
             return 0;
         case SkPath::kMove_Verb:
         case SkPath::kLine_Verb:
@@ -203,9 +203,9 @@
                 continue;
             case SkPath::kConic_Verb:
                 SkASSERT(currFanPts > 0);
-                SkFAIL("Conics are not supported.");
+                SK_ABORT("Conics are not supported.");
             default:
-                SkFAIL("Unexpected path verb.");
+                SK_ABORT("Unexpected path verb.");
         }
     }
 
@@ -254,9 +254,9 @@
                               m.transform(pts[ptsIdx + 2]));
                 break;
             case SkPath::kConic_Verb:
-                SkFAIL("Conics are not supported.");
+                SK_ABORT("Conics are not supported.");
             default:
-                SkFAIL("Unexpected path verb.");
+                SK_ABORT("Unexpected path verb.");
         }
 
         ptsIdx += num_pts(verb);
diff --git a/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp b/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp
index 05a3242..e4e59ff 100644
--- a/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp
+++ b/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp
@@ -39,7 +39,7 @@
         case Mode::kLoopBorders:
             return "GrCCPRCubicBorderProcessor (loop)";
     }
-    SkFAIL("Unexpected ccpr coverage processor mode.");
+    SK_ABORT("Unexpected ccpr coverage processor mode.");
     return nullptr;
 }
 
@@ -85,7 +85,7 @@
         case Mode::kLoopBorders:
             return new GrCCPRCubicBorderProcessor(GrCCPRCubicProcessor::Type::kLoop);
     }
-    SkFAIL("Unexpected ccpr coverage processor mode.");
+    SK_ABORT("Unexpected ccpr coverage processor mode.");
     return nullptr;
 }
 
diff --git a/src/gpu/ccpr/GrCCPRCoverageProcessor.h b/src/gpu/ccpr/GrCCPRCoverageProcessor.h
index c9198d3..198956a 100644
--- a/src/gpu/ccpr/GrCCPRCoverageProcessor.h
+++ b/src/gpu/ccpr/GrCCPRCoverageProcessor.h
@@ -182,7 +182,7 @@
     // TODO: subclasses might have good spots to stuff the winding information without burning a
     // whole new varying slot. Consider requiring them to generate the correct coverage sign.
     virtual void emitShaderCoverage(GrGLSLFragmentBuilder*, const char* outputCoverage) const {
-        SkFAIL("Shader coverage not implemented when using CoverageType::kShader.");
+        SK_ABORT("Shader coverage not implemented when using CoverageType::kShader.");
     }
 
     // Emits one wedge of the conservative raster hull of a convex polygon. The complete hull has
diff --git a/src/gpu/effects/GrBezierEffect.cpp b/src/gpu/effects/GrBezierEffect.cpp
index 706353a..aa9a509 100644
--- a/src/gpu/effects/GrBezierEffect.cpp
+++ b/src/gpu/effects/GrBezierEffect.cpp
@@ -196,7 +196,7 @@
             break;
         }
         default:
-            SkFAIL("Shouldn't get here");
+            SK_ABORT("Shouldn't get here");
     }
 
     // TODO should we really be doing this?
@@ -401,7 +401,7 @@
             break;
         }
         default:
-            SkFAIL("Shouldn't get here");
+            SK_ABORT("Shouldn't get here");
     }
 
     if (0xff != gp.coverageScale()) {
@@ -642,7 +642,7 @@
             break;
         }
         default:
-            SkFAIL("Shouldn't get here");
+            SK_ABORT("Shouldn't get here");
     }
 
 
diff --git a/src/gpu/effects/GrConfigConversionEffect.cpp b/src/gpu/effects/GrConfigConversionEffect.cpp
index e784ed7..2cf7919 100644
--- a/src/gpu/effects/GrConfigConversionEffect.cpp
+++ b/src/gpu/effects/GrConfigConversionEffect.cpp
@@ -44,7 +44,7 @@
                 break;
 
             default:
-                SkFAIL("Unknown conversion op.");
+                SK_ABORT("Unknown conversion op.");
                 break;
         }
         fragBuilder->codeAppendf("%s = color;", args.fOutputColor);
diff --git a/src/gpu/effects/GrConstColorProcessor.cpp b/src/gpu/effects/GrConstColorProcessor.cpp
index 0859224..a8b328e 100644
--- a/src/gpu/effects/GrConstColorProcessor.cpp
+++ b/src/gpu/effects/GrConstColorProcessor.cpp
@@ -75,7 +75,7 @@
         case kModulateRGBA_InputMode:
             return fColor.modulate(input);
     }
-    SkFAIL("Unexpected mode");
+    SK_ABORT("Unexpected mode");
     return GrColor4f::TransparentBlack();
 }
 
diff --git a/src/gpu/effects/GrCoverageSetOpXP.cpp b/src/gpu/effects/GrCoverageSetOpXP.cpp
index 344762d..267f43d 100644
--- a/src/gpu/effects/GrCoverageSetOpXP.cpp
+++ b/src/gpu/effects/GrCoverageSetOpXP.cpp
@@ -203,7 +203,7 @@
         }
     }
 #undef _CONSTEXPR_
-    SkFAIL("Unknown region op.");
+    SK_ABORT("Unknown region op.");
     return nullptr;
 }
 
diff --git a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp
index b54ca53..23b6178 100644
--- a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp
+++ b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp
@@ -102,7 +102,7 @@
                     break;
                 }
                 default: {
-                    SkFAIL("Unsupported operation.");
+                    SK_ABORT("Unsupported operation.");
                 }
             }
         }
@@ -134,7 +134,7 @@
             imageIncrement[1] = ySign / texture.height();
             break;
         default:
-            SkFAIL("Unknown filter direction.");
+            SK_ABORT("Unknown filter direction.");
     }
     pdman.set2fv(fImageIncrementUni, 1, imageIncrement);
     if (conv.useBounds()) {
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
index c571b83..658f190 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
@@ -459,7 +459,7 @@
             fragBuilder->codeAppendf("%s = (float4(1.0) - %s) * %s;", output, inColor, inCoverage);
             break;
         default:
-            SkFAIL("Unsupported output type.");
+            SK_ABORT("Unsupported output type.");
             break;
     }
 }
@@ -753,7 +753,7 @@
         case SkBlendMode::kScreen:
             return &gScreenPDXPF;
         default:
-            SkFAIL("Unexpected blend mode.");
+            SK_ABORT("Unexpected blend mode.");
             return nullptr;
     }
 }
diff --git a/src/gpu/effects/GrRRectEffect.cpp b/src/gpu/effects/GrRRectEffect.cpp
index f253dfe..6d47e58 100644
--- a/src/gpu/effects/GrRRectEffect.cpp
+++ b/src/gpu/effects/GrRRectEffect.cpp
@@ -367,7 +367,7 @@
                 rect.fBottom -= radius;
                 break;
             default:
-                SkFAIL("Should have been one of the above cases.");
+                SK_ABORT("Should have been one of the above cases.");
         }
         pdman.set4f(fInnerRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
         radius += 0.5f;
@@ -583,7 +583,7 @@
             break;
         }
         default:
-            SkFAIL("RRect should always be simple or nine-patch.");
+            SK_ABORT("RRect should always be simple or nine-patch.");
     }
     // implicit is the evaluation of (x/a)^2 + (y/b)^2 - 1.
     fragBuilder->codeAppend("float implicit = dot(Z, dxy) - 1.0;");
@@ -664,7 +664,7 @@
                 break;
             }
         default:
-            SkFAIL("RRect should always be simple or nine-patch.");
+            SK_ABORT("RRect should always be simple or nine-patch.");
         }
         pdman.set4f(fInnerRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
         fPrevRRect = rrect;
diff --git a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp
index f2c026f..3b9b44c 100644
--- a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp
+++ b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp
@@ -73,7 +73,7 @@
             case SkBlendMode::kClear:
             case SkBlendMode::kSrc:
             case SkBlendMode::kDst:
-                SkFAIL("Should never create clear, src, or dst compose two FP.");
+                SK_ABORT("Should never create clear, src, or dst compose two FP.");
                 flags = kNone_OptimizationFlags;
                 break;
 
@@ -303,7 +303,7 @@
         OptimizationFlags flags;
         switch (mode) {
             case SkBlendMode::kClear:
-                SkFAIL("Should never create clear compose one FP.");
+                SK_ABORT("Should never create clear compose one FP.");
                 flags = kNone_OptimizationFlags;
                 break;
 
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 6e7a949..3434852 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -1368,7 +1368,7 @@
     case kHigh_GrSLPrecision:
         return GR_GL_HIGH_FLOAT;
     default:
-        SkFAIL("Unexpected precision type.");
+        SK_ABORT("Unexpected precision type.");
         return -1;
     }
 }
@@ -1382,7 +1382,7 @@
     case kFragment_GrShaderType:
         return GR_GL_FRAGMENT_SHADER;
     }
-    SkFAIL("Unknown shader type.");
+    SK_ABORT("Unknown shader type.");
     return -1;
 }
 
diff --git a/src/gpu/gl/GrGLCreateNullInterface.cpp b/src/gpu/gl/GrGLCreateNullInterface.cpp
index 7611f59..e130247 100644
--- a/src/gpu/gl/GrGLCreateNullInterface.cpp
+++ b/src/gpu/gl/GrGLCreateNullInterface.cpp
@@ -527,7 +527,7 @@
                 break;
             }
             default:
-                SkFAIL("Unexpected pname to GetIntegerv");
+                SK_ABORT("Unexpected pname to GetIntegerv");
         }
     }
 
@@ -553,7 +553,7 @@
                 *params = 32;
                 break;
             default:
-                SkFAIL("Unexpected pname passed GetQueryiv.");
+                SK_ABORT("Unexpected pname passed GetQueryiv.");
         }
     }
 
@@ -595,7 +595,7 @@
             case GR_GL_RENDERER:
                 return (const GrGLubyte*)"The Null (Non-)Renderer";
             default:
-                SkFAIL("Unexpected name passed to GetString");
+                SK_ABORT("Unexpected name passed to GetString");
                 return nullptr;
         }
     }
@@ -612,7 +612,7 @@
                 }
             }
             default:
-                SkFAIL("Unexpected name passed to GetStringi");
+                SK_ABORT("Unexpected name passed to GetStringi");
                 return nullptr;
         }
     }
@@ -673,7 +673,7 @@
                 }
                 break; }
             default:
-                SkFAIL("Unexpected pname to GetBufferParamateriv");
+                SK_ABORT("Unexpected pname to GetBufferParamateriv");
                 break;
         }
     }
@@ -687,7 +687,7 @@
 private:
     inline int static GetBufferIndex(GrGLenum glTarget) {
         switch (glTarget) {
-            default:                           SkFAIL("Unexpected GL target to GetBufferIndex");
+            default:                           SK_ABORT("Unexpected GL target to GetBufferIndex");
             case GR_GL_ARRAY_BUFFER:           return 0;
             case GR_GL_ELEMENT_ARRAY_BUFFER:   return 1;
             case GR_GL_TEXTURE_BUFFER:         return 2;
@@ -794,7 +794,7 @@
                 break;
                 // we don't expect any other pnames
             default:
-                SkFAIL("Unexpected pname to GetProgramiv");
+                SK_ABORT("Unexpected pname to GetProgramiv");
                 break;
         }
     }
@@ -809,7 +809,7 @@
                 *params = 0;
                 break;
             default:
-                SkFAIL("Unexpected pname passed to GetQueryObject.");
+                SK_ABORT("Unexpected pname passed to GetQueryObject.");
                 break;
         }
     }
diff --git a/src/gpu/gl/GrGLGLSL.cpp b/src/gpu/gl/GrGLGLSL.cpp
index 7ceb639..ab92358 100644
--- a/src/gpu/gl/GrGLGLSL.cpp
+++ b/src/gpu/gl/GrGLGLSL.cpp
@@ -48,7 +48,7 @@
             }
             return true;
         default:
-            SkFAIL("Unknown GL Standard");
+            SK_ABORT("Unknown GL Standard");
             return false;
     }
 }
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 2ce2995..be5df4e 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -819,7 +819,7 @@
         case kUnknown_GrPixelConfig:
             return 0;
     }
-    SkFAIL("Invalid pixel config");
+    SK_ABORT("Invalid pixel config");
     return 0;
 }
 
@@ -1239,7 +1239,7 @@
                                                                 width, height));
             break;
         case GrGLCaps::kNone_MSFBOType:
-            SkFAIL("Shouldn't be here if we don't support multisampled renderbuffers.");
+            SK_ABORT("Shouldn't be here if we don't support multisampled renderbuffers.");
             break;
     }
     return (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(ctx.interface()));
@@ -2332,7 +2332,7 @@
                 GL_CALL(BindFramebuffer(GR_GL_READ_FRAMEBUFFER, renderTarget->textureFBOID()));
                 break;
             default:
-                SkFAIL("Unknown resolve type");
+                SK_ABORT("Unknown resolve type");
         }
         glvp = renderTarget->getViewport();
     } else {
@@ -2575,7 +2575,7 @@
         case GrPrimitiveType::kLinesAdjacency:
             return GR_GL_LINES_ADJACENCY;
     }
-    SkFAIL("invalid GrPrimitiveType");
+    SK_ABORT("invalid GrPrimitiveType");
     return GR_GL_TRIANGLES;
 }
 
@@ -2908,7 +2908,7 @@
         case 'a':
            return GR_GL_ALPHA;
         default:
-            SkFAIL("Unsupported component");
+            SK_ABORT("Unsupported component");
             return 0;
     }
 }
@@ -4399,7 +4399,7 @@
         case kTextureExternalSampler_GrSLType:
             return 3;
         default:
-            SkFAIL("Unexpected samper type");
+            SK_ABORT("Unexpected samper type");
             return 0;
     }
 }
diff --git a/src/gpu/gl/GrGLPath.cpp b/src/gpu/gl/GrGLPath.cpp
index f7e6bd1..a989c4f 100644
--- a/src/gpu/gl/GrGLPath.cpp
+++ b/src/gpu/gl/GrGLPath.cpp
@@ -196,7 +196,7 @@
 static GrPathRendering::FillType convert_skpath_filltype(SkPath::FillType fill) {
     switch (fill) {
         default:
-            SkFAIL("Incomplete Switch\n");
+            SK_ABORT("Incomplete Switch\n");
         case SkPath::kWinding_FillType:
         case SkPath::kInverseWinding_FillType:
             return GrPathRendering::kWinding_FillType;
diff --git a/src/gpu/gl/GrGLPathRendering.cpp b/src/gpu/gl/GrGLPathRendering.cpp
index 0b3baca..d907e86 100644
--- a/src/gpu/gl/GrGLPathRendering.cpp
+++ b/src/gpu/gl/GrGLPathRendering.cpp
@@ -68,7 +68,7 @@
 static GrGLenum gr_stencil_op_to_gl_path_rendering_fill_mode(GrStencilOp op) {
     switch (op) {
         default:
-            SkFAIL("Unexpected path fill.");
+            SK_ABORT("Unexpected path fill.");
             /* fallthrough */;
         case GrStencilOp::kIncWrap:
             return GR_GL_COUNT_UP;
diff --git a/src/gpu/gl/GrGLVertexArray.cpp b/src/gpu/gl/GrGLVertexArray.cpp
index 59f2be9..745e532 100644
--- a/src/gpu/gl/GrGLVertexArray.cpp
+++ b/src/gpu/gl/GrGLVertexArray.cpp
@@ -44,7 +44,7 @@
         case kUint_GrVertexAttribType:
             return {false, 1, GR_GL_UNSIGNED_INT};
     }
-    SkFAIL("Unknown vertex attrib type");
+    SK_ABORT("Unknown vertex attrib type");
     return {false, 0, 0};
 };
 
diff --git a/src/gpu/glsl/GrGLSL.cpp b/src/gpu/glsl/GrGLSL.cpp
index 76ffb82..b580f0b 100644
--- a/src/gpu/glsl/GrGLSL.cpp
+++ b/src/gpu/glsl/GrGLSL.cpp
@@ -41,7 +41,7 @@
                 out->append("precision lowp float;\n");
                 break;
             default:
-                SkFAIL("Unknown precision value.");
+                SK_ABORT("Unknown precision value.");
         }
     }
 }
diff --git a/src/gpu/glsl/GrGLSLBlend.cpp b/src/gpu/glsl/GrGLSLBlend.cpp
index 5afb984..34df0df 100644
--- a/src/gpu/glsl/GrGLSLBlend.cpp
+++ b/src/gpu/glsl/GrGLSLBlend.cpp
@@ -380,7 +380,7 @@
             break;
         }
         default:
-            SkFAIL("Unknown Custom Xfer mode.");
+            SK_ABORT("Unknown Custom Xfer mode.");
             break;
     }
 }
@@ -427,7 +427,7 @@
                 fsBuilder->codeAppendf(" * (1.0 - %s.a)", dstColorName);
                 break;
             default:
-                SkFAIL("Unsupported Blend Coeff");
+                SK_ABORT("Unsupported Blend Coeff");
         }
         return true;
     }
@@ -494,7 +494,7 @@
             dstCoeff = SkBlendModeCoeff::kZero;
             break;
         default:
-            SkFAIL("Unsupported Op");
+            SK_ABORT("Unsupported Op");
             // We should never get here but to make compiler happy
             srcCoeff = SkBlendModeCoeff::kZero;
             dstCoeff = SkBlendModeCoeff::kZero;
diff --git a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
index 7f16136..afbfa09 100644
--- a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
@@ -106,7 +106,7 @@
             }
             return true;
         default:
-            SkFAIL("Unexpected GLSLFeature requested.");
+            SK_ABORT("Unexpected GLSLFeature requested.");
             return false;
     }
 }
diff --git a/src/gpu/glsl/GrGLSLGeometryShaderBuilder.cpp b/src/gpu/glsl/GrGLSLGeometryShaderBuilder.cpp
index ea8e73f..d9f34c2 100644
--- a/src/gpu/glsl/GrGLSLGeometryShaderBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLGeometryShaderBuilder.cpp
@@ -18,7 +18,7 @@
         case InputType::kTriangles: return "triangles";
         case InputType::kTrianglesAdjacency: return "triangles_adjacency";
     }
-    SkFAIL("invalid input type");
+    SK_ABORT("invalid input type");
     return "unknown_input";
 }
 
@@ -29,7 +29,7 @@
         case OutputType::kLineStrip: return "line_strip";
         case OutputType::kTriangleStrip: return "triangle_strip";
     }
-    SkFAIL("invalid output type");
+    SK_ABORT("invalid output type");
     return "unknown_output";
 }
 
diff --git a/src/gpu/glsl/GrGLSLXferProcessor.h b/src/gpu/glsl/GrGLSLXferProcessor.h
index 791bb06..763fcfa 100644
--- a/src/gpu/glsl/GrGLSLXferProcessor.h
+++ b/src/gpu/glsl/GrGLSLXferProcessor.h
@@ -89,7 +89,7 @@
      * it can construct a GrXferProcessor that will not read the dst color.
      */
     virtual void emitOutputsForBlendState(const EmitArgs&) {
-        SkFAIL("emitOutputsForBlendState not implemented.");
+        SK_ABORT("emitOutputsForBlendState not implemented.");
     }
 
     /**
@@ -105,7 +105,7 @@
                                          const char* outColor,
                                          const char* outColorSecondary,
                                          const GrXferProcessor&) {
-        SkFAIL("emitBlendCodeForDstRead not implemented.");
+        SK_ABORT("emitBlendCodeForDstRead not implemented.");
     }
 
     virtual void onSetData(const GrGLSLProgramDataManager&, const GrXferProcessor&) = 0;
diff --git a/src/gpu/instanced/InstanceProcessor.cpp b/src/gpu/instanced/InstanceProcessor.cpp
index d3cc9fa..ab68326 100644
--- a/src/gpu/instanced/InstanceProcessor.cpp
+++ b/src/gpu/instanced/InstanceProcessor.cpp
@@ -1674,7 +1674,7 @@
                                                                        const VertexInputs& inputs) {
     switch (opInfo.aaType()) {
         default:
-            SkFAIL("Unexpected antialias mode.");
+            SK_ABORT("Unexpected antialias mode.");
         case GrAAType::kNone:
             return new BackendNonAA(opInfo, inputs);
         case GrAAType::kCoverage:
@@ -2035,7 +2035,7 @@
         case GrAAType::kMixedSamples:
             return {kRect_FirstIndex, 3 * kRect_TriCount};
     }
-    SkFAIL("Unexpected aa type!");
+    SK_ABORT("Unexpected aa type!");
     return {0, 0};
 }
 
@@ -2054,7 +2054,7 @@
         case GrAAType::kMixedSamples:
             return {kOctagonsFanned_FirstIndex, 3 * kOctagonsFanned_TriCount};
     }
-    SkFAIL("Unexpected aa type!");
+    SK_ABORT("Unexpected aa type!");
     return {0, 0};
 }
 
@@ -2068,7 +2068,7 @@
         case GrAAType::kMixedSamples:
             return {kCorneredRectFanned_FirstIndex, 3 * kCorneredRectFanned_TriCount};
     }
-    SkFAIL("Unexpected aa type!");
+    SK_ABORT("Unexpected aa type!");
     return {0, 0};
 }
 
diff --git a/src/gpu/mtl/GrMtlCaps.mm b/src/gpu/mtl/GrMtlCaps.mm
index 29e28cf..57832c4 100644
--- a/src/gpu/mtl/GrMtlCaps.mm
+++ b/src/gpu/mtl/GrMtlCaps.mm
@@ -96,7 +96,7 @@
     }
 #endif
     // No supported feature sets were found
-    SkFAIL("Requested an unsupported feature set");
+    SK_ABORT("Requested an unsupported feature set");
 }
 
 void GrMtlCaps::initGrCaps(const id<MTLDevice> device) {
diff --git a/src/gpu/mtl/GrMtlUtil.mm b/src/gpu/mtl/GrMtlUtil.mm
index d1bbf6e..2464366 100644
--- a/src/gpu/mtl/GrMtlUtil.mm
+++ b/src/gpu/mtl/GrMtlUtil.mm
@@ -64,7 +64,7 @@
             *format = MTLPixelFormatR16Float;
             return true;
     }
-    SkFAIL("Unexpected config");
+    SK_ABORT("Unexpected config");
     return false;
 }
 
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index cdb0c66..425dbae 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -207,7 +207,7 @@
         case DegenerateTestData::kNonDegenerate:
             break;
         default:
-            SkFAIL("Unexpected degenerate test stage.");
+            SK_ABORT("Unexpected degenerate test stage.");
     }
 }
 
diff --git a/src/gpu/ops/GrDrawPathOp.cpp b/src/gpu/ops/GrDrawPathOp.cpp
index ad75abb..7b7d394 100644
--- a/src/gpu/ops/GrDrawPathOp.cpp
+++ b/src/gpu/ops/GrDrawPathOp.cpp
@@ -232,7 +232,7 @@
     }
     switch (type) {
         case GrPathRendering::kNone_PathTransformType:
-            SkFAIL("Cannot pre-translate kNone_PathTransformType.");
+            SK_ABORT("Cannot pre-translate kNone_PathTransformType.");
             break;
         case GrPathRendering::kTranslateX_PathTransformType:
             SkASSERT(0 == y);
@@ -263,7 +263,7 @@
             }
             break;
         default:
-            SkFAIL("Unknown transform type.");
+            SK_ABORT("Unknown transform type.");
             break;
     }
 }
diff --git a/src/gpu/ops/GrDrawVerticesOp.cpp b/src/gpu/ops/GrDrawVerticesOp.cpp
index f00a8c2..17a4f74 100644
--- a/src/gpu/ops/GrDrawVerticesOp.cpp
+++ b/src/gpu/ops/GrDrawVerticesOp.cpp
@@ -321,7 +321,7 @@
         case GrPrimitiveType::kLinesAdjacency:
             return 4;
     }
-    SkFAIL("Incomplete switch\n");
+    SK_ABORT("Incomplete switch\n");
     return 0;
 }
 
@@ -339,7 +339,7 @@
         case GrPrimitiveType::kLinesAdjacency:
             return 4;
     }
-    SkFAIL("Incomplete switch\n");
+    SK_ABORT("Incomplete switch\n");
     return 0;
 }
 
diff --git a/src/gpu/ops/GrOp.h b/src/gpu/ops/GrOp.h
index 254fc44..ec4b746 100644
--- a/src/gpu/ops/GrOp.h
+++ b/src/gpu/ops/GrOp.h
@@ -215,7 +215,7 @@
         // 1 to the returned value.
         uint32_t id = static_cast<uint32_t>(sk_atomic_inc(idCounter)) + 1;
         if (!id) {
-            SkFAIL("This should never wrap as it should only be called once for each GrOp "
+            SK_ABORT("This should never wrap as it should only be called once for each GrOp "
                    "subclass.");
         }
         return id;
diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp
index 247a4ea..5677bce 100644
--- a/src/gpu/ops/GrOvalOpFactory.cpp
+++ b/src/gpu/ops/GrOvalOpFactory.cpp
@@ -1679,7 +1679,7 @@
         case kOverstroke_RRectType:
             return kVertsPerOverstrokeRRect;
     }
-    SkFAIL("Invalid type");
+    SK_ABORT("Invalid type");
     return 0;
 }
 
@@ -1692,7 +1692,7 @@
         case kOverstroke_RRectType:
             return kIndicesPerOverstrokeRRect;
     }
-    SkFAIL("Invalid type");
+    SK_ABORT("Invalid type");
     return 0;
 }
 
@@ -1704,7 +1704,7 @@
         case kOverstroke_RRectType:
             return gOverstrokeRRectIndices;
     }
-    SkFAIL("Invalid type");
+    SK_ABORT("Invalid type");
     return 0;
 }
 
diff --git a/src/gpu/ops/GrShadowRRectOp.cpp b/src/gpu/ops/GrShadowRRectOp.cpp
index 7a4047a..b22dd06 100644
--- a/src/gpu/ops/GrShadowRRectOp.cpp
+++ b/src/gpu/ops/GrShadowRRectOp.cpp
@@ -150,7 +150,7 @@
         case kOverstroke_RRectType:
             return kVertsPerOverstrokeRRect;
     }
-    SkFAIL("Invalid type");
+    SK_ABORT("Invalid type");
     return 0;
 }
 
@@ -163,7 +163,7 @@
         case kOverstroke_RRectType:
             return kIndicesPerOverstrokeRRect;
     }
-    SkFAIL("Invalid type");
+    SK_ABORT("Invalid type");
     return 0;
 }
 
@@ -175,7 +175,7 @@
         case kOverstroke_RRectType:
             return gRRectIndices;
     }
-    SkFAIL("Invalid type");
+    SK_ABORT("Invalid type");
     return nullptr;
 }
 
diff --git a/src/gpu/text/GrAtlasGlyphCache.cpp b/src/gpu/text/GrAtlasGlyphCache.cpp
index e0d3786..782c3c1 100644
--- a/src/gpu/text/GrAtlasGlyphCache.cpp
+++ b/src/gpu/text/GrAtlasGlyphCache.cpp
@@ -318,7 +318,7 @@
                 break;
             }
             default:
-                SkFAIL("Invalid GrMaskFormat");
+                SK_ABORT("Invalid GrMaskFormat");
         }
     } else if (srcRB == dstRB) {
         memcpy(dst, src, dstRB * height);
diff --git a/src/gpu/text/GrAtlasTextBlob.h b/src/gpu/text/GrAtlasTextBlob.h
index 5d03d58..e300c66 100644
--- a/src/gpu/text/GrAtlasTextBlob.h
+++ b/src/gpu/text/GrAtlasTextBlob.h
@@ -99,7 +99,7 @@
         blob->fPool->release(p);
     }
     void* operator new(size_t) {
-        SkFAIL("All blobs are created by placement new.");
+        SK_ABORT("All blobs are created by placement new.");
         return sk_malloc_throw(0);
     }
 
diff --git a/src/gpu/vk/GrVkCommandBuffer.cpp b/src/gpu/vk/GrVkCommandBuffer.cpp
index 3713bfe..1f124a6 100644
--- a/src/gpu/vk/GrVkCommandBuffer.cpp
+++ b/src/gpu/vk/GrVkCommandBuffer.cpp
@@ -499,7 +499,7 @@
                          WaitForFences(gpu->device(), 1, &fSubmitFence, true, UINT64_MAX));
         if (VK_TIMEOUT == err) {
             SkDebugf("Fence failed to signal: %d\n", err);
-            SkFAIL("failing");
+            SK_ABORT("failing");
         }
         SkASSERT(!err);
 
@@ -524,7 +524,7 @@
 
         default:
             SkDebugf("Error getting fence status: %d\n", err);
-            SkFAIL("failing");
+            SK_ABORT("failing");
             break;
     }
 
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index 866e1ac..cd3054c 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -320,10 +320,10 @@
             buff = GrVkTexelBuffer::Create(this, size, kDynamic_GrAccessPattern == accessPattern);
             break;
         case kDrawIndirect_GrBufferType:
-            SkFAIL("DrawIndirect Buffers not supported  in vulkan backend.");
+            SK_ABORT("DrawIndirect Buffers not supported  in vulkan backend.");
             return nullptr;
         default:
-            SkFAIL("Unknown buffer type.");
+            SK_ABORT("Unknown buffer type.");
             return nullptr;
     }
     if (data && buff) {
@@ -1377,7 +1377,7 @@
             VK_CALL(FreeCommandBuffers(fDevice, fCmdPool, 1, &cmdBuffer));
             VK_CALL(DestroyFence(fDevice, fence, nullptr));
             SkDebugf("Fence failed to signal: %d\n", err);
-            SkFAIL("failing");
+            SK_ABORT("failing");
         }
         SkASSERT(!err);
 
@@ -1829,7 +1829,7 @@
                 this->internalResolveRenderTarget(rt, false);
                 break;
             default:
-                SkFAIL("Unknown resolve type");
+                SK_ABORT("Unknown resolve type");
         }
         image = rt;
     } else {
diff --git a/src/gpu/vk/GrVkPipeline.cpp b/src/gpu/vk/GrVkPipeline.cpp
index e356133..1a61605 100644
--- a/src/gpu/vk/GrVkPipeline.cpp
+++ b/src/gpu/vk/GrVkPipeline.cpp
@@ -41,7 +41,7 @@
         case kUint_GrVertexAttribType:
             return VK_FORMAT_R32_UINT;
     }
-    SkFAIL("Unknown vertex attrib type");
+    SK_ABORT("Unknown vertex attrib type");
     return VK_FORMAT_UNDEFINED;
 }
 
@@ -111,7 +111,7 @@
         case GrPrimitiveType::kLinesAdjacency:
             return VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY;
     }
-    SkFAIL("invalid GrPrimitiveType");
+    SK_ABORT("invalid GrPrimitiveType");
     return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
 }
 
diff --git a/src/gpu/vk/GrVkPipelineStateDataManager.h b/src/gpu/vk/GrVkPipelineStateDataManager.h
index 25c7a6e..250612d 100644
--- a/src/gpu/vk/GrVkPipelineStateDataManager.h
+++ b/src/gpu/vk/GrVkPipelineStateDataManager.h
@@ -46,7 +46,7 @@
     // for nvpr only
     void setPathFragmentInputTransform(VaryingHandle u, int components,
                                        const SkMatrix& matrix) const override {
-        SkFAIL("Only supported in NVPR, which is not in vulkan");
+        SK_ABORT("Only supported in NVPR, which is not in vulkan");
     }
 
     // Returns true if either the geometry or fragment buffers needed to generate a new underlying
diff --git a/src/gpu/vk/GrVkRenderPass.cpp b/src/gpu/vk/GrVkRenderPass.cpp
index a6a6afb..7f8b20a 100644
--- a/src/gpu/vk/GrVkRenderPass.cpp
+++ b/src/gpu/vk/GrVkRenderPass.cpp
@@ -35,7 +35,7 @@
             attachment->stencilStoreOp = desc.fLoadStoreOps.fStoreOp;
             break;
         default:
-            SkFAIL("Unexpected attachment layout");
+            SK_ABORT("Unexpected attachment layout");
     }
 
     attachment->initialLayout = layout;
diff --git a/src/gpu/vk/GrVkTransferBuffer.h b/src/gpu/vk/GrVkTransferBuffer.h
index a9756cb..588ee94 100644
--- a/src/gpu/vk/GrVkTransferBuffer.h
+++ b/src/gpu/vk/GrVkTransferBuffer.h
@@ -41,7 +41,7 @@
     }
 
     bool onUpdateData(const void* src, size_t srcSizeInBytes) override {
-        SkFAIL("Not implemented for transfer buffers.");
+        SK_ABORT("Not implemented for transfer buffers.");
         return false;
     }
 
diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp
index f45d795..be746cd 100644
--- a/src/gpu/vk/GrVkUniformHandler.cpp
+++ b/src/gpu/vk/GrVkUniformHandler.cpp
@@ -55,7 +55,7 @@
         case kIImageStorage2D_GrSLType:
             break;
     }
-    SkFAIL("Unexpected type");
+    SK_ABORT("Unexpected type");
     return 0;
 }
 
@@ -104,7 +104,7 @@
         case kIImageStorage2D_GrSLType:
             break;
     }
-    SkFAIL("Unexpected type");
+    SK_ABORT("Unexpected type");
     return 0;
 }
 
diff --git a/src/gpu/vk/GrVkUniformHandler.h b/src/gpu/vk/GrVkUniformHandler.h
index 862fbfc..f6dcbbb 100644
--- a/src/gpu/vk/GrVkUniformHandler.h
+++ b/src/gpu/vk/GrVkUniformHandler.h
@@ -91,12 +91,12 @@
     ImageStorageHandle addImageStorage(uint32_t visibility, GrSLType,  GrImageStorageFormat,
                                        GrSLMemoryModel, GrSLRestrict, GrIOType,
                                        const char* name) override {
-        SkFAIL("Image storages not implemented for Vulkan.");
+        SK_ABORT("Image storages not implemented for Vulkan.");
         return 0;
     }
 
     const GrShaderVar& imageStorageVariable(ImageStorageHandle handle) const override {
-        SkFAIL("Image storages not implemented for Vulkan.");
+        SK_ABORT("Image storages not implemented for Vulkan.");
         static const GrShaderVar* gVar = nullptr;
         return *gVar;
     }
diff --git a/src/gpu/vk/GrVkUtil.cpp b/src/gpu/vk/GrVkUtil.cpp
index 2ca701f..0ce47cb 100644
--- a/src/gpu/vk/GrVkUtil.cpp
+++ b/src/gpu/vk/GrVkUtil.cpp
@@ -61,7 +61,7 @@
             *format = VK_FORMAT_R16_SFLOAT;
             return true;
     }
-    SkFAIL("Unexpected config");
+    SK_ABORT("Unexpected config");
     return false;
 }
 
diff --git a/src/gpu/vk/GrVkVaryingHandler.cpp b/src/gpu/vk/GrVkVaryingHandler.cpp
index 9a38159..8e43b76 100644
--- a/src/gpu/vk/GrVkVaryingHandler.cpp
+++ b/src/gpu/vk/GrVkVaryingHandler.cpp
@@ -58,7 +58,7 @@
         case kIImageStorage2D_GrSLType:
             return 0;
     }
-    SkFAIL("Unexpected type");
+    SK_ABORT("Unexpected type");
     return -1;
 }
 
diff --git a/src/ports/SkFontMgr_FontConfigInterface.cpp b/src/ports/SkFontMgr_FontConfigInterface.cpp
index 6264710..99092b6 100644
--- a/src/ports/SkFontMgr_FontConfigInterface.cpp
+++ b/src/ports/SkFontMgr_FontConfigInterface.cpp
@@ -176,11 +176,11 @@
     }
 
     void onGetFamilyName(int index, SkString* familyName) const override {
-        SkFAIL("Not implemented.");
+        SK_ABORT("Not implemented.");
     }
 
     SkFontStyleSet* onCreateStyleSet(int index) const override {
-        SkFAIL("Not implemented.");
+        SK_ABORT("Not implemented.");
         return nullptr;
     }
 
diff --git a/src/shaders/gradients/SkGradientShader.cpp b/src/shaders/gradients/SkGradientShader.cpp
index b92bf59..1b24ef9 100644
--- a/src/shaders/gradients/SkGradientShader.cpp
+++ b/src/shaders/gradients/SkGradientShader.cpp
@@ -894,7 +894,7 @@
                         SkColorSpace::MakeSRGBLinear());
                     break;
                 default:
-                    SkFAIL("Unexpected bitmap type");
+                    SK_ABORT("Unexpected bitmap type");
                     return;
             }
             bitmap->allocPixels(info);
diff --git a/src/svg/SkSVGDevice.cpp b/src/svg/SkSVGDevice.cpp
index 904a9a6..4a1f2b7 100644
--- a/src/svg/SkSVGDevice.cpp
+++ b/src/svg/SkSVGDevice.cpp
@@ -159,7 +159,7 @@
             }
         } break;
         default:
-            SkFAIL("unknown text encoding");
+            SK_ABORT("unknown text encoding");
         }
 
         if (scalarsPerPos < 2) {
diff --git a/src/utils/SkShadowUtils.cpp b/src/utils/SkShadowUtils.cpp
index e95668a..0e34c91 100644
--- a/src/utils/SkShadowUtils.cpp
+++ b/src/utils/SkShadowUtils.cpp
@@ -151,7 +151,7 @@
                 }
                 return false;
         }
-        SkFAIL("Uninitialized occluder type?");
+        SK_ABORT("Uninitialized occluder type?");
         return false;
     }
 
@@ -369,7 +369,7 @@
     bool isRRect(SkRRect* rrect) { return fShapeForKey.asRRect(rrect, nullptr, nullptr, nullptr); }
 #else
     int keyBytes() const { return -1; }
-    void writeKey(void* key) const { SkFAIL("Should never be called"); }
+    void writeKey(void* key) const { SK_ABORT("Should never be called"); }
     bool isRRect(SkRRect* rrect) { return false; }
 #endif
 
