diff --git a/include/core/SkScalar.h b/include/core/SkScalar.h
index d5cd718..71aad98 100644
--- a/include/core/SkScalar.h
+++ b/include/core/SkScalar.h
@@ -92,7 +92,7 @@
          *
          * Either way, it's not good.
          */
-        SkASSERT(!"looks like you passed an SkScalar into SkIntToScalar");
+        SkDEBUGFAIL("looks like you passed an SkScalar into SkIntToScalar");
         return (float)0;
     }
 #else  // not SK_DEBUG
diff --git a/include/core/SkTypes.h b/include/core/SkTypes.h
index 51d8d18..a584421 100644
--- a/include/core/SkTypes.h
+++ b/include/core/SkTypes.h
@@ -93,6 +93,7 @@
 
 #ifdef SK_DEBUG
     #define SkASSERT(cond)              SK_DEBUGBREAK(cond)
+    #define SkDEBUGFAIL(message)        SkASSERT(false && message)
     #define SkDEBUGCODE(code)           code
     #define SkDECLAREPARAM(type, var)   , type var
     #define SkPARAM(var)                , var
@@ -101,6 +102,7 @@
     #define SkAssertResult(cond)        SkASSERT(cond)
 #else
     #define SkASSERT(cond)
+    #define SkDEBUGFAIL(message)
     #define SkDEBUGCODE(code)
     #define SkDEBUGF(args)
     #define SkDECLAREPARAM(type, var)
diff --git a/src/core/SkAAClip.cpp b/src/core/SkAAClip.cpp
index 39eadbf..096fd6b 100644
--- a/src/core/SkAAClip.cpp
+++ b/src/core/SkAAClip.cpp
@@ -1335,7 +1335,7 @@
         case SkRegion::kXOR_Op:
             return xorAlphaProc;
         default:
-            SkASSERT(!"unexpected region op");
+            SkDEBUGFAIL("unexpected region op");
             return sectAlphaProc;
     }
 }
@@ -1608,7 +1608,7 @@
             break;
 
         default:
-            SkASSERT(!"unknown region op");
+            SkDEBUGFAIL("unknown region op");
             return !this->isEmpty();
     }
 
@@ -1996,7 +1996,7 @@
 static MergeAAProc find_merge_aa_proc(SkMask::Format format) {
     switch (format) {
         case SkMask::kBW_Format:
-            SkASSERT(!"unsupported");
+            SkDEBUGFAIL("unsupported");
             return NULL;
         case SkMask::kA8_Format:
         case SkMask::k3D_Format: {
@@ -2012,7 +2012,7 @@
             return (MergeAAProc)proc32;
         }
         default:
-            SkASSERT(!"unsupported");
+            SkDEBUGFAIL("unsupported");
             return NULL;
     }
 }
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
index 2376dd3..2b3e7c4 100644
--- a/src/core/SkBitmap.cpp
+++ b/src/core/SkBitmap.cpp
@@ -173,7 +173,7 @@
             bpp = 4;
             break;
         default:
-            SkASSERT(!"unknown config");
+            SkDEBUGFAIL("unknown config");
             bpp = 0;   // error
             break;
     }
@@ -211,7 +211,7 @@
             rowBytes.shiftLeft(2);
             break;
         default:
-            SkASSERT(!"unknown config");
+            SkDEBUGFAIL("unknown config");
             break;
     }
     return isPos32Bits(rowBytes) ? rowBytes.get32() : 0;
@@ -547,7 +547,7 @@
             return true;
 
         default:
-            SkASSERT(!"unknown bitmap config pased to isOpaque");
+            SkDEBUGFAIL("unknown bitmap config pased to isOpaque");
             return false;
     }
 }
@@ -598,11 +598,11 @@
                 base += x >> 3;
                 break;
             case kRLE_Index8_Config:
-                SkASSERT(!"Can't return addr for kRLE_Index8_Config");
+                SkDEBUGFAIL("Can't return addr for kRLE_Index8_Config");
                 base = NULL;
                 break;
             default:
-                SkASSERT(!"Can't return addr for config");
+                SkDEBUGFAIL("Can't return addr for config");
                 base = NULL;
                 break;
         }
@@ -1501,7 +1501,7 @@
         case SERIALIZE_PIXELTYPE_NONE:
             break;
         default:
-            SkASSERT(!"unrecognized pixeltype in serialized data");
+            SkDEBUGFAIL("unrecognized pixeltype in serialized data");
             sk_throw();
     }
 }
diff --git a/src/core/SkBitmapSampler.cpp b/src/core/SkBitmapSampler.cpp
index b7a2226..37cbc5a 100644
--- a/src/core/SkBitmapSampler.cpp
+++ b/src/core/SkBitmapSampler.cpp
@@ -19,7 +19,7 @@
     case SkShader::kMirror_TileMode:
         return do_mirror_mod;
     default:
-        SkASSERT(!"unknown mode");
+        SkDEBUGFAIL("unknown mode");
         return NULL;
     }
 }
@@ -338,7 +338,7 @@
                 else
                     return SkNEW_ARGS(ARGB32_Point_Mirror_Mod_Sampler, (bm));
             default:
-                SkASSERT(!"unknown mode");
+                SkDEBUGFAIL("unknown mode");
             }
         }
         else {  // tmx != tmy
@@ -365,7 +365,7 @@
                 else
                     return SkNEW_ARGS(RGB16_Point_Mirror_Mod_Sampler, (bm));
             default:
-                SkASSERT(!"unknown mode");
+                SkDEBUGFAIL("unknown mode");
             }
         }
         else {  // tmx != tmy
@@ -392,7 +392,7 @@
                 else
                     return SkNEW_ARGS(Index8_Point_Mirror_Mod_Sampler, (bm));
             default:
-                SkASSERT(!"unknown mode");
+                SkDEBUGFAIL("unknown mode");
             }
         }
         else {  // tmx != tmy
@@ -408,7 +408,7 @@
         break;
 
     default:
-        SkASSERT(!"unknown device");
+        SkDEBUGFAIL("unknown device");
     }
     return SkNEW_ARGS(SkNullBitmapSampler, (bm, doFilter, tmx, tmy));
 }
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index 8e93ef1..6d2d512 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -24,12 +24,12 @@
 }
 
 void SkBlitter::blitH(int x, int y, int width) {
-    SkASSERT(!"unimplemented");
+    SkDEBUGFAIL("unimplemented");
 }
 
 void SkBlitter::blitAntiH(int x, int y, const SkAlpha antialias[],
                           const int16_t runs[]) {
-    SkASSERT(!"unimplemented");
+    SkDEBUGFAIL("unimplemented");
 }
 
 void SkBlitter::blitV(int x, int y, int height, SkAlpha alpha) {
@@ -942,7 +942,7 @@
             break;
 
         default:
-            SkASSERT(!"unsupported device config");
+            SkDEBUGFAIL("unsupported device config");
             SK_PLACEMENT_NEW(blitter, SkNullBlitter, storage, storageSize);
             break;
     }
diff --git a/src/core/SkBlitter_Sprite.cpp b/src/core/SkBlitter_Sprite.cpp
index da7e7e4..c2a0062 100644
--- a/src/core/SkBlitter_Sprite.cpp
+++ b/src/core/SkBlitter_Sprite.cpp
@@ -28,20 +28,20 @@
 
 #ifdef SK_DEBUG
 void SkSpriteBlitter::blitH(int x, int y, int width) {
-    SkASSERT(!"how did we get here?");
+    SkDEBUGFAIL("how did we get here?");
 }
 
 void SkSpriteBlitter::blitAntiH(int x, int y, const SkAlpha antialias[],
                                 const int16_t runs[]) {
-    SkASSERT(!"how did we get here?");
+    SkDEBUGFAIL("how did we get here?");
 }
 
 void SkSpriteBlitter::blitV(int x, int y, int height, SkAlpha alpha) {
-    SkASSERT(!"how did we get here?");
+    SkDEBUGFAIL("how did we get here?");
 }
 
 void SkSpriteBlitter::blitMask(const SkMask&, const SkIRect& clip) {
-    SkASSERT(!"how did we get here?");
+    SkDEBUGFAIL("how did we get here?");
 }
 #endif
 
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index e91488b..996a7e5 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -21,7 +21,7 @@
 
 void SkColorFilter::filterSpan16(const uint16_t s[], int count, uint16_t d[]) {
     SkASSERT(this->getFlags() & SkColorFilter::kHasFilter16_Flag);
-    SkASSERT(!"missing implementation of SkColorFilter::filterSpan16");
+    SkDEBUGFAIL("missing implementation of SkColorFilter::filterSpan16");
 
     if (d != s) {
         memcpy(d, s, count * sizeof(uint16_t));
diff --git a/src/core/SkConfig8888.h b/src/core/SkConfig8888.h
index 5e25f6d..fe2f2cc 100644
--- a/src/core/SkConfig8888.h
+++ b/src/core/SkConfig8888.h
@@ -208,7 +208,7 @@
                                     dstPixels, dstRowBytes, srcBmp);
             break;
         default:
-            SkASSERT(false && "unexpected Config8888");
+            SkDEBUGFAIL("unexpected Config8888");
             break;
     }
 }
@@ -251,7 +251,7 @@
                                     dstBmp, srcPixels, srcRowBytes);
             break;
         default:
-            SkASSERT(false && "unexpected Config8888");
+            SkDEBUGFAIL("unexpected Config8888");
             break;
     }
 }
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 5ddca08..787ba10 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -231,7 +231,7 @@
             shiftPerPixel = 0;
             break;
         default:
-            SkASSERT(!"Can't use xferproc on this config");
+            SkDEBUGFAIL("Can't use xferproc on this config");
             return;
     }
 
@@ -793,7 +793,7 @@
             }
             break;
         default:
-            SkASSERT(!"bad rtype");
+            SkDEBUGFAIL("bad rtype");
     }
 }
 
@@ -1920,7 +1920,7 @@
                 dst->close();
                 break;
             default:
-                SkASSERT(!"unknown verb");
+                SkDEBUGFAIL("unknown verb");
                 break;
         }
     }
diff --git a/src/core/SkEdgeBuilder.cpp b/src/core/SkEdgeBuilder.cpp
index 5195824..01417e4 100644
--- a/src/core/SkEdgeBuilder.cpp
+++ b/src/core/SkEdgeBuilder.cpp
@@ -118,7 +118,7 @@
                     }
                     break;
                 default:
-                    SkASSERT(!"unexpected verb");
+                    SkDEBUGFAIL("unexpected verb");
                     break;
             }
         }
@@ -150,7 +150,7 @@
                     break;
                 }
                 default:
-                    SkASSERT(!"unexpected verb");
+                    SkDEBUGFAIL("unexpected verb");
                     break;
             }
         }
diff --git a/src/core/SkEdgeClipper.cpp b/src/core/SkEdgeClipper.cpp
index cc8a4b7..d8cb75b 100644
--- a/src/core/SkEdgeClipper.cpp
+++ b/src/core/SkEdgeClipper.cpp
@@ -476,7 +476,7 @@
         case SkPath::kDone_Verb:
             break;
         default:
-            SkASSERT(!"unexpected verb in quadclippper2 iter");
+            SkDEBUGFAIL("unexpected verb in quadclippper2 iter");
             break;
     }
     return verb;
diff --git a/src/core/SkFloat.cpp b/src/core/SkFloat.cpp
index b39e7b9..ffa5d9a 100644
--- a/src/core/SkFloat.cpp
+++ b/src/core/SkFloat.cpp
@@ -216,7 +216,7 @@
 {
     if (packed < 0)
     {
-        SkASSERT(!"can't sqrt a negative number");
+        SkDEBUGFAIL("can't sqrt a negative number");
         return 0;
     }
 
diff --git a/src/core/SkMemory_stdlib.cpp b/src/core/SkMemory_stdlib.cpp
index 0f195e7..df87359 100644
--- a/src/core/SkMemory_stdlib.cpp
+++ b/src/core/SkMemory_stdlib.cpp
@@ -159,13 +159,13 @@
 
 void sk_throw()
 {
-    SkASSERT(!"sk_throw");
+    SkDEBUGFAIL("sk_throw");
     abort();
 }
 
 void sk_out_of_memory(void)
 {
-    SkASSERT(!"sk_out_of_memory");
+    SkDEBUGFAIL("sk_out_of_memory");
     abort();
 }
 
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index c0880b2..b3cad43 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -428,7 +428,7 @@
         case kGlyphID_TextEncoding:
             return byteLength >> 1;
         default:
-            SkASSERT(!"unknown text encoding");
+            SkDEBUGFAIL("unknown text encoding");
         }
         return 0;
     }
@@ -464,7 +464,7 @@
             break;
         }
         default:
-            SkASSERT(!"unknown text encoding");
+            SkDEBUGFAIL("unknown text encoding");
     }
     return gptr - glyphs;
 }
@@ -513,7 +513,7 @@
             break;
         }
         default:
-            SkASSERT(!"unknown text encoding");
+            SkDEBUGFAIL("unknown text encoding");
             return false;
     }
     return true;
@@ -1797,7 +1797,7 @@
         case SkPaint::kStroke_Style:
             break;
         default:
-            SkASSERT(!"unknown paint style");
+            SkDEBUGFAIL("unknown paint style");
     }
 
     if (this->getPathEffect()) {
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index 1acc56b..7e6ac8c 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -658,7 +658,7 @@
             break;
         case 180: r.offset(rect.fLeft - r.fLeft,   rect.fTop - r.fTop); break;
         case 270: r.offset(rect.fRight - r.fRight, rect.fTop - r.fTop); break;
-        default: SkASSERT(!"unexpected startAngle in add_corner_arc");
+        default: SkDEBUGFAIL("unexpected startAngle in add_corner_arc");
     }
 
     SkScalar start = SkIntToScalar(startAngle);
@@ -963,7 +963,7 @@
                 this->close();
                 break;
             default:
-                SkASSERT(!"unknown verb");
+                SkDEBUGFAIL("unknown verb");
         }
     }
 }
@@ -1045,7 +1045,7 @@
                               pts[-3].fX, pts[-3].fY);
                 break;
             default:
-                SkASSERT(!"bad verb");
+                SkDEBUGFAIL("bad verb");
                 break;
         }
         pts -= gPtsInVerb[verbs[i]];
@@ -1121,7 +1121,7 @@
                     tmp.close();
                     break;
                 default:
-                    SkASSERT(!"unknown verb");
+                    SkDEBUGFAIL("unknown verb");
                     break;
             }
         }
@@ -1343,7 +1343,7 @@
                 break;
 
             default:
-                SkASSERT(false && "Should never see kDone_Verb");
+                SkDEBUGFAIL("Should never see kDone_Verb");
         }
     }
 }
@@ -1707,7 +1707,7 @@
                 count = 0;
                 break;
             default:
-                SkASSERT(!"bad verb");
+                SkDEBUGFAIL("bad verb");
                 return kConcave_Convexity;
         }
 
diff --git a/src/core/SkPathMeasure.cpp b/src/core/SkPathMeasure.cpp
index bc3a4b8b..3158925 100644
--- a/src/core/SkPathMeasure.cpp
+++ b/src/core/SkPathMeasure.cpp
@@ -270,7 +270,7 @@
             }
             break;
         default:
-            SkASSERT(!"unknown segType");
+            SkDEBUGFAIL("unknown segType");
     }
 }
 
@@ -341,7 +341,7 @@
             }
             break;
         default:
-            SkASSERT(!"unknown segType");
+            SkDEBUGFAIL("unknown segType");
             sk_throw();
     }
 }
diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp
index 7997b74..8813ee6 100644
--- a/src/core/SkPictureRecord.cpp
+++ b/src/core/SkPictureRecord.cpp
@@ -139,7 +139,7 @@
         case SkRegion::kDifference_Op:
             return false;
         default:
-            SkASSERT(!"unknown region op");
+            SkDEBUGFAIL("unknown region op");
             return false;
     }
 }
diff --git a/src/core/SkRegion.cpp b/src/core/SkRegion.cpp
index 334caa8..0a8ab65 100644
--- a/src/core/SkRegion.cpp
+++ b/src/core/SkRegion.cpp
@@ -966,7 +966,7 @@
             return this->setRegion(*rgna);
         break;
     default:
-        SkASSERT(!"unknown region op");
+        SkDEBUGFAIL("unknown region op");
         return !this->isEmpty();
     }
 
diff --git a/src/core/SkScalerContext.cpp b/src/core/SkScalerContext.cpp
index 8727bb7..4403da6 100644
--- a/src/core/SkScalerContext.cpp
+++ b/src/core/SkScalerContext.cpp
@@ -432,7 +432,7 @@
                 dstRB = 0;  // signals we need a copy
                 break;
             default:
-                SkASSERT(!"unexpected mask format");
+                SkDEBUGFAIL("unexpected mask format");
         }
     }
 
@@ -467,7 +467,7 @@
                 pack3xHToLCD32(bm, mask);
                 break;
             default:
-                SkASSERT(!"bad format for copyback");
+                SkDEBUGFAIL("bad format for copyback");
         }
     }
 }
diff --git a/src/core/SkScan_AntiPath.cpp b/src/core/SkScan_AntiPath.cpp
index 346b82a..4136636 100644
--- a/src/core/SkScan_AntiPath.cpp
+++ b/src/core/SkScan_AntiPath.cpp
@@ -49,11 +49,11 @@
     /// Must be explicitly defined on subclasses.
     virtual void blitAntiH(int x, int y, const SkAlpha antialias[],
                            const int16_t runs[]) SK_OVERRIDE {
-        SkASSERT(!"How did I get here?");
+        SkDEBUGFAIL("How did I get here?");
     }
     /// May not be called on BaseSuperBlitter because it blits out of order.
     virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE {
-        SkASSERT(!"How did I get here?");
+        SkDEBUGFAIL("How did I get here?");
     }
 
 protected:
diff --git a/src/core/SkScan_Path.cpp b/src/core/SkScan_Path.cpp
index fe04084..7a8aa75 100644
--- a/src/core/SkScan_Path.cpp
+++ b/src/core/SkScan_Path.cpp
@@ -343,19 +343,19 @@
 
     // we do not expect to get called with these entrypoints
     virtual void blitAntiH(int, int, const SkAlpha[], const int16_t runs[]) {
-        SkASSERT(!"blitAntiH unexpected");
+        SkDEBUGFAIL("blitAntiH unexpected");
     }
     virtual void blitV(int x, int y, int height, SkAlpha alpha) {
-        SkASSERT(!"blitV unexpected");
+        SkDEBUGFAIL("blitV unexpected");
     }
     virtual void blitRect(int x, int y, int width, int height) {
-        SkASSERT(!"blitRect unexpected");
+        SkDEBUGFAIL("blitRect unexpected");
     }
     virtual void blitMask(const SkMask&, const SkIRect& clip) {
-        SkASSERT(!"blitMask unexpected");
+        SkDEBUGFAIL("blitMask unexpected");
     }
     virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) {
-        SkASSERT(!"justAnOpaqueColor unexpected");
+        SkDEBUGFAIL("justAnOpaqueColor unexpected");
         return NULL;
     }
 
diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp
index 44ec62d..ce7ff9e 100644
--- a/src/core/SkShader.cpp
+++ b/src/core/SkShader.cpp
@@ -108,7 +108,7 @@
     SkASSERT(this->canCallShadeSpan16());
 
     // basically, if we get here, the subclass screwed up
-    SkASSERT(!"kHasSpan16 flag is set, but shadeSpan16() not implemented");
+    SkDEBUGFAIL("kHasSpan16 flag is set, but shadeSpan16() not implemented");
 }
 
 #define kTempColorQuadCount 6   // balance between speed (larger) and saving stack-space
@@ -346,15 +346,15 @@
                                const SkMatrix&) { return false; }
 
 void SkEmptyShader::shadeSpan(int x, int y, SkPMColor span[], int count) {
-    SkASSERT(!"should never get called, since setContext() returned false");
+    SkDEBUGFAIL("should never get called, since setContext() returned false");
 }
 
 void SkEmptyShader::shadeSpan16(int x, int y, uint16_t span[], int count) {
-    SkASSERT(!"should never get called, since setContext() returned false");
+    SkDEBUGFAIL("should never get called, since setContext() returned false");
 }
 
 void SkEmptyShader::shadeSpanAlpha(int x, int y, uint8_t alpha[], int count) {
-    SkASSERT(!"should never get called, since setContext() returned false");
+    SkDEBUGFAIL("should never get called, since setContext() returned false");
 }
 
 SkFlattenable::Factory SkEmptyShader::getFactory() { return NULL; }
diff --git a/src/core/SkUtils.cpp b/src/core/SkUtils.cpp
index 8b7ebf3..9161609 100644
--- a/src/core/SkUtils.cpp
+++ b/src/core/SkUtils.cpp
@@ -243,7 +243,7 @@
 
 size_t SkUTF8_FromUnichar(SkUnichar uni, char utf8[]) {
     if ((uint32_t)uni > 0x10FFFF) {
-        SkASSERT(!"bad unichar");
+        SkDEBUGFAIL("bad unichar");
         return 0;
     }
 
diff --git a/src/effects/Sk1DPathEffect.cpp b/src/effects/Sk1DPathEffect.cpp
index 1e641cd..9ccc453 100644
--- a/src/effects/Sk1DPathEffect.cpp
+++ b/src/effects/Sk1DPathEffect.cpp
@@ -130,7 +130,7 @@
                 dst->close();
                 break;
             default:
-                SkASSERT(!"unknown verb");
+                SkDEBUGFAIL("unknown verb");
                 break;
         }
     }
@@ -175,7 +175,7 @@
             morphpath(dst, fPath, meas, distance);
             break;
         default:
-            SkASSERT(!"unknown Style enum");
+            SkDEBUGFAIL("unknown Style enum");
             break;
     }
     return fAdvance;
diff --git a/src/effects/SkBlurMask.cpp b/src/effects/SkBlurMask.cpp
index 16fd6ca..79fbcf7 100644
--- a/src/effects/SkBlurMask.cpp
+++ b/src/effects/SkBlurMask.cpp
@@ -534,7 +534,7 @@
             }
             break;
         default:
-            SkASSERT(!"Unexpected blur style here");
+            SkDEBUGFAIL("Unexpected blur style here");
             break;
         }
         dst += dstRowBytes - sw;
diff --git a/src/effects/SkGradientShader.cpp b/src/effects/SkGradientShader.cpp
index 2d99d3d..1e1add2 100644
--- a/src/effects/SkGradientShader.cpp
+++ b/src/effects/SkGradientShader.cpp
@@ -2068,7 +2068,7 @@
     else if (192 == add)
         SkASSERT(x > 0 && y < 0);
     else
-        SkASSERT(!"bad value for add");
+        SkDEBUGFAIL("bad value for add");
 #endif
 
     /*  This ^ trick makes x, y positive, and the swap<> handles quadrants
diff --git a/src/effects/SkTransparentShader.cpp b/src/effects/SkTransparentShader.cpp
index 58d7e44..486fc89 100644
--- a/src/effects/SkTransparentShader.cpp
+++ b/src/effects/SkTransparentShader.cpp
@@ -94,7 +94,7 @@
             break;
         }
         case SkBitmap::kIndex8_Config:
-            SkASSERT(!"index8 not supported as a destination device");
+            SkDEBUGFAIL("index8 not supported as a destination device");
             break;
         case SkBitmap::kA8_Config: {
             const uint8_t* src = fDevice->getAddr8(x, y);
@@ -110,7 +110,7 @@
             break;
         }
         case SkBitmap::kA1_Config:
-            SkASSERT(!"kA1_Config umimplemented at this time");
+            SkDEBUGFAIL("kA1_Config umimplemented at this time");
             break;
         default:    // to avoid warnings
             break;
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index 0205dd6..cab9d46 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -26,7 +26,7 @@
 
     SkAutoLockPixels apl(bitmap);
     if (!bitmap.readyToDraw()) {
-        SkASSERT(!"bitmap not ready to draw!");
+        SkDEBUGFAIL("bitmap not ready to draw!");
         return;
     }
 
diff --git a/src/images/SkMovie_gif.cpp b/src/images/SkMovie_gif.cpp
index 8da11c7..91d3591 100644
--- a/src/images/SkMovie_gif.cpp
+++ b/src/images/SkMovie_gif.cpp
@@ -237,7 +237,7 @@
     }
 
     if (cmap == NULL || cmap->ColorCount != (1 << cmap->BitsPerPixel)) {
-        SkASSERT(!"bad colortable setup");
+        SkDEBUGFAIL("bad colortable setup");
         return;
     }
 
diff --git a/src/pipe/SkGPipeRead.cpp b/src/pipe/SkGPipeRead.cpp
index f819088..f30f105 100644
--- a/src/pipe/SkGPipeRead.cpp
+++ b/src/pipe/SkGPipeRead.cpp
@@ -49,7 +49,7 @@
             paint->setXfermode((SkXfermode*)obj);
             break;
         default:
-            SkASSERT(!"never gets here");
+            SkDEBUGFAIL("never gets here");
     }
 }
 
@@ -403,7 +403,7 @@
             }
 
             case kTypeface_PaintOp: state->setTypeface(p, data); break;
-            default: SkASSERT(!"bad paintop"); return;
+            default: SkDEBUGFAIL("bad paintop"); return;
         }
         SkASSERT(reader->offset() <= stop);
     } while (reader->offset() < stop);
diff --git a/src/pipe/SkGPipeWrite.cpp b/src/pipe/SkGPipeWrite.cpp
index 9398d70..00d5d5f 100644
--- a/src/pipe/SkGPipeWrite.cpp
+++ b/src/pipe/SkGPipeWrite.cpp
@@ -35,7 +35,7 @@
         case kShader_PaintFlat:         return paint.getShader();
         case kXfermode_PaintFlat:       return paint.getXfermode();
     }
-    SkASSERT(!"never gets here");
+    SkDEBUGFAIL("never gets here");
     return NULL;
 }
 
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index 6ac81f4..8eaf06c 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -295,7 +295,7 @@
         prev = rec;
         rec = next;
     }
-    SkASSERT("shouldn't get here, face not in list");
+    SkDEBUGFAIL("shouldn't get here, face not in list");
 }
 
 ///////////////////////////////////////////////////////////////////////////
@@ -1030,7 +1030,7 @@
         break;
 
       default:
-        SkASSERT(!"unknown glyph format");
+        SkDEBUGFAIL("unknown glyph format");
         goto ERROR;
     }
 
@@ -1247,12 +1247,12 @@
                 copyFT2LCD16(glyph, fFace->glyph->bitmap,
                              fRec.fFlags & SkScalerContext::kLCD_BGROrder_Flag);
             } else {
-                SkASSERT(!"unknown glyph bitmap transform needed");
+                SkDEBUGFAIL("unknown glyph bitmap transform needed");
             }
         } break;
 
     default:
-        SkASSERT(!"unknown glyph format");
+        SkDEBUGFAIL("unknown glyph format");
         goto ERROR;
     }
 
diff --git a/src/ports/SkFontHost_android.cpp b/src/ports/SkFontHost_android.cpp
index dce3b3c..37c922c 100644
--- a/src/ports/SkFontHost_android.cpp
+++ b/src/ports/SkFontHost_android.cpp
@@ -106,7 +106,7 @@
         }
     }
     // should never get here, since the faces list should not be empty
-    SkASSERT(!"faces list is empty");
+    SkDEBUGFAIL("faces list is empty");
     return NULL;
 }
 
@@ -179,7 +179,7 @@
         prev = curr;
         curr = next;
     }
-    SkASSERT(!"Yikes, couldn't find family in our list to remove/delete");
+    SkDEBUGFAIL("Yikes, couldn't find family in our list to remove/delete");
 }
 
 static SkTypeface* find_typeface(const char name[], SkTypeface::Style style) {
diff --git a/src/ports/SkFontHost_fontconfig.cpp b/src/ports/SkFontHost_fontconfig.cpp
index 1ae971d..acc5ae0 100644
--- a/src/ports/SkFontHost_fontconfig.cpp
+++ b/src/ports/SkFontHost_fontconfig.cpp
@@ -111,7 +111,7 @@
                 fcvalue.u.i = (int)(intptr_t)value;
                 break;
             default:
-                SkASSERT(!"FontMatch unhandled type");
+                SkDEBUGFAIL("FontMatch unhandled type");
         }
         FcPatternAdd(pattern, type, fcvalue, 0);
 
@@ -292,14 +292,14 @@
 // static
 SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream)
 {
-    SkASSERT(!"SkFontHost::CreateTypefaceFromStream unimplemented");
+    SkDEBUGFAIL("SkFontHost::CreateTypefaceFromStream unimplemented");
     return NULL;
 }
 
 // static
 SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[])
 {
-    SkASSERT(!"SkFontHost::CreateTypefaceFromFile unimplemented");
+    SkDEBUGFAIL("SkFontHost::CreateTypefaceFromFile unimplemented");
     return NULL;
 }
 
@@ -345,11 +345,11 @@
 }
 
 void SkFontHost::Serialize(const SkTypeface*, SkWStream*) {
-    SkASSERT(!"SkFontHost::Serialize unimplemented");
+    SkDEBUGFAIL("SkFontHost::Serialize unimplemented");
 }
 
 SkTypeface* SkFontHost::Deserialize(SkStream* stream) {
-    SkASSERT(!"SkFontHost::Deserialize unimplemented");
+    SkDEBUGFAIL("SkFontHost::Deserialize unimplemented");
     return NULL;
 }
 
diff --git a/src/ports/SkFontHost_freetype_mac.cpp b/src/ports/SkFontHost_freetype_mac.cpp
index f339e55..140098d 100644
--- a/src/ports/SkFontHost_freetype_mac.cpp
+++ b/src/ports/SkFontHost_freetype_mac.cpp
@@ -57,7 +57,7 @@
 }
 
 SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) {
-    SkASSERT(!"SkFontHost::CreateTypefaceFromStream unimplemented");
+    SkDEBUGFAIL("SkFontHost::CreateTypefaceFromStream unimplemented");
     return NULL;
 }
 
@@ -90,11 +90,11 @@
 }
 
 void SkFontHost::Serialize(const SkTypeface*, SkWStream*) {
-    SkASSERT(!"SkFontHost::Serialize unimplemented");
+    SkDEBUGFAIL("SkFontHost::Serialize unimplemented");
 }
 
 SkTypeface* SkFontHost::Deserialize(SkStream* stream) {
-    SkASSERT(!"SkFontHost::Deserialize unimplemented");
+    SkDEBUGFAIL("SkFontHost::Deserialize unimplemented");
     return NULL;
 }
 
@@ -105,7 +105,7 @@
 #include "SkTypeface_mac.h"
 
 SkTypeface* SkCreateTypefaceFromCTFont(CTFontRef fontRef) {
-    SkASSERT(!"Not supported");
+    SkDEBUGFAIL("Not supported");
     return NULL;
 }
 
diff --git a/src/ports/SkFontHost_linux.cpp b/src/ports/SkFontHost_linux.cpp
index f39270c..c87b036 100644
--- a/src/ports/SkFontHost_linux.cpp
+++ b/src/ports/SkFontHost_linux.cpp
@@ -99,7 +99,7 @@
         }
     }
     // should never get here, since the faces list should not be empty
-    SkASSERT(!"faces list is empty");
+    SkDEBUGFAIL("faces list is empty");
     return NULL;
 }
 
@@ -169,7 +169,7 @@
         prev = curr;
         curr = next;
     }
-    SkASSERT(!"Yikes, couldn't find family in our list to remove/delete");
+    SkDEBUGFAIL("Yikes, couldn't find family in our list to remove/delete");
 }
 
 static FamilyRec* find_familyrec(const char name[]) {
diff --git a/src/ports/SkFontHost_mac_atsui.cpp b/src/ports/SkFontHost_mac_atsui.cpp
index a94b042..b90757c 100644
--- a/src/ports/SkFontHost_mac_atsui.cpp
+++ b/src/ports/SkFontHost_mac_atsui.cpp
@@ -454,11 +454,11 @@
 #pragma mark -
 
 void SkFontHost::Serialize(const SkTypeface* face, SkWStream* stream) {
-    SkASSERT(!"SkFontHost::Serialize unimplemented");
+    SkDEBUGFAIL("SkFontHost::Serialize unimplemented");
 }
 
 SkTypeface* SkFontHost::Deserialize(SkStream* stream) {
-    SkASSERT(!"SkFontHost::Deserialize unimplemented");
+    SkDEBUGFAIL("SkFontHost::Deserialize unimplemented");
     return NULL;
 }
 
@@ -476,7 +476,7 @@
         SkAdvancedTypefaceMetrics::PerGlyphInfo perGlyphInfo,
         const uint32_t* glyphIDs,
         uint32_t glyphIDsCount) {
-    SkASSERT(!"SkFontHost::GetAdvancedTypefaceMetrics unimplemented");
+    SkDEBUGFAIL("SkFontHost::GetAdvancedTypefaceMetrics unimplemented");
     return NULL;
 }
 
diff --git a/src/ports/SkFontHost_mac_coretext.cpp b/src/ports/SkFontHost_mac_coretext.cpp
index ec9e68a..06e0c09 100644
--- a/src/ports/SkFontHost_mac_coretext.cpp
+++ b/src/ports/SkFontHost_mac_coretext.cpp
@@ -1220,7 +1220,7 @@
                 }
             } break;
             default:
-                SkASSERT(!"unexpected mask format");
+                SkDEBUGFAIL("unexpected mask format");
                 break;
         }
     }
@@ -1353,7 +1353,7 @@
             break;
 
         default:
-            SkASSERT("Unknown path element!");
+            SkDEBUGFAIL("Unknown path element!");
             break;
         }
 }
@@ -1363,13 +1363,13 @@
 
 SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream)
 {
-//    SkASSERT(!"SkFontHost::CreateTypefaceFromStream unimplemented");
+//    SkDEBUGFAIL("SkFontHost::CreateTypefaceFromStream unimplemented");
     return SkFontHost::CreateTypeface(NULL, NULL, NULL, NULL, SkTypeface::kNormal);
 }
 
 SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[])
 {
-//    SkASSERT(!"SkFontHost::CreateTypefaceFromFile unimplemented");
+//    SkDEBUGFAIL("SkFontHost::CreateTypefaceFromFile unimplemented");
     return SkFontHost::CreateTypeface(NULL, NULL, NULL, NULL, SkTypeface::kNormal);
 }
 
@@ -1625,7 +1625,7 @@
 
 size_t SkFontHost::GetFileName(SkFontID fontID, char path[], size_t length,
                                int32_t* index) {
-    SkASSERT(!"SkFontHost::GetFileName unimplemented");
+    SkDEBUGFAIL("SkFontHost::GetFileName unimplemented");
     return(0);
 }
 
diff --git a/src/ports/SkFontHost_none.cpp b/src/ports/SkFontHost_none.cpp
index d205bfd..99df213 100644
--- a/src/ports/SkFontHost_none.cpp
+++ b/src/ports/SkFontHost_none.cpp
@@ -13,17 +13,17 @@
                                      const char famillyName[],
                                      const void* data, size_t bytelength,
                                      SkTypeface::Style style) {
-    SkASSERT(!"SkFontHost::FindTypeface unimplemented");
+    SkDEBUGFAIL("SkFontHost::FindTypeface unimplemented");
     return NULL;
 }
 
 SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream*) {
-    SkASSERT(!"SkFontHost::CreateTypeface unimplemented");
+    SkDEBUGFAIL("SkFontHost::CreateTypeface unimplemented");
     return NULL;
 }
 
 SkTypeface* SkFontHost::CreateTypefaceFromFile(char const*) {
-    SkASSERT(!"SkFontHost::CreateTypefaceFromFile unimplemented");
+    SkDEBUGFAIL("SkFontHost::CreateTypefaceFromFile unimplemented");
     return NULL;
 }
 
@@ -31,7 +31,7 @@
 SkAdvancedTypefaceMetrics* SkFontHost::GetAdvancedTypefaceMetrics(
         uint32_t fontID,
         SkAdvancedTypefaceMetrics::PerGlyphInfo perGlyphInfo) {
-    SkASSERT(!"SkFontHost::GetAdvancedTypefaceMetrics unimplemented");
+    SkDEBUGFAIL("SkFontHost::GetAdvancedTypefaceMetrics unimplemented");
     return NULL;
 }
 
@@ -41,12 +41,12 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 bool SkFontHost::ValidFontID(uint32_t uniqueID) {
-    SkASSERT(!"SkFontHost::ResolveTypeface unimplemented");
+    SkDEBUGFAIL("SkFontHost::ResolveTypeface unimplemented");
     return false;
 }
 
 SkStream* SkFontHost::OpenStream(uint32_t uniqueID) {
-    SkASSERT(!"SkFontHost::OpenStream unimplemented");
+    SkDEBUGFAIL("SkFontHost::OpenStream unimplemented");
     return NULL;
 }
 
@@ -59,18 +59,18 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 void SkFontHost::Serialize(const SkTypeface* face, SkWStream* stream) {
-    SkASSERT(!"SkFontHost::Serialize unimplemented");
+    SkDEBUGFAIL("SkFontHost::Serialize unimplemented");
 }
 
 SkTypeface* SkFontHost::Deserialize(SkStream* stream) {
-    SkASSERT(!"SkFontHost::Deserialize unimplemented");
+    SkDEBUGFAIL("SkFontHost::Deserialize unimplemented");
     return NULL;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 
 SkScalerContext* SkFontHost::CreateScalerContext(const SkDescriptor* desc) {
-    SkASSERT(!"SkFontHost::CreateScalarContext unimplemented");
+    SkDEBUGFAIL("SkFontHost::CreateScalarContext unimplemented");
     return NULL;
 }
 
diff --git a/src/ports/SkFontHost_simple.cpp b/src/ports/SkFontHost_simple.cpp
index 4464293..0624d35 100644
--- a/src/ports/SkFontHost_simple.cpp
+++ b/src/ports/SkFontHost_simple.cpp
@@ -98,7 +98,7 @@
         }
     }
     // should never get here, since the faces list should not be empty
-    SkASSERT(!"faces list is empty");
+    SkDEBUGFAIL("faces list is empty");
     return NULL;
 }
 
@@ -167,7 +167,7 @@
         prev = curr;
         curr = next;
     }
-    SkASSERT(!"Yikes, couldn't find family in our list to remove/delete");
+    SkDEBUGFAIL("Yikes, couldn't find family in our list to remove/delete");
 }
 
 static SkTypeface* find_typeface(const char name[], SkTypeface::Style style) {
@@ -585,7 +585,7 @@
 SkAdvancedTypefaceMetrics* SkFontHost::GetAdvancedTypefaceMetrics(
         uint32_t fontID,
         SkAdvancedTypefaceMetrics::PerGlyphInfo perGlyphInfo) {
-    SkASSERT(!"SkFontHost::GetAdvancedTypefaceMetrics unimplemented");
+    SkDEBUGFAIL("SkFontHost::GetAdvancedTypefaceMetrics unimplemented");
     return NULL;
 }
 #endif
diff --git a/src/ports/SkFontHost_win.cpp b/src/ports/SkFontHost_win.cpp
index 762dbf4..8cd955c 100755
--- a/src/ports/SkFontHost_win.cpp
+++ b/src/ports/SkFontHost_win.cpp
@@ -1008,11 +1008,11 @@
 }
 
 void SkFontHost::Serialize(const SkTypeface* face, SkWStream* stream) {
-    SkASSERT(!"SkFontHost::Serialize unimplemented");
+    SkDEBUGFAIL("SkFontHost::Serialize unimplemented");
 }
 
 SkTypeface* SkFontHost::Deserialize(SkStream* stream) {
-    SkASSERT(!"SkFontHost::Deserialize unimplemented");
+    SkDEBUGFAIL("SkFontHost::Deserialize unimplemented");
     return NULL;
 }
 
@@ -1298,7 +1298,7 @@
             h = SkPaint::kNormal_Hinting;
             break;
         default:
-            SkASSERT(!"unknown hinting");
+            SkDEBUGFAIL("unknown hinting");
     }
 #else
     h = SkPaint::kNormal_Hinting;
diff --git a/src/ports/SkMemory_brew.cpp b/src/ports/SkMemory_brew.cpp
index 3b66ba2..96af702 100644
--- a/src/ports/SkMemory_brew.cpp
+++ b/src/ports/SkMemory_brew.cpp
@@ -14,12 +14,12 @@
 #include <AEEStdLib.h>
 
 void sk_throw() {
-    SkASSERT(!"sk_throw");
+    SkDEBUGFAIL("sk_throw");
     abort();
 }
 
 void sk_out_of_memory(void) {
-    SkASSERT(!"sk_out_of_memory");
+    SkDEBUGFAIL("sk_out_of_memory");
     abort();
 }
 
diff --git a/src/ports/SkMemory_malloc.cpp b/src/ports/SkMemory_malloc.cpp
index a023be0..44e43ad 100644
--- a/src/ports/SkMemory_malloc.cpp
+++ b/src/ports/SkMemory_malloc.cpp
@@ -10,12 +10,12 @@
 #include <stdlib.h>
 
 void sk_throw() {
-    SkASSERT(!"sk_throw");
+    SkDEBUGFAIL("sk_throw");
     abort();
 }
 
 void sk_out_of_memory(void) {
-    SkASSERT(!"sk_out_of_memory");
+    SkDEBUGFAIL("sk_out_of_memory");
     abort();
 }
 
diff --git a/src/ports/SkThread_pthread.cpp b/src/ports/SkThread_pthread.cpp
index 885a325..bab26e9 100644
--- a/src/ports/SkThread_pthread.cpp
+++ b/src/ports/SkThread_pthread.cpp
@@ -85,7 +85,7 @@
     if (sizeof(pthread_mutex_t) > sizeof(fStorage))
     {
         SkDEBUGF(("pthread mutex size = %d\n", sizeof(pthread_mutex_t)));
-        SkASSERT(!"mutex storage is too small");
+        SkDEBUGFAIL("mutex storage is too small");
     }
 
     int status;
diff --git a/src/views/SkEvent.cpp b/src/views/SkEvent.cpp
index 82f2379..0149215 100644
--- a/src/views/SkEvent.cpp
+++ b/src/views/SkEvent.cpp
@@ -238,7 +238,7 @@
                 }
                 break;
             default:
-                SkASSERT(!"unknown metadata type returned from iterator");
+                SkDEBUGFAIL("unknown metadata type returned from iterator");
                 break;
             }
         }
diff --git a/src/views/SkWidgetViews.cpp b/src/views/SkWidgetViews.cpp
index 42dad45..2803d93 100644
--- a/src/views/SkWidgetViews.cpp
+++ b/src/views/SkWidgetViews.cpp
@@ -405,7 +405,7 @@
 	case kText_WidgetEnum:
 		return new SkStaticTextView;
 	default:
-		SkASSERT(!"unknown enum passed to SkWidgetFactory");
+		SkDEBUGFAIL("unknown enum passed to SkWidgetFactory");
 		break;
 	}
 	return NULL;
diff --git a/src/xml/SkBML_XMLParser.cpp b/src/xml/SkBML_XMLParser.cpp
index dfdd77f..dbdfe4b 100644
--- a/src/xml/SkBML_XMLParser.cpp
+++ b/src/xml/SkBML_XMLParser.cpp
@@ -112,7 +112,7 @@
         valueIndex = rbyte(s);
         break;
     default:
-        SkASSERT(!"bad verb");
+        SkDEBUGFAIL("bad verb");
         return;
     }
     writer.addAttribute(rec.fNames[nameIndex], rec.fValues[valueIndex]);
@@ -156,7 +156,7 @@
             writer.endElement();
             return;
         default:
-            SkASSERT(!"bad verb");
+            SkDEBUGFAIL("bad verb");
         }
     }
 }
