diff --git a/core/jni/android/graphics/ColorFilter.cpp b/core/jni/android/graphics/ColorFilter.cpp
index a54571b..c0fc28a 100644
--- a/core/jni/android/graphics/ColorFilter.cpp
+++ b/core/jni/android/graphics/ColorFilter.cpp
@@ -38,7 +38,7 @@
 
     static jlong CreateBlendModeFilter(JNIEnv* env, jobject, jint srcColor, jint modeHandle) {
         SkBlendMode mode = static_cast<SkBlendMode>(modeHandle);
-        return reinterpret_cast<jlong>(SkColorFilter::MakeModeFilter(srcColor, mode).release());
+        return reinterpret_cast<jlong>(SkColorFilters::Blend(srcColor, mode).release());
     }
 
     static jlong CreateLightingFilter(JNIEnv* env, jobject, jint mul, jint add) {
@@ -50,7 +50,7 @@
         const float* src = autoArray.ptr();
 
 #ifdef SK_SCALAR_IS_FLOAT
-        return reinterpret_cast<jlong>(SkColorFilter::MakeMatrixFilterRowMajor255(src).release());
+        return reinterpret_cast<jlong>(SkColorFilters::MatrixRowMajor255(src).release());
 #else
         SkASSERT(false);
 #endif
diff --git a/core/jni/android/graphics/Shader.cpp b/core/jni/android/graphics/Shader.cpp
index 44d2cac..bd28fe0 100644
--- a/core/jni/android/graphics/Shader.cpp
+++ b/core/jni/android/graphics/Shader.cpp
@@ -77,7 +77,7 @@
         image = SkMakeImageFromRasterBitmap(bitmap, kNever_SkCopyPixelsMode);
     }
     sk_sp<SkShader> shader = image->makeShader(
-            (SkShader::TileMode)tileModeX, (SkShader::TileMode)tileModeY);
+            (SkTileMode)tileModeX, (SkTileMode)tileModeY);
     ThrowIAE_IfNull(env, shader.get());
 
     if (matrix) {
@@ -122,7 +122,7 @@
 
     sk_sp<SkShader> shader(SkGradientShader::MakeLinear(pts, &colors[0],
                 GraphicsJNI::getNativeColorSpace(colorSpaceHandle), pos, colors.size(),
-                static_cast<SkShader::TileMode>(tileMode), sGradientShaderFlags, nullptr));
+                static_cast<SkTileMode>(tileMode), sGradientShaderFlags, nullptr));
     ThrowIAE_IfNull(env, shader);
 
     const SkMatrix* matrix = reinterpret_cast<const SkMatrix*>(matrixPtr);
@@ -152,7 +152,7 @@
 
     sk_sp<SkShader> shader = SkGradientShader::MakeRadial(center, radius, &colors[0],
             GraphicsJNI::getNativeColorSpace(colorSpaceHandle), pos, colors.size(),
-            static_cast<SkShader::TileMode>(tileMode), sGradientShaderFlags, nullptr);
+            static_cast<SkTileMode>(tileMode), sGradientShaderFlags, nullptr);
     ThrowIAE_IfNull(env, shader);
 
     const SkMatrix* matrix = reinterpret_cast<const SkMatrix*>(matrixPtr);
@@ -197,8 +197,8 @@
     SkShader* shaderA = reinterpret_cast<SkShader *>(shaderAHandle);
     SkShader* shaderB = reinterpret_cast<SkShader *>(shaderBHandle);
     SkBlendMode mode = static_cast<SkBlendMode>(xfermodeHandle);
-    sk_sp<SkShader> baseShader(SkShader::MakeComposeShader(
-            sk_ref_sp(shaderA), sk_ref_sp(shaderB), mode));
+    sk_sp<SkShader> baseShader(SkShaders::Blend(mode,
+            sk_ref_sp(shaderA), sk_ref_sp(shaderB)));
 
     SkShader* shader;
 
diff --git a/libs/hwui/CanvasTransform.cpp b/libs/hwui/CanvasTransform.cpp
index 0cfaa8c..83e02b9 100644
--- a/libs/hwui/CanvasTransform.cpp
+++ b/libs/hwui/CanvasTransform.cpp
@@ -102,7 +102,7 @@
         // TODO: LRU this or something to avoid spamming new color mode filters
         if (paint.getColorFilter()->asColorMode(&color, &mode)) {
             color = transformColor(transform, color);
-            paint.setColorFilter(SkColorFilter::MakeModeFilter(color, mode));
+            paint.setColorFilter(SkColorFilters::Blend(color, mode));
         }
     }
 }
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index f328a53..8340699 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -631,8 +631,7 @@
     SkPaint& tmpPaint = paintCoW.writeable();
 
     sk_sp<SkImage> image = bitmap.makeImage();
