diff --git a/bench/DeferredSurfaceCopyBench.cpp b/bench/DeferredSurfaceCopyBench.cpp
index 7130780..fcc19d4 100644
--- a/bench/DeferredSurfaceCopyBench.cpp
+++ b/bench/DeferredSurfaceCopyBench.cpp
@@ -37,7 +37,7 @@
         SkImageInfo info;
         info.fWidth = kSurfaceWidth;
         info.fHeight = kSurfaceHeight;
-        info.fColorType = kPMColor_SkColorType;
+        info.fColorType = kN32_SkColorType;
         info.fAlphaType = kPremul_SkAlphaType;
         const SkRect fullCanvasRect = SkRect::MakeWH(
             SkIntToScalar(kSurfaceWidth), SkIntToScalar(kSurfaceHeight));
diff --git a/bench/benchmain.cpp b/bench/benchmain.cpp
index ca760b7..cc55bb9 100644
--- a/bench/benchmain.cpp
+++ b/bench/benchmain.cpp
@@ -207,20 +207,20 @@
     GLContextType       contextType;
     bool                runByDefault;
 } gConfigs[] = {
-    { kPMColor_SkColorType, "NONRENDERING", 0, SkBenchmark::kNonRendering_Backend, kNative, true},
-    { kPMColor_SkColorType, "8888",         0, SkBenchmark::kRaster_Backend,       kNative, true},
+    { kN32_SkColorType,     "NONRENDERING", 0, SkBenchmark::kNonRendering_Backend, kNative, true},
+    { kN32_SkColorType,     "8888",         0, SkBenchmark::kRaster_Backend,       kNative, true},
     { kRGB_565_SkColorType, "565",          0, SkBenchmark::kRaster_Backend,       kNative, true},
 #if SK_SUPPORT_GPU
-    { kPMColor_SkColorType, "GPU",          0, SkBenchmark::kGPU_Backend,          kNative, true},
-    { kPMColor_SkColorType, "MSAA4",        4, SkBenchmark::kGPU_Backend,          kNative, false},
-    { kPMColor_SkColorType, "MSAA16",      16, SkBenchmark::kGPU_Backend,          kNative, false},
-    { kPMColor_SkColorType, "NVPRMSAA4",    4, SkBenchmark::kGPU_Backend,          kNVPR,   true},
-    { kPMColor_SkColorType, "NVPRMSAA16",  16, SkBenchmark::kGPU_Backend,          kNVPR,   false},
+    { kN32_SkColorType,     "GPU",          0, SkBenchmark::kGPU_Backend,          kNative, true},
+    { kN32_SkColorType,     "MSAA4",        4, SkBenchmark::kGPU_Backend,          kNative, false},
+    { kN32_SkColorType,     "MSAA16",      16, SkBenchmark::kGPU_Backend,          kNative, false},
+    { kN32_SkColorType,     "NVPRMSAA4",    4, SkBenchmark::kGPU_Backend,          kNVPR,   true},
+    { kN32_SkColorType,     "NVPRMSAA16",  16, SkBenchmark::kGPU_Backend,          kNVPR,   false},
 #if SK_ANGLE
-    { kPMColor_SkColorType, "ANGLE",        0, SkBenchmark::kGPU_Backend,          kANGLE,  true},
+    { kN32_SkColorType,     "ANGLE",        0, SkBenchmark::kGPU_Backend,          kANGLE,  true},
 #endif // SK_ANGLE
-    { kPMColor_SkColorType, "Debug",        0, SkBenchmark::kGPU_Backend,          kDebug,  kIsDebug},
-    { kPMColor_SkColorType, "NULLGPU",      0, SkBenchmark::kGPU_Backend,          kNull,   true},
+    { kN32_SkColorType,     "Debug",        0, SkBenchmark::kGPU_Backend,          kDebug,  kIsDebug},
+    { kN32_SkColorType,     "NULLGPU",      0, SkBenchmark::kGPU_Backend,          kNull,   true},
 #endif // SK_SUPPORT_GPU
 };
 
diff --git a/debugger/QT/SkImageWidget.cpp b/debugger/QT/SkImageWidget.cpp
index 9e26300..03c7e7e 100644
--- a/debugger/QT/SkImageWidget.cpp
+++ b/debugger/QT/SkImageWidget.cpp
@@ -19,7 +19,7 @@
     SkImageInfo info;
     info.fWidth = kImageWidgetWidth;
     info.fHeight = kImageWidgetHeight;
-    info.fColorType = kPMColor_SkColorType;
+    info.fColorType = kN32_SkColorType;
     info.fAlphaType = kPremul_SkAlphaType;
 
     fSurface = SkSurface::NewRasterDirect(info, fPixels, 4 * kImageWidgetWidth);
diff --git a/dm/DM.cpp b/dm/DM.cpp
index a8a2b6d..ef5c0f6 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -88,7 +88,7 @@
     for (int i = 0; i < gms.count(); i++) {
         for (int j = 0; j < configs.count(); j++) {
             START("565",      CpuGMTask, kRGB_565_SkColorType);
-            START("8888",     CpuGMTask, kPMColor_SkColorType);
+            START("8888",     CpuGMTask, kN32_SkColorType);
             START("gpu",      GpuGMTask, native, 0);
             START("msaa4",    GpuGMTask, native, 4);
             START("msaa16",   GpuGMTask, native, 16);
@@ -115,7 +115,7 @@
         for (int j = 0; j < configs.count(); j++) {
             START("nonrendering", NonRenderingBenchTask);
             START("565",          CpuBenchTask, kRGB_565_SkColorType);
-            START("8888",         CpuBenchTask, kPMColor_SkColorType);
+            START("8888",         CpuBenchTask, kN32_SkColorType);
             START("gpu",          GpuBenchTask, native, 0);
             START("msaa4",        GpuBenchTask, native, 4);
             START("msaa16",       GpuBenchTask, native, 16);
diff --git a/dm/DMBenchTask.cpp b/dm/DMBenchTask.cpp
index c53daf9..bcedb96 100644
--- a/dm/DMBenchTask.cpp
+++ b/dm/DMBenchTask.cpp
@@ -63,7 +63,7 @@
 }
 
 void NonRenderingBenchTask::draw() {
-    draw_raster(fBench.get(), kPMColor_SkColorType);
+    draw_raster(fBench.get(), kN32_SkColorType);
 }
 
 void CpuBenchTask::draw() {
@@ -73,7 +73,7 @@
 void GpuBenchTask::draw(GrContextFactory* grFactory) {
     SkImageInfo info = SkImageInfo::Make(fBench->getSize().x(),
                                          fBench->getSize().y(),
-                                         kPMColor_SkColorType,
+                                         kN32_SkColorType,
                                          kPremul_SkAlphaType);
     SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, info, fSampleCount));
 
diff --git a/dm/DMGpuGMTask.cpp b/dm/DMGpuGMTask.cpp
index c4867b6..c72f675 100644
--- a/dm/DMGpuGMTask.cpp
+++ b/dm/DMGpuGMTask.cpp
@@ -27,7 +27,7 @@
 void GpuGMTask::draw(GrContextFactory* grFactory) {
     SkImageInfo info = SkImageInfo::Make(SkScalarCeilToInt(fGM->width()),
                                          SkScalarCeilToInt(fGM->height()),
-                                         kPMColor_SkColorType,
+                                         kN32_SkColorType,
                                          kPremul_SkAlphaType);
     SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, info, fSampleCount));
     SkCanvas* canvas = surface->getCanvas();
diff --git a/experimental/iOSSampleApp/Shared/SkUIView.mm b/experimental/iOSSampleApp/Shared/SkUIView.mm
index 904cb9c..e2dce54 100644
--- a/experimental/iOSSampleApp/Shared/SkUIView.mm
+++ b/experimental/iOSSampleApp/Shared/SkUIView.mm
@@ -30,7 +30,7 @@
     if (NULL != fWind) {
         fWind->setVisibleP(true);
         fWind->resize(self.frame.size.width, self.frame.size.height,
-                      kPMColor_SkColorType);
+                      kN32_SkColorType);
     }
 }
 
diff --git a/experimental/iOSSampleApp/SkSampleUIView.mm b/experimental/iOSSampleApp/SkSampleUIView.mm
index 7b90cb7..a9defbe 100644
--- a/experimental/iOSSampleApp/SkSampleUIView.mm
+++ b/experimental/iOSSampleApp/SkSampleUIView.mm
@@ -337,7 +337,7 @@
         fWind = new SampleWindow(self, 1, &kDummyArgv, fDevManager);
 
         fWind->resize(self.frame.size.width, self.frame.size.height,
-                      kPMColor_SkColorType);
+                      kN32_SkColorType);
     }
     return self;
 }
diff --git a/gm/bitmapcopy.cpp b/gm/bitmapcopy.cpp
index 36b711e..b441e34 100644
--- a/gm/bitmapcopy.cpp
+++ b/gm/bitmapcopy.cpp
@@ -22,7 +22,7 @@
 static const SkColorType gColorTypes[] = {
     kRGB_565_SkColorType,
     kARGB_4444_SkColorType,
-    kPMColor_SkColorType,
+    kN32_SkColorType,
 };
 
 #define NUM_CONFIGS SK_ARRAY_COUNT(gColorTypes)
diff --git a/gm/bitmapfilters.cpp b/gm/bitmapfilters.cpp
index fb3b304..5fa2130 100644
--- a/gm/bitmapfilters.cpp
+++ b/gm/bitmapfilters.cpp
@@ -87,7 +87,7 @@
         make_bm(&fBM8);
         fBM8.copyTo(&fBM4444, kARGB_4444_SkColorType);
         fBM8.copyTo(&fBM16, kRGB_565_SkColorType);
-        fBM8.copyTo(&fBM32, kPMColor_SkColorType);
+        fBM8.copyTo(&fBM32, kN32_SkColorType);
     }
 public:
     SkBitmap    fBM8, fBM4444, fBM16, fBM32;