-    sk_sp<SkShader> shader =
-            image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
+    sk_sp<SkShader> shader = image->makeShader();
     tmpPaint.setShader(std::move(shader));
 
     mCanvas->drawVertices(builder.detach(), SkBlendMode::kModulate,
diff --git a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp
index d945635..3f9e50a 100644
--- a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp
+++ b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp
@@ -180,7 +180,7 @@
 
         if (colorSpaceFilter) {
             if (tmpPaint.getColorFilter()) {
-                tmpPaint.setColorFilter(SkColorFilter::MakeComposeFilter(
+                tmpPaint.setColorFilter(SkColorFilters::Compose(
                         tmpPaint.refColorFilter(), std::move(colorSpaceFilter)));
             } else {
                 tmpPaint.setColorFilter(std::move(colorSpaceFilter));
diff --git a/libs/hwui/tests/common/scenes/BitmapShaders.cpp b/libs/hwui/tests/common/scenes/BitmapShaders.cpp
index 5107660..400196b 100644
--- a/libs/hwui/tests/common/scenes/BitmapShaders.cpp
+++ b/libs/hwui/tests/common/scenes/BitmapShaders.cpp
@@ -46,14 +46,12 @@
         SkPaint paint;
         sk_sp<SkImage> image = hwuiBitmap->makeImage();
         sk_sp<SkShader> repeatShader =
-                image->makeShader(SkShader::TileMode::kRepeat_TileMode,
-                                  SkShader::TileMode::kRepeat_TileMode, nullptr);
+                image->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat);
         paint.setShader(std::move(repeatShader));
         canvas.drawRoundRect(0, 0, 500, 500, 50.0f, 50.0f, paint);
 
         sk_sp<SkShader> mirrorShader =
-                image->makeShader(SkShader::TileMode::kMirror_TileMode,
-                                  SkShader::TileMode::kMirror_TileMode, nullptr);
+                image->makeShader(SkTileMode::kMirror, SkTileMode::kMirror);
         paint.setShader(std::move(mirrorShader));
         canvas.drawRoundRect(0, 600, 500, 1100, 50.0f, 50.0f, paint);
     }
diff --git a/libs/hwui/tests/common/scenes/HwBitmapInCompositeShader.cpp b/libs/hwui/tests/common/scenes/HwBitmapInCompositeShader.cpp
index 2af955f..659926b 100644
--- a/libs/hwui/tests/common/scenes/HwBitmapInCompositeShader.cpp
+++ b/libs/hwui/tests/common/scenes/HwBitmapInCompositeShader.cpp
@@ -60,10 +60,10 @@
         colors[0] = Color::Black;
         colors[1] = Color::White;
         sk_sp<SkShader> gradientShader = SkGradientShader::MakeRadial(
-                center, 50, colors, nullptr, 2, SkShader::TileMode::kRepeat_TileMode);
+                center, 50, colors, nullptr, 2, SkTileMode::kRepeat);
 
         sk_sp<SkShader> compositeShader(
-                SkShader::MakeComposeShader(hardwareShader, gradientShader, SkBlendMode::kDstATop));
+                SkShaders::Blend(SkBlendMode::kDstATop, hardwareShader, gradientShader));
 
         SkPaint paint;
         paint.setShader(std::move(compositeShader));
@@ -74,7 +74,6 @@
 
     sk_sp<SkShader> createBitmapShader(Bitmap& bitmap) {
         sk_sp<SkImage> image = bitmap.makeImage();
-        return image->makeShader(SkShader::TileMode::kClamp_TileMode,
-                                 SkShader::TileMode::kClamp_TileMode);
+        return image->makeShader();
     }
 };