diff --git a/gm/bitmappremul.cpp b/gm/bitmappremul.cpp
index fd563eb..e315faf 100644
--- a/gm/bitmappremul.cpp
+++ b/gm/bitmappremul.cpp
@@ -30,7 +30,7 @@
 
 static SkBitmap make_argb8888_gradient() {
     SkBitmap bitmap;
-    init_bitmap(kPMColor_SkColorType, &bitmap);
+    init_bitmap(kN32_SkColorType, &bitmap);
     uint8_t rowColor = 0;
     for (int y = 0; y < SLIDE_SIZE; y++) {
         uint32_t* dst = bitmap.getAddr32(0, y);
@@ -64,7 +64,7 @@
 
 static SkBitmap make_argb8888_stripes() {
     SkBitmap bitmap;
-    init_bitmap(kPMColor_SkColorType, &bitmap);
+    init_bitmap(kN32_SkColorType, &bitmap);
     uint8_t rowColor = 0;
     for (int y = 0; y < SLIDE_SIZE; y++) {
         uint32_t* dst = bitmap.getAddr32(0, y);
diff --git a/gm/gammatext.cpp b/gm/gammatext.cpp
index 7ee55db..f520754 100644
--- a/gm/gammatext.cpp
+++ b/gm/gammatext.cpp
@@ -40,7 +40,7 @@
 
 static CGContextRef makeCG(const SkImageInfo& info, const void* addr,
                            size_t rowBytes) {
-    if (kPMColor_SkColorType != info.colorType() || NULL == addr) {
+    if (kN32_SkColorType != info.colorType() || NULL == addr) {
         return NULL;
     }
     CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index 52e7332..03556e7 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -268,7 +268,7 @@
     static void force_all_opaque(const SkBitmap& bitmap) {
         SkColorType colorType = bitmap.colorType();
         switch (colorType) {
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             force_all_opaque_8888(bitmap);
             break;
         case kRGB_565_SkColorType:
@@ -294,7 +294,7 @@
         // from this method, we should be able to get rid of the
         // transformation to 8888 format also.
         SkBitmap copy;
-        bitmap.copyTo(&copy, kPMColor_SkColorType);
+        bitmap.copyTo(&copy, kN32_SkColorType);
         if (!SkImageEncoder::EncodeFile(path.c_str(), copy,
                                         SkImageEncoder::kPNG_Type,
                                         100)) {
@@ -740,8 +740,8 @@
             return;
         }
 
-        if ((kPMColor_SkColorType != expectedBitmap.colorType()) ||
-            (kPMColor_SkColorType != actualBitmap.colorType())) {
+        if ((kN32_SkColorType != expectedBitmap.colorType()) ||
+            (kN32_SkColorType != actualBitmap.colorType())) {
             SkDebugf("---- %s: not computing max per-channel pixel mismatch because non-8888\n",
                      testName);
             return;
diff --git a/gm/tilemodes.cpp b/gm/tilemodes.cpp
index 5b97f13..abecada 100644
--- a/gm/tilemodes.cpp
+++ b/gm/tilemodes.cpp
@@ -50,7 +50,7 @@
 }
 
 static const SkColorType gColorTypes[] = {
-    kPMColor_SkColorType,
+    kN32_SkColorType,
     kRGB_565_SkColorType,
 };
 
@@ -166,7 +166,7 @@
 
 static SkShader* make_bm(SkShader::TileMode tx, SkShader::TileMode ty) {
     SkBitmap bm;
-    makebm(&bm, kPMColor_SkColorType, gWidth, gHeight);
+    makebm(&bm, kN32_SkColorType, gWidth, gHeight);
     return SkShader::CreateBitmapShader(bm, tx, ty);
 }
 
diff --git a/gm/tilemodes_scaled.cpp b/gm/tilemodes_scaled.cpp
index 932d3f7..bbb86a7 100644
--- a/gm/tilemodes_scaled.cpp
+++ b/gm/tilemodes_scaled.cpp
@@ -50,7 +50,7 @@
 }
 
 static const SkColorType gColorTypes[] = {
-    kPMColor_SkColorType,
+    kN32_SkColorType,
     kRGB_565_SkColorType,
 };
 
@@ -177,7 +177,7 @@
 
 static SkShader* make_bm(SkShader::TileMode tx, SkShader::TileMode ty) {
     SkBitmap bm;
-    makebm(&bm, kPMColor_SkColorType, gWidth, gHeight);
+    makebm(&bm, kN32_SkColorType, gWidth, gHeight);
     return SkShader::CreateBitmapShader(bm, tx, ty);
 }
 
diff --git a/gyp/common_conditions.gypi b/gyp/common_conditions.gypi
index 3743b60..92fb819 100644
--- a/gyp/common_conditions.gypi
+++ b/gyp/common_conditions.gypi
@@ -301,9 +301,8 @@
         # Temporary until https:#googleplex-android-review.git.corp.google.com/#/c/442220/
         # lands.
         'SK_SUPPORT_LEGACY_GETTOTALCLIP',
-        # Use a better name for kPMColor_SkColorType until
-        # https://code.google.com/p/skia/issues/detail?id=2384 is fixed.
-        'kNative_8888_SkColorType kPMColor_SkColorType',
+        # Still need to switch Android to the new name for N32.
+        'kNative_8888_SkColorType kN32_SkColorType',
       ],
     }],
 
diff --git a/gyp/skia_for_chromium_defines.gypi b/gyp/skia_for_chromium_defines.gypi
index 6eaa594..1bbd0c3 100644
--- a/gyp/skia_for_chromium_defines.gypi
+++ b/gyp/skia_for_chromium_defines.gypi
@@ -15,6 +15,7 @@
     'skia_for_chromium_defines': [
       'SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1',
       'SK_SUPPORT_LEGACY_GETTOPDEVICE',
+      'SK_SUPPORT_LEGACY_N32_NAME',
     ],
   },
 }
diff --git a/include/core/SkImageInfo.h b/include/core/SkImageInfo.h
index 1c73d95..8391954 100644
--- a/include/core/SkImageInfo.h
+++ b/include/core/SkImageInfo.h
@@ -80,12 +80,16 @@
     kLastEnum_SkColorType = kIndex_8_SkColorType,
 
 #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
-    kPMColor_SkColorType = kBGRA_8888_SkColorType
+    kN32_SkColorType = kBGRA_8888_SkColorType,
 #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
-    kPMColor_SkColorType = kRGBA_8888_SkColorType
+    kN32_SkColorType = kRGBA_8888_SkColorType,
 #else
 #error "SK_*32_SHFIT values must correspond to BGRA or RGBA byte order"
 #endif
+
+#ifdef SK_SUPPORT_LEGACY_N32_NAME
+    kPMColor_SkColorType = kN32_SkColorType
+#endif
 };
 
 static int SkColorTypeBytesPerPixel(SkColorType ct) {
@@ -136,7 +140,7 @@
      */
     static SkImageInfo MakeN32(int width, int height, SkAlphaType at) {
         SkImageInfo info = {
-            width, height, kPMColor_SkColorType, at
+            width, height, kN32_SkColorType, at
         };
         return info;
     }
@@ -146,7 +150,7 @@
      */
     static SkImageInfo MakeN32Premul(int width, int height) {
         SkImageInfo info = {
-            width, height, kPMColor_SkColorType, kPremul_SkAlphaType
+            width, height, kN32_SkColorType, kPremul_SkAlphaType
         };
         return info;
     }
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index c8fbf3d..050fc4a 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -958,7 +958,7 @@
     fSlideMenu = new SkOSMenu;
     this->addMenu(fSlideMenu);
 
-    this->setColorType(kPMColor_SkColorType);
+    this->setColorType(kN32_SkColorType);
     this->setVisibleP(true);
     this->setClipToBounds(false);
 
@@ -1449,7 +1449,7 @@
 
         SkBaseDevice* device = orig->getDevice();
         SkBitmap bmp;
-        if (device->accessBitmap(false).copyTo(&bmp, kPMColor_SkColorType)) {
+        if (device->accessBitmap(false).copyTo(&bmp, kN32_SkColorType)) {
             static int gSampleGrabCounter;
             SkString name;
             name.printf("sample_grab_%d.png", gSampleGrabCounter++);
@@ -1552,7 +1552,7 @@
     kUnknown_SkColorType,           // none -> none
     kUnknown_SkColorType,           // a8 -> none
     kARGB_4444_SkColorType,         // 565 -> 4444
-    kPMColor_SkColorType,           // 4444 -> 8888
+    kN32_SkColorType,               // 4444 -> 8888
     kRGB_565_SkColorType,           // 8888 -> 565
     kRGB_565_SkColorType,           // 8888 -> 565
     kUnknown_SkColorType,           // index8 -> none
diff --git a/samplecode/SampleDitherBitmap.cpp b/samplecode/SampleDitherBitmap.cpp
index a3ebafa..e05d074 100644
--- a/samplecode/SampleDitherBitmap.cpp
+++ b/samplecode/SampleDitherBitmap.cpp
@@ -84,7 +84,7 @@
     DitherBitmapView() {
         fResult = test_pathregion();
         fBM8 = make_bitmap();
-        fBM8.copyTo(&fBM32, kPMColor_SkColorType);
+        fBM8.copyTo(&fBM32, kN32_SkColorType);
 
         this->setBGColor(0xFFDDDDDD);
     }
diff --git a/samplecode/SampleEncode.cpp b/samplecode/SampleEncode.cpp
index 4769fbb..080c05f 100644
--- a/samplecode/SampleEncode.cpp
+++ b/samplecode/SampleEncode.cpp
@@ -43,7 +43,7 @@
                       SkIntToScalar(width)/2, paint);
 
     switch (ct) {
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             bm->swap(device);
             break;
         case kRGB_565_SkColorType: {
@@ -81,7 +81,7 @@
 
 // configs to build the original bitmap in. Can be at most these 3
 static const SkColorType gColorTypes[] = {
-    kPMColor_SkColorType,
+    kN32_SkColorType,
     kRGB_565_SkColorType,
     kIndex_8_SkColorType,   // opaque
     kIndex_8_SkColorType    // alpha
diff --git a/samplecode/SampleFilter.cpp b/samplecode/SampleFilter.cpp
index 7b2c551..e17a33c 100644
--- a/samplecode/SampleFilter.cpp
+++ b/samplecode/SampleFilter.cpp
@@ -91,7 +91,7 @@
         make_bm(&fBM8);
         fBM8.copyTo(&fBM4444, kARGB_4444_SkColorType);
         fBM8.copyTo(&fBM16, kRGB_565_SkColorType);
-        fBM8.copyTo(&fBM32, kPMColor_SkColorType);
+        fBM8.copyTo(&fBM32, kN32_SkColorType);
 
         this->setBGColor(0xFFDDDDDD);
     }
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp
index 28671d6..8d58b9b 100644
--- a/samplecode/SampleFilterFuzz.cpp
+++ b/samplecode/SampleFilterFuzz.cpp
@@ -116,7 +116,7 @@
         case kAlpha_8_SkColorType:
         case kRGB_565_SkColorType:
             return true;
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             return kPremul_SkAlphaType == info.alphaType() ||
                    kOpaque_SkAlphaType == info.alphaType();
         default:
diff --git a/samplecode/SampleTiling.cpp b/samplecode/SampleTiling.cpp
index 735b990..9ffcceb 100644
--- a/samplecode/SampleTiling.cpp
+++ b/samplecode/SampleTiling.cpp
@@ -55,7 +55,7 @@
 }
 
 static const SkColorType gColorTypes[] = {
-    kPMColor_SkColorType,
+    kN32_SkColorType,
     kRGB_565_SkColorType,
 };
 static const int gWidth = 32;
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
index 0736e17..7239517 100644
--- a/src/core/SkBitmap.cpp
+++ b/src/core/SkBitmap.cpp
@@ -346,7 +346,7 @@
             ct = kARGB_4444_SkColorType;
             break;
         case SkBitmap::kARGB_8888_Config:
-            ct = kPMColor_SkColorType;
+            ct = kN32_SkColorType;
             break;
         case SkBitmap::kNo_Config:
         default:
@@ -997,7 +997,7 @@
     switch (dstColorType) {
         case kAlpha_8_SkColorType:
         case kRGB_565_SkColorType:
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             break;
         case kIndex_8_SkColorType:
             if (!sameConfigs) {
@@ -1005,7 +1005,7 @@
             }
             break;
         case kARGB_4444_SkColorType:
-            return sameConfigs || kPMColor_SkColorType == this->colorType();
+            return sameConfigs || kN32_SkColorType == this->colorType();
         default:
             return false;
     }
@@ -1116,7 +1116,7 @@
             }
         }
     } else if (kARGB_4444_SkColorType == dstColorType
-               && kPMColor_SkColorType == src->colorType()) {
+               && kN32_SkColorType == src->colorType()) {
         SkASSERT(src->height() == tmpDst.height());
         SkASSERT(src->width() == tmpDst.width());
         for (int y = 0; y < src->height(); ++y) {
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp
index ba529a7..c2b633e 100644
--- a/src/core/SkBitmapDevice.cpp
+++ b/src/core/SkBitmapDevice.cpp
@@ -45,7 +45,7 @@
         case kRGB_565_SkColorType:
             canonicalAlphaType = kOpaque_SkAlphaType;
             break;
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             break;
         default:
             return false;
diff --git a/src/core/SkBitmapFilter.cpp b/src/core/SkBitmapFilter.cpp
index 1653cbb..a9c3223 100644
--- a/src/core/SkBitmapFilter.cpp
+++ b/src/core/SkBitmapFilter.cpp
@@ -124,7 +124,7 @@
     }
 
     // TODO: consider supporting other colortypes (e.g. 565, A8)
-    if (fBitmap->colorType() != kPMColor_SkColorType) {
+    if (fBitmap->colorType() != kN32_SkColorType) {
         return false;
     }
 
diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp
index 9c2c77b..a397b78 100644
--- a/src/core/SkBitmapProcShader.cpp
+++ b/src/core/SkBitmapProcShader.cpp
@@ -22,7 +22,7 @@
         case kAlpha_8_SkColorType:
         case kRGB_565_SkColorType:
         case kIndex_8_SkColorType:
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
     //        if (tx == ty && (kClamp_TileMode == tx || kRepeat_TileMode == tx))
                 return true;
         default:
@@ -130,7 +130,7 @@
             flags |= (kHasSpan16_Flag | kIntrinsicly16_Flag);
             break;
         case kIndex_8_SkColorType:
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             if (bitmapIsOpaque) {
                 flags |= kHasSpan16_Flag;
             }
@@ -279,7 +279,7 @@
     }
 
     switch (bm.colorType()) {
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             *color = SkUnPreMultiply::PMColorToColor(*bm.getAddr32(0, 0));
             return true;
         case kRGB_565_SkColorType:
diff --git a/src/core/SkBitmapScaler.cpp b/src/core/SkBitmapScaler.cpp
index 9e8c5fe..599e9d8 100644
--- a/src/core/SkBitmapScaler.cpp
+++ b/src/core/SkBitmapScaler.cpp
@@ -282,7 +282,7 @@
 
     SkAutoLockPixels locker(source);
     if (!source.readyToDraw() ||
-        source.colorType() != kPMColor_SkColorType) {
+        source.colorType() != kN32_SkColorType) {
         return false;
     }
 
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index 4d70395..52a05ed 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -923,7 +923,7 @@
             blitter = SkBlitter_ChooseD565(device, *paint, allocator);
             break;
 
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             if (shader) {
                 blitter = allocator->createT<SkARGB32_Shader_Blitter>(device, *paint);
             } else if (paint->getColor() == SK_ColorBLACK) {
diff --git a/src/core/SkBlitter_Sprite.cpp b/src/core/SkBlitter_Sprite.cpp
index e15e2fc..91a3cd1 100644
--- a/src/core/SkBlitter_Sprite.cpp
+++ b/src/core/SkBlitter_Sprite.cpp
@@ -67,7 +67,7 @@
         case kRGB_565_SkColorType:
             blitter = SkSpriteBlitter::ChooseD16(source, paint, allocator);
             break;
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             blitter = SkSpriteBlitter::ChooseD32(source, paint, allocator);
             break;
         default:
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index c16ac9a..27b7a4c 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -2613,7 +2613,7 @@
     switch (info.colorType()) {
         case kAlpha_8_SkColorType:
         case kRGB_565_SkColorType:
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             break;
         default:
             return false;
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 946bf75..7eb0be6 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -188,7 +188,7 @@
             */
             SkPMColor pmc = SkPreMultiplyColor(color);
             switch (bitmap.colorType()) {
-                case kPMColor_SkColorType:
+                case kN32_SkColorType:
                     if (data) {
                         *data = pmc;
                     }
@@ -221,7 +221,7 @@
                                BitmapXferProc proc, uint32_t procData) {
     int shiftPerPixel;
     switch (bitmap.colorType()) {
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             shiftPerPixel = 2;
             break;
         case kRGB_565_SkColorType:
@@ -515,7 +515,7 @@
                 const SkBitmap* bm = blitter->justAnOpaqueColor(&value);
                 if (bm && kRGB_565_SkColorType == bm->colorType()) {
                     proc = bw_pt_rect_16_hair_proc;
-                } else if (bm && kPMColor_SkColorType == bm->colorType()) {
+                } else if (bm && kN32_SkColorType == bm->colorType()) {
                     proc = bw_pt_rect_32_hair_proc;
                 } else {
                     proc = bw_pt_rect_hair_proc;
diff --git a/src/core/SkScaledImageCache.cpp b/src/core/SkScaledImageCache.cpp
index 1e37884..886b143 100644
--- a/src/core/SkScaledImageCache.cpp
+++ b/src/core/SkScaledImageCache.cpp
@@ -277,7 +277,7 @@
     }
 
     // can we relax this?
-    if (kPMColor_SkColorType != bitmap->colorType()) {
+    if (kN32_SkColorType != bitmap->colorType()) {
         return false;
     }
 
diff --git a/src/core/SkSpriteBlitter_ARGB32.cpp b/src/core/SkSpriteBlitter_ARGB32.cpp
index b05e503..a4ae41c 100644
--- a/src/core/SkSpriteBlitter_ARGB32.cpp
+++ b/src/core/SkSpriteBlitter_ARGB32.cpp
@@ -20,7 +20,7 @@
 class Sprite_D32_S32 : public SkSpriteBlitter {
 public:
     Sprite_D32_S32(const SkBitmap& src, U8CPU alpha)  : INHERITED(src) {
-        SkASSERT(src.colorType() == kPMColor_SkColorType);
+        SkASSERT(src.colorType() == kN32_SkColorType);
 
         unsigned flags32 = 0;
         if (255 != alpha) {
@@ -289,7 +289,7 @@
                 blitter = allocator->createT<Sprite_D32_S4444>(source);
             }
             break;
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             if (xfermode || filter) {
                 if (255 == alpha) {
                     // this can handle xfermode or filter, but not alpha
diff --git a/src/core/SkSpriteBlitter_RGB16.cpp b/src/core/SkSpriteBlitter_RGB16.cpp
index 74c1961..3f712bb 100644
--- a/src/core/SkSpriteBlitter_RGB16.cpp
+++ b/src/core/SkSpriteBlitter_RGB16.cpp
@@ -325,7 +325,7 @@
     unsigned alpha = paint.getAlpha();
 
     switch (source.colorType()) {
-        case kPMColor_SkColorType: {
+        case kN32_SkColorType: {
             blitter = allocator->createT<Sprite_D16_S32_BlitRowProc>(source);
             break;
         }
diff --git a/src/effects/SkAlphaThresholdFilter.cpp b/src/effects/SkAlphaThresholdFilter.cpp
index f938ba6..205e9a9 100644
--- a/src/effects/SkAlphaThresholdFilter.cpp
+++ b/src/effects/SkAlphaThresholdFilter.cpp
@@ -306,9 +306,9 @@
 bool SkAlphaThresholdFilterImpl::onFilterImage(Proxy*, const SkBitmap& src,
                                                const Context& ctx, SkBitmap* dst,
                                                SkIPoint* offset) const {
-    SkASSERT(src.colorType() == kPMColor_SkColorType);
+    SkASSERT(src.colorType() == kN32_SkColorType);
 
-    if (src.colorType() != kPMColor_SkColorType) {
+    if (src.colorType() != kN32_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkBicubicImageFilter.cpp b/src/effects/SkBicubicImageFilter.cpp
index eabf066..8f78ff2 100644
--- a/src/effects/SkBicubicImageFilter.cpp
+++ b/src/effects/SkBicubicImageFilter.cpp
@@ -91,7 +91,7 @@
         return false;
     }
 
-    if (src.colorType() != kPMColor_SkColorType) {
+    if (src.colorType() != kN32_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkBlurImageFilter.cpp b/src/effects/SkBlurImageFilter.cpp
index 363691a..63990ab 100644
--- a/src/effects/SkBlurImageFilter.cpp
+++ b/src/effects/SkBlurImageFilter.cpp
@@ -149,7 +149,7 @@
         return false;
     }
 
-    if (src.colorType() != kPMColor_SkColorType) {
+    if (src.colorType() != kN32_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 0200cab..3922244 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -205,8 +205,8 @@
         (displInput && !displInput->filterImage(proxy, src, ctx, &displ, &displOffset))) {
         return false;
     }
-    if ((displ.colorType() != kPMColor_SkColorType) ||
-        (color.colorType() != kPMColor_SkColorType)) {
+    if ((displ.colorType() != kN32_SkColorType) ||
+        (color.colorType() != kN32_SkColorType)) {
         return false;
     }
     SkIRect bounds;
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index 09ceef0..b485ae1 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -943,7 +943,7 @@
         return false;
     }
 
-    if (src.colorType() != kPMColor_SkColorType) {
+    if (src.colorType() != kN32_SkColorType) {
         return false;
     }
     SkIRect bounds;
@@ -1034,7 +1034,7 @@
         return false;
     }
 
-    if (src.colorType() != kPMColor_SkColorType) {
+    if (src.colorType() != kN32_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp
index 51ade99..5096640 100644
--- a/src/effects/SkMagnifierImageFilter.cpp
+++ b/src/effects/SkMagnifierImageFilter.cpp
@@ -282,11 +282,11 @@
 bool SkMagnifierImageFilter::onFilterImage(Proxy*, const SkBitmap& src,
                                            const Context&, SkBitmap* dst,
                                            SkIPoint* offset) const {
-    SkASSERT(src.colorType() == kPMColor_SkColorType);
+    SkASSERT(src.colorType() == kN32_SkColorType);
     SkASSERT(fSrcRect.width() < src.width());
     SkASSERT(fSrcRect.height() < src.height());
 
-    if ((src.colorType() != kPMColor_SkColorType) ||
+    if ((src.colorType() != kN32_SkColorType) ||
         (fSrcRect.width() >= src.width()) ||
         (fSrcRect.height() >= src.height())) {
       return false;
diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
index 7b9812d..878cbae 100644
--- a/src/effects/SkMatrixConvolutionImageFilter.cpp
+++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
@@ -260,7 +260,7 @@
         return false;
     }
 
-    if (src.colorType() != kPMColor_SkColorType) {
+    if (src.colorType() != kN32_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index fb69758..2350e6c 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -149,7 +149,7 @@
         return false;
     }
 
-    if (src.colorType() != kPMColor_SkColorType) {
+    if (src.colorType() != kN32_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkTransparentShader.cpp b/src/effects/SkTransparentShader.cpp
index b6a5e1e..bd8b99a 100644
--- a/src/effects/SkTransparentShader.cpp
+++ b/src/effects/SkTransparentShader.cpp
@@ -29,7 +29,7 @@
             if (fAlpha == 255)
                 flags |= kOpaqueAlpha_Flag;
             break;
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             if (fAlpha == 255 && fDevice->isOpaque())
                 flags |= kOpaqueAlpha_Flag;
             break;
@@ -43,7 +43,7 @@
     unsigned scale = SkAlpha255To256(fAlpha);
 
     switch (fDevice->colorType()) {
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             if (scale == 256) {
                 SkPMColor* src = fDevice->getAddr32(x, y);
                 if (src != span) {
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index b1fa560..2ebb9c7 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -517,7 +517,7 @@
         info.fWidth = kCache32Count;
         info.fHeight = 4;   // for our 4 dither rows
         info.fAlphaType = kPremul_SkAlphaType;
-        info.fColorType = kPMColor_SkColorType;
+        info.fColorType = kN32_SkColorType;
 
         if (NULL == fCache32PixelRef) {
             fCache32PixelRef = SkMallocPixelRef::NewAllocate(info, 0, NULL);
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 6f6d991..3045782 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -229,7 +229,7 @@
     if (kRGB_565_SkColorType == info.colorType()) {
         info.fAlphaType = kOpaque_SkAlphaType;  // force this setting
     } else {
-        info.fColorType = kPMColor_SkColorType;
+        info.fColorType = kN32_SkColorType;
         if (kOpaque_SkAlphaType != info.alphaType()) {
             info.fAlphaType = kPremul_SkAlphaType;  // force this setting
         }
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index db46b86..754a7be 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -43,7 +43,7 @@
     dstPI.fRowBytes = count * sizeof(SkPMColor);
 
     SkSrcPixelInfo srcPI;
-    srcPI.fColorType = kPMColor_SkColorType;
+    srcPI.fColorType = kN32_SkColorType;
     srcPI.fAlphaType = kPremul_SkAlphaType;
     srcPI.fPixels = ctable->lockColors();
     srcPI.fRowBytes = count * sizeof(SkPMColor);
@@ -166,7 +166,7 @@
                 return result;
             }
         } else {
-            origBitmap.copyTo(&tmpBitmap, kPMColor_SkColorType);
+            origBitmap.copyTo(&tmpBitmap, kN32_SkColorType);
             // now bitmap points to our temp, which has been promoted to 32bits
             bitmap = &tmpBitmap;
             desc.fConfig = SkBitmapConfig2GrPixelConfig(bitmap->config());
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index a567c41..4cbfd81 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -90,7 +90,7 @@
 
 static bool raster_canvas_supports(const SkImageInfo& info) {
     switch (info.fColorType) {
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             return kUnpremul_SkAlphaType != info.fAlphaType;
         case kRGB_565_SkColorType:
             return true;
diff --git a/src/image/SkImagePriv.cpp b/src/image/SkImagePriv.cpp
index a044aad..dada230 100644
--- a/src/image/SkImagePriv.cpp
+++ b/src/image/SkImagePriv.cpp
@@ -20,7 +20,7 @@
         case kRGB_565_SkColorType:
             return SkBitmap::kRGB_565_Config;
 
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             return SkBitmap::kARGB_8888_Config;
 
         case kIndex_8_SkColorType:
@@ -44,7 +44,7 @@
         kIndex_8_SkColorType,   // kIndex8_Config
         kRGB_565_SkColorType,   // kRGB_565_Config
         kARGB_4444_SkColorType, // kARGB_4444_Config
-        kPMColor_SkColorType,   // kARGB_8888_Config
+        kN32_SkColorType,   // kARGB_8888_Config
     };
     SkASSERT((unsigned)config < SK_ARRAY_COUNT(gCT));
     return gCT[config];
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index 475f50e..aa08f44 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -59,7 +59,7 @@
 }
 
 bool SkImage_Gpu::getROPixels(SkBitmap* dst) const {
-    return fBitmap.copyTo(dst, kPMColor_SkColorType);
+    return fBitmap.copyTo(dst, kN32_SkColorType);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/image/SkSurface_Picture.cpp b/src/image/SkSurface_Picture.cpp
index 8f65b3e..f7d97ac 100644
--- a/src/image/SkSurface_Picture.cpp
+++ b/src/image/SkSurface_Picture.cpp
@@ -62,7 +62,7 @@
     } else {
         SkImageInfo info;
         info.fWidth = info.fHeight = 0;
-        info.fColorType = kPMColor_SkColorType;
+        info.fColorType = kN32_SkColorType;
         info.fAlphaType = kOpaque_SkAlphaType;
         return SkImage::NewRasterCopy(info, NULL, 0);
     }
diff --git a/src/image/SkSurface_Raster.cpp b/src/image/SkSurface_Raster.cpp
index e24c0e8..7419737 100644
--- a/src/image/SkSurface_Raster.cpp
+++ b/src/image/SkSurface_Raster.cpp
@@ -47,7 +47,7 @@
         case kRGB_565_SkColorType:
             shift = 1;
             break;
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             shift = 2;
             break;
         default:
diff --git a/src/images/SkDecodingImageGenerator.cpp b/src/images/SkDecodingImageGenerator.cpp
index 5b842ab..b3924a7 100644
--- a/src/images/SkDecodingImageGenerator.cpp
+++ b/src/images/SkDecodingImageGenerator.cpp
@@ -242,7 +242,7 @@
         if (kIndex_8_SkColorType == bitmap.colorType()) {
             // We don't support kIndex8 because we don't support
             // colortables in this workflow.
-            info.fColorType = kPMColor_SkColorType;
+            info.fColorType = kN32_SkColorType;
         }
     } else {
         if (!bitmap.canCopyTo(opts.fRequestedColorType)) {
diff --git a/src/ports/SkImageDecoder_CG.cpp b/src/ports/SkImageDecoder_CG.cpp
index c61ce98..c683752 100644
--- a/src/ports/SkImageDecoder_CG.cpp
+++ b/src/ports/SkImageDecoder_CG.cpp
@@ -209,7 +209,7 @@
             // <Error>: CGImageDestinationFinalize image destination does not have enough images
             // So instead we copy to 8888.
             if (bm.colorType() == kARGB_4444_SkColorType) {
-                bm.copyTo(&bitmap8888, kPMColor_SkColorType);
+                bm.copyTo(&bitmap8888, kN32_SkColorType);
                 bmPtr = &bitmap8888;
             }
             type = kUTTypePNG;
diff --git a/src/ports/SkImageDecoder_WIC.cpp b/src/ports/SkImageDecoder_WIC.cpp
index 9d54794..74b2c39 100644
--- a/src/ports/SkImageDecoder_WIC.cpp
+++ b/src/ports/SkImageDecoder_WIC.cpp
@@ -306,10 +306,10 @@
     //Convert to 8888 if needed.
     const SkBitmap* bitmap;
     SkBitmap bitmapCopy;
-    if (kPMColor_SkColorType == bitmapOrig.colorType() && bitmapOrig.isOpaque()) {
+    if (kN32_SkColorType == bitmapOrig.colorType() && bitmapOrig.isOpaque()) {
         bitmap = &bitmapOrig;
     } else {
-        if (!bitmapOrig.copyTo(&bitmapCopy, kPMColor_SkColorType)) {
+        if (!bitmapOrig.copyTo(&bitmapCopy, kN32_SkColorType)) {
             return false;
         }
         bitmap = &bitmapCopy;
diff --git a/src/utils/SkBitmapHasher.cpp b/src/utils/SkBitmapHasher.cpp
index 6c861cd..bd038dd 100644
--- a/src/utils/SkBitmapHasher.cpp
+++ b/src/utils/SkBitmapHasher.cpp
@@ -57,7 +57,7 @@
     // Hmm, that didn't work. Maybe if we create a new
     // kARGB_8888_Config version of the bitmap it will work better?
     SkBitmap copyBitmap;
-    if (!bitmap.copyTo(&copyBitmap, kPMColor_SkColorType)) {
+    if (!bitmap.copyTo(&copyBitmap, kN32_SkColorType)) {
         return false;
     }
     return ComputeDigestInternal(copyBitmap, result);
diff --git a/src/utils/SkCanvasStateUtils.cpp b/src/utils/SkCanvasStateUtils.cpp
index c5b558a..64f62dd 100644
--- a/src/utils/SkCanvasStateUtils.cpp
+++ b/src/utils/SkCanvasStateUtils.cpp
@@ -223,7 +223,7 @@
         layerState->height = bitmap.height();
 
         switch (bitmap.colorType()) {
-            case kPMColor_SkColorType:
+            case kN32_SkColorType:
                 layerState->raster.config = kARGB_8888_RasterConfig;
                 break;
             case kRGB_565_SkColorType:
@@ -281,7 +281,7 @@
 
     SkBitmap bitmap;
     SkColorType colorType =
-        layerState.raster.config == kARGB_8888_RasterConfig ? kPMColor_SkColorType :
+        layerState.raster.config == kARGB_8888_RasterConfig ? kN32_SkColorType :
         layerState.raster.config == kRGB_565_RasterConfig ? kRGB_565_SkColorType :
         kUnknown_SkColorType;
 
diff --git a/src/utils/mac/SkCreateCGImageRef.cpp b/src/utils/mac/SkCreateCGImageRef.cpp
index 7687c3c..00166e9 100644
--- a/src/utils/mac/SkCreateCGImageRef.cpp
+++ b/src/utils/mac/SkCreateCGImageRef.cpp
@@ -34,7 +34,7 @@
                 *upscaleTo32 = true;
             }
             // fall through
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             *bitsPerComponent = 8;
 #if SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
             *info = kCGBitmapByteOrder32Big;
@@ -94,7 +94,7 @@
         copy = new SkBitmap;
         // here we make a ceep copy of the pixels, since CG won't take our
         // 565 directly
-        bm.copyTo(copy, kPMColor_SkColorType);
+        bm.copyTo(copy, kN32_SkColorType);
     } else {
         copy = new SkBitmap(bm);
     }
diff --git a/src/views/SkWindow.cpp b/src/views/SkWindow.cpp
index cca291a..8f6b96f 100644
--- a/src/views/SkWindow.cpp
+++ b/src/views/SkWindow.cpp
@@ -53,7 +53,7 @@
 #ifdef SK_BUILD_FOR_WINCE
     fColorType = kRGB_565_SkColorType;
 #else
-    fColorType = kPMColor_SkColorType;
+    fColorType = kN32_SkColorType;
 #endif
 
     fMatrix.reset();
diff --git a/src/views/mac/SkNSView.mm b/src/views/mac/SkNSView.mm
index 1014ffe..80bfd67 100644
--- a/src/views/mac/SkNSView.mm
+++ b/src/views/mac/SkNSView.mm
@@ -57,7 +57,7 @@
         size = [self convertSizeToBacking:self.frame.size];
 #endif
         fWind->resize((int) size.width, (int) size.height,
-                      kPMColor_SkColorType);
+                      kN32_SkColorType);
     }
 }
 
diff --git a/tests/BitmapCopyTest.cpp b/tests/BitmapCopyTest.cpp
index f734ad8..74f4ac9 100644
--- a/tests/BitmapCopyTest.cpp
+++ b/tests/BitmapCopyTest.cpp
@@ -188,7 +188,7 @@
     { kIndex_8_SkColorType,     "011101"  },
     { kRGB_565_SkColorType,     "010101"  },
     { kARGB_4444_SkColorType,   "010111"  },
-    { kPMColor_SkColorType,     "010111"  },
+    { kN32_SkColorType,         "010111"  },
 };
 
 static const int W = 20;
@@ -364,7 +364,7 @@
                     }
                     break;
 
-                case kPMColor_SkColorType:
+                case kN32_SkColorType:
                     if (safeSize != 0x8E1BC9BF040000LL) {
                         sizeFail = true;
                     }
diff --git a/tests/BitmapGetColorTest.cpp b/tests/BitmapGetColorTest.cpp
index 28f3cb3..bf6ebcb 100644
--- a/tests/BitmapGetColorTest.cpp
+++ b/tests/BitmapGetColorTest.cpp
@@ -22,9 +22,9 @@
         {   kAlpha_8_SkColorType,   0,              0           },
         {   kRGB_565_SkColorType,   0xFF00FF00,     0xFF00FF00  },
         {   kRGB_565_SkColorType,   0xFFFF00FF,     0xFFFF00FF  },
-        {   kPMColor_SkColorType,   0xFFFFFFFF,     0xFFFFFFFF  },
-        {   kPMColor_SkColorType,   0,              0           },
-        {   kPMColor_SkColorType,   0xFF224466,     0xFF224466  },
+        {   kN32_SkColorType,       0xFFFFFFFF,     0xFFFFFFFF  },
+        {   kN32_SkColorType,       0,              0           },
+        {   kN32_SkColorType,       0xFF224466,     0xFF224466  },
     };
 
     // specify an area that doesn't touch (0,0) and may extend beyond the
diff --git a/tests/BitmapTest.cpp b/tests/BitmapTest.cpp
index 0167d52..dce1069 100644
--- a/tests/BitmapTest.cpp
+++ b/tests/BitmapTest.cpp
@@ -25,7 +25,7 @@
     // TODO: perhaps skia can relax this, and only require that rowBytes fit
     //       in a uint32_t (or larger), but for now this is the constraint.
 
-    info.fColorType = kPMColor_SkColorType;
+    info.fColorType = kN32_SkColorType;
     REPORTER_ASSERT(reporter, !bm.setConfig(info));
 }
 
diff --git a/tests/BlitRowTest.cpp b/tests/BlitRowTest.cpp
index b8ac0c0..911f2a0 100644
--- a/tests/BlitRowTest.cpp
+++ b/tests/BlitRowTest.cpp
@@ -63,7 +63,7 @@
 static Proc find_proc(const SkBitmap& bm, SkPMColor expect32, uint16_t expect16,
                       uint8_t expect8, uint32_t* expect) {
     switch (bm.colorType()) {
-        case kPMColor_SkColorType:
+        case kN32_SkColorType:
             *expect = expect32;
             return proc_32;
         case kARGB_4444_SkColorType:
@@ -101,7 +101,7 @@
     static const int W = 256;
 
     static const SkColorType gDstColorType[] = {
-        kPMColor_SkColorType,
+        kN32_SkColorType,
         kRGB_565_SkColorType,
     };
 
@@ -192,7 +192,7 @@
     static const int H = W;
 
     static const SkColorType gDstColorType[] = {
-        kPMColor_SkColorType,
+        kN32_SkColorType,
         kRGB_565_SkColorType,
     };
 
diff --git a/tests/CachedDecodingPixelRefTest.cpp b/tests/CachedDecodingPixelRefTest.cpp
index b2ecb0f..705f066 100644
--- a/tests/CachedDecodingPixelRefTest.cpp
+++ b/tests/CachedDecodingPixelRefTest.cpp
@@ -189,7 +189,7 @@
         }
         info->fWidth = TestImageGenerator::Width();
         info->fHeight = TestImageGenerator::Height();
-        info->fColorType = kPMColor_SkColorType;
+        info->fColorType = kN32_SkColorType;
         info->fAlphaType = kOpaque_SkAlphaType;
         return true;
     }
@@ -202,7 +202,7 @@
         REPORTER_ASSERT(fReporter, rowBytes >= minRowBytes);
         if ((NULL == pixels)
             || (fType != kSucceedGetPixels_TestType)
-            || (info.fColorType != kPMColor_SkColorType)) {
+            || (info.fColorType != kN32_SkColorType)) {
             return false;
         }
         char* bytePtr = static_cast<char*>(pixels);
diff --git a/tests/CanvasStateTest.cpp b/tests/CanvasStateTest.cpp
index 212b14a..5c7e473 100644
--- a/tests/CanvasStateTest.cpp
+++ b/tests/CanvasStateTest.cpp
@@ -26,7 +26,7 @@
                                    SkIntToScalar((HEIGHT-(2*SPACER)) / 7));
 
     const SkColorType colorTypes[] = {
-        kRGB_565_SkColorType, kPMColor_SkColorType
+        kRGB_565_SkColorType, kN32_SkColorType
     };
     const int configCount = sizeof(colorTypes) / sizeof(SkBitmap::Config);
 
diff --git a/tests/DrawBitmapRectTest.cpp b/tests/DrawBitmapRectTest.cpp
index f778480..9912643 100644
--- a/tests/DrawBitmapRectTest.cpp
+++ b/tests/DrawBitmapRectTest.cpp
@@ -25,7 +25,7 @@
     virtual bool getInfo(SkImageInfo* info) SK_OVERRIDE {
         info->fWidth = 100;
         info->fHeight = 100;
-        info->fColorType = kPMColor_SkColorType;
+        info->fColorType = kN32_SkColorType;
         info->fAlphaType = kPremul_SkAlphaType;
         return true;
     }
diff --git a/tests/ImageDecodingTest.cpp b/tests/ImageDecodingTest.cpp
index 7b2f988..5d52f90 100644
--- a/tests/ImageDecodingTest.cpp
+++ b/tests/ImageDecodingTest.cpp
@@ -395,7 +395,7 @@
         case kAlpha_8_SkColorType:   return "Alpha_8";
         case kRGB_565_SkColorType:   return "RGB_565";
         case kARGB_4444_SkColorType: return "ARGB_4444";
-        case kPMColor_SkColorType:   return "PMColor";
+        case kN32_SkColorType:       return "N32";
         case kBackwards_SkColorType: return "Backwards";
         case kIndex_8_SkColorType:   return "Index_8";
         default:                     return "ERROR";
@@ -537,7 +537,7 @@
         kAlpha_8_SkColorType,
         kRGB_565_SkColorType,
         kARGB_4444_SkColorType,  // Most decoders will fail on 4444.
-        kPMColor_SkColorType
+        kN32_SkColorType
         // Note that indexed color is left out of the list.  Lazy
         // decoding doesn't do indexed color.
     };
diff --git a/tests/ReadPixelsTest.cpp b/tests/ReadPixelsTest.cpp
index 0ed062e..804a7c4 100644
--- a/tests/ReadPixelsTest.cpp
+++ b/tests/ReadPixelsTest.cpp
@@ -381,7 +381,7 @@
                     SkIRect clippedRect = DEV_RECT;
                     if (clippedRect.intersect(srcRect)) {
                         REPORTER_ASSERT(reporter, success);
-                        REPORTER_ASSERT(reporter, kPMColor_SkColorType == wkbmp.colorType());
+                        REPORTER_ASSERT(reporter, kN32_SkColorType == wkbmp.colorType());
                         REPORTER_ASSERT(reporter, kPremul_SkAlphaType == wkbmp.alphaType());
                         checkRead(reporter, wkbmp, clippedRect.fLeft,
                                   clippedRect.fTop, true, false);
diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp
index dfc7afa..a039e55 100644
--- a/tests/SerializationTest.cpp
+++ b/tests/SerializationTest.cpp
@@ -233,7 +233,7 @@
 
 static bool setup_bitmap_for_canvas(SkBitmap* bitmap) {
     SkImageInfo info = SkImageInfo::Make(
-        kBitmapSize, kBitmapSize, kPMColor_SkColorType, kPremul_SkAlphaType);
+        kBitmapSize, kBitmapSize, kN32_SkColorType, kPremul_SkAlphaType);
     return bitmap->allocPixels(info);
 }
 
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp
index 705ea14..a3efd97 100644
--- a/tests/SurfaceTest.cpp
+++ b/tests/SurfaceTest.cpp
@@ -151,7 +151,7 @@
         if (success) {
             REPORTER_ASSERT(reporter, 10 == info.fWidth);
             REPORTER_ASSERT(reporter, 10 == info.fHeight);
-            REPORTER_ASSERT(reporter, kPMColor_SkColorType == info.fColorType);
+            REPORTER_ASSERT(reporter, kN32_SkColorType == info.fColorType);
             REPORTER_ASSERT(reporter, kPremul_SkAlphaType == info.fAlphaType ||
                             kOpaque_SkAlphaType == info.fAlphaType);
             REPORTER_ASSERT(reporter, info.minRowBytes() <= rowBytes);
diff --git a/tests/WritePixelsTest.cpp b/tests/WritePixelsTest.cpp
index a1c978d..a0e3051 100644
--- a/tests/WritePixelsTest.cpp
+++ b/tests/WritePixelsTest.cpp
@@ -213,7 +213,7 @@
 
     if (canvasInfo.width() != DEV_W ||
         canvasInfo.height() != DEV_H ||
-        canvasInfo.colorType() != kPMColor_SkColorType) {
+        canvasInfo.colorType() != kN32_SkColorType) {
         return false;
     }
 
diff --git a/tools/skdiff_utils.cpp b/tools/skdiff_utils.cpp
index 2f05239..5ca3d80 100644
--- a/tools/skdiff_utils.cpp
+++ b/tools/skdiff_utils.cpp
@@ -85,7 +85,7 @@
 
 bool write_bitmap(const SkString& path, const SkBitmap& bitmap) {
     SkBitmap copy;
-    bitmap.copyTo(&copy, kPMColor_SkColorType);
+    bitmap.copyTo(&copy, kN32_SkColorType);
     force_all_opaque(copy);
     return SkImageEncoder::EncodeFile(path.c_str(), copy,
                                       SkImageEncoder::kPNG_Type, 100);
diff --git a/tools/skimage_main.cpp b/tools/skimage_main.cpp
index d34d57c..634a71d 100644
--- a/tools/skimage_main.cpp
+++ b/tools/skimage_main.cpp
@@ -164,7 +164,7 @@
         return true;
     }
 
-    if (bm.colorType() == kPMColor_SkColorType) {
+    if (bm.colorType() == kN32_SkColorType) {
         // First attempt at encoding failed, and the bitmap was already 8888. Making
         // a copy is not going to help.
         return false;
@@ -172,7 +172,7 @@
 
     // Encoding failed. Copy to 8888 and try again.
     SkBitmap bm8888;
-    if (!bm.copyTo(&bm8888, kPMColor_SkColorType)) {
+    if (!bm.copyTo(&bm8888, kN32_SkColorType)) {
         return false;
     }
     return SkImageEncoder::EncodeFile(filename.c_str(), bm8888, SkImageEncoder::kPNG_Type, 100);
diff --git a/tools/skpdiff/SkDiffContext.cpp b/tools/skpdiff/SkDiffContext.cpp
index b9c55c1..6f0b09f 100644
--- a/tools/skpdiff/SkDiffContext.cpp
+++ b/tools/skpdiff/SkDiffContext.cpp
@@ -122,7 +122,7 @@
 
             // compute the image diff and output it
             SkBitmap copy;
-            diffData.fResult.poiAlphaMask.copyTo(&copy, kPMColor_SkColorType);
+            diffData.fResult.poiAlphaMask.copyTo(&copy, kN32_SkColorType);
             SkImageEncoder::EncodeFile(newRecord->fDifferencePath.c_str(), copy,
                                        SkImageEncoder::kPNG_Type, 100);
 
diff --git a/tools/skpdiff/SkPMetric.cpp b/tools/skpdiff/SkPMetric.cpp
index ed80763..beba497 100644
--- a/tools/skpdiff/SkPMetric.cpp
+++ b/tools/skpdiff/SkPMetric.cpp
@@ -125,8 +125,8 @@
 /// Converts a 8888 bitmap to LAB color space and puts it into the output
 static bool bitmap_to_cielab(const SkBitmap* bitmap, ImageLAB* outImageLAB) {
     SkBitmap bm8888;
-    if (bitmap->colorType() != kPMColor_SkColorType) {
-        if (!bitmap->copyTo(&bm8888, kPMColor_SkColorType)) {
+    if (bitmap->colorType() != kN32_SkColorType) {
+        if (!bitmap->copyTo(&bm8888, kN32_SkColorType)) {
             return false;
         }
         bitmap = &bm8888;