diff --git a/libs/hwui/tests/common/scenes/ListOfFadedTextAnimation.cpp b/libs/hwui/tests/common/scenes/ListOfFadedTextAnimation.cpp
index ecaaf48..c6b60aae 100644
--- a/libs/hwui/tests/common/scenes/ListOfFadedTextAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/ListOfFadedTextAnimation.cpp
@@ -44,7 +44,7 @@
 
         SkColor colors[2] = {Color::Black, Color::Transparent};
         sk_sp<SkShader> s(
-                SkGradientShader::MakeLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode));
+                SkGradientShader::MakeLinear(pts, colors, NULL, 2, SkTileMode::kClamp));
 
         SkMatrix matrix;
         matrix.setScale(1, length);
diff --git a/libs/hwui/tests/common/scenes/SimpleColorMatrixAnimation.cpp b/libs/hwui/tests/common/scenes/SimpleColorMatrixAnimation.cpp
index ff0cb370..2572d71 100644
--- a/libs/hwui/tests/common/scenes/SimpleColorMatrixAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/SimpleColorMatrixAnimation.cpp
@@ -66,7 +66,7 @@
                     matrix[SkColorMatrix::kB_Trans] = 5.0f;
                     matrix[SkColorMatrix::kA_Trans] = 10.0f;
 
-                    paint.setColorFilter(SkColorFilter::MakeMatrixFilterRowMajor255(matrix));
+                    paint.setColorFilter(SkColorFilters::MatrixRowMajor255(matrix));
 
                     // set a shader so it's not likely for the matrix to be optimized away (since a
                     // clever
@@ -75,7 +75,7 @@
                     SkPoint pts[] = {SkPoint::Make(0, 0), SkPoint::Make(width, height)};
                     SkColor colors[2] = {Color::DeepPurple_500, Color::DeepOrange_500};
                     paint.setShader(SkGradientShader::MakeLinear(pts, colors, pos, 2,
-                                                                 SkShader::kClamp_TileMode));
+                                                                 SkTileMode::kClamp));
 
                     // overdraw several times to emphasize shader cost
                     for (int i = 0; i < 10; i++) {
diff --git a/libs/hwui/tests/common/scenes/SimpleGradientAnimation.cpp b/libs/hwui/tests/common/scenes/SimpleGradientAnimation.cpp
index 016c65c..8bd804e 100644
--- a/libs/hwui/tests/common/scenes/SimpleGradientAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/SimpleGradientAnimation.cpp
@@ -57,7 +57,7 @@
                         // use i%2 start position to pick 2 color combo with black in it
                         SkColor colors[3] = {Color::Transparent, Color::Black, Color::Cyan_500};
                         paint.setShader(SkGradientShader::MakeLinear(pts, colors + (i % 2), pos, 2,
-                                                                     SkShader::kClamp_TileMode));
+                                                                     SkTileMode::kClamp));
                         canvas.drawRect(i, i, width, height, paint);
                     }
                 });
diff --git a/libs/hwui/tests/common/scenes/TvApp.cpp b/libs/hwui/tests/common/scenes/TvApp.cpp
index 229c7f3..76f0288 100644
--- a/libs/hwui/tests/common/scenes/TvApp.cpp
+++ b/libs/hwui/tests/common/scenes/TvApp.cpp
@@ -219,7 +219,7 @@
                     image.get()));
             SkPaint paint;
             sk_sp<SkColorFilter> filter(
-                    SkColorFilter::MakeModeFilter((curFrame % 150) << 24, SkBlendMode::kSrcATop));
+                    SkColorFilters::Blend((curFrame % 150) << 24, SkBlendMode::kSrcATop));
             paint.setColorFilter(filter);
             sk_sp<Bitmap> bitmap = mCachedBitmaps[ci];
             canvas->drawBitmap(*bitmap, 0, 0, &paint);
diff --git a/libs/hwui/tests/unit/VectorDrawableTests.cpp b/libs/hwui/tests/unit/VectorDrawableTests.cpp
index 5db0028..60fd7a7 100644
--- a/libs/hwui/tests/unit/VectorDrawableTests.cpp
+++ b/libs/hwui/tests/unit/VectorDrawableTests.cpp
@@ -395,7 +395,7 @@
     bitmap.allocN32Pixels(5, 5, false);
     SkCanvas canvas(bitmap);
 
-    sk_sp<SkShader> shader = SkShader::MakeColorShader(SK_ColorBLACK);
+    sk_sp<SkShader> shader = SkShaders::Color(SK_ColorBLACK);
     // Initial ref count is 1
     EXPECT_TRUE(shader->unique());
 
