diff --git a/gm/crbug_905548.cpp b/gm/crbug_905548.cpp
index 2406e8f..bbf2eac 100644
--- a/gm/crbug_905548.cpp
+++ b/gm/crbug_905548.cpp
@@ -28,7 +28,7 @@
 
     auto blurred = SkImageFilters::Blur(15, 15, imageSource);
     auto eroded = SkImageFilters::Erode(0, 0, blurred);
-    auto blended = SkImageFilters::Xfermode(SkBlendMode::kDstOut, eroded, imageSource, nullptr);
+    auto blended = SkImageFilters::Blend(SkBlendMode::kDstOut, eroded, imageSource, nullptr);
 
     SkPaint paint;
     paint.setImageFilter(blended);
diff --git a/gm/imagefilters.cpp b/gm/imagefilters.cpp
index d35d205..329ccea 100644
--- a/gm/imagefilters.cpp
+++ b/gm/imagefilters.cpp
@@ -257,7 +257,7 @@
     // If edge detector sees the mask filter, it'll have alpha and then blend with the original
     // image; otherwise the mask filter will apply late (incorrectly) and none of the original
     // image will be visible.
-    sk_sp<SkImageFilter> edgeBlend = SkImageFilters::Xfermode(SkBlendMode::kSrcOver,
+    sk_sp<SkImageFilter> edgeBlend = SkImageFilters::Blend(SkBlendMode::kSrcOver,
             SkImageFilters::Image(image), edgeDetector);
 
     SkPaint testMaskPaint;
@@ -266,8 +266,8 @@
 
     SkPaint expectedMaskPaint;
     expectedMaskPaint.setImageFilter(SkImageFilters::Compose(edgeBlend,
-            SkImageFilters::Xfermode(SkBlendMode::kSrcIn,
-                                     SkImageFilters::Shader(alphaMaskShader))));
+            SkImageFilters::Blend(SkBlendMode::kSrcIn,
+                                  SkImageFilters::Shader(alphaMaskShader))));
 
     canvas->save();
     canvas->translate(0, image->height());
diff --git a/gm/imagefiltersgraph.cpp b/gm/imagefiltersgraph.cpp
index 6ed23e1..6c47388 100644
--- a/gm/imagefiltersgraph.cpp
+++ b/gm/imagefiltersgraph.cpp
@@ -71,8 +71,8 @@
             sk_sp<SkImageFilter> colorMorph(SkImageFilters::ColorFilter(std::move(matrixFilter),
                                                                            std::move(morph)));
             SkPaint paint;
-            paint.setImageFilter(SkImageFilters::Xfermode(SkBlendMode::kSrcOver,
-                                                          std::move(colorMorph)));
+            paint.setImageFilter(SkImageFilters::Blend(SkBlendMode::kSrcOver,
+                                                       std::move(colorMorph)));
 
             DrawClippedImage(canvas, fImage.get(), paint);
             canvas->translate(SkIntToScalar(100), 0);
@@ -100,7 +100,7 @@
             SkIRect cropRect = SkIRect::MakeWH(95, 100);
             SkPaint paint;
             paint.setImageFilter(
-                SkImageFilters::Xfermode(SkBlendMode::kSrcIn, std::move(blur), nullptr, &cropRect));
+                SkImageFilters::Blend(SkBlendMode::kSrcIn, std::move(blur), nullptr, &cropRect));
             DrawClippedImage(canvas, fImage.get(), paint);
             canvas->translate(SkIntToScalar(100), 0);
         }
diff --git a/gm/imagefilterstransformed.cpp b/gm/imagefilterstransformed.cpp
index d2a0622..4a4dda9 100644
--- a/gm/imagefilterstransformed.cpp
+++ b/gm/imagefilterstransformed.cpp
@@ -135,7 +135,7 @@
     sk_sp<SkImageFilter> filters[] = {
         nullptr,
         SkImageFilters::Blur(6, 0, nullptr),
-        SkImageFilters::Xfermode(SkBlendMode::kSrcOver, nullptr),
+        SkImageFilters::Blend(SkBlendMode::kSrcOver, nullptr),
     };
 
     for (auto& filter : filters) {
diff --git a/gm/imagemakewithfilter.cpp b/gm/imagemakewithfilter.cpp
index 958b1d0..03b214f 100644
--- a/gm/imagemakewithfilter.cpp
+++ b/gm/imagemakewithfilter.cpp
@@ -98,9 +98,9 @@
                                       nullptr, cropRect);
 }
 
-static sk_sp<SkImageFilter> xfermode_factory(sk_sp<SkImage> auxImage, const SkIRect* cropRect) {
+static sk_sp<SkImageFilter> blend_factory(sk_sp<SkImage> auxImage, const SkIRect* cropRect) {
     sk_sp<SkImageFilter> background = SkImageFilters::Image(std::move(auxImage));
-    return SkImageFilters::Xfermode(
+    return SkImageFilters::Blend(
             SkBlendMode::kModulate, std::move(background), nullptr, cropRect);
 }
 
@@ -233,7 +233,7 @@
             erode_factory,
             displacement_factory,
             arithmetic_factory,
-            xfermode_factory,
+            blend_factory,
             convolution_factory,
             matrix_factory,
             alpha_threshold_factory,
@@ -249,7 +249,7 @@
             "Erode",
             "Displacement",
             "Arithmetic",
-            "Xfer Mode",
+            "Xfer Mode", // "blend"
             "Convolution",
             "Matrix Xform",
             "Alpha Threshold",
diff --git a/gm/xfermodeimagefilter.cpp b/gm/xfermodeimagefilter.cpp
index 5f69249..efd2a62 100644
--- a/gm/xfermodeimagefilter.cpp
+++ b/gm/xfermodeimagefilter.cpp
@@ -92,7 +92,7 @@
         int x = 0, y = 0;
         sk_sp<SkImageFilter> background(SkImageFilters::Image(fCheckerboard));
         for (size_t i = 0; i < SK_ARRAY_COUNT(gModes); i++) {
-            paint.setImageFilter(SkImageFilters::Xfermode(gModes[i], background));
+            paint.setImageFilter(SkImageFilters::Blend(gModes[i], background));
             DrawClippedBitmap(canvas, fBitmap, paint, x, y);
             x += fBitmap.width() + MARGIN;
             if (x + fBitmap.width() > WIDTH) {
@@ -109,7 +109,7 @@
             y += fBitmap.height() + MARGIN;
         }
         // Test nullptr mode
-        paint.setImageFilter(SkImageFilters::Xfermode(SkBlendMode::kSrcOver, background));
+        paint.setImageFilter(SkImageFilters::Blend(SkBlendMode::kSrcOver, background));
         DrawClippedBitmap(canvas, fBitmap, paint, x, y);
         x += fBitmap.width() + MARGIN;
         if (x + fBitmap.width() > WIDTH) {
@@ -123,7 +123,7 @@
         sk_sp<SkImageFilter> foreground(SkImageFilters::Image(std::move(bitmapImage)));
         sk_sp<SkImageFilter> offsetForeground(SkImageFilters::Offset(4, -4, foreground));
         sk_sp<SkImageFilter> offsetBackground(SkImageFilters::Offset(4, 4, background));
-        paint.setImageFilter(SkImageFilters::Xfermode(
+        paint.setImageFilter(SkImageFilters::Blend(
                 SkBlendMode::kSrcOver, offsetBackground, offsetForeground));
         DrawClippedPaint(canvas, clipRect, paint, x, y);
         x += fBitmap.width() + MARGIN;
@@ -132,7 +132,7 @@
             y += fBitmap.height() + MARGIN;
         }
         // Test offsets on Darken (uses shader blend)
-        paint.setImageFilter(SkImageFilters::Xfermode(
+        paint.setImageFilter(SkImageFilters::Blend(
                 SkBlendMode::kDarken, offsetBackground, offsetForeground));
         DrawClippedPaint(canvas, clipRect, paint, x, y);
         x += fBitmap.width() + MARGIN;
@@ -153,8 +153,8 @@
                                                  offsets[i][1],
                                                  fBitmap.width()  + offsets[i][2],
                                                  fBitmap.height() + offsets[i][3]);
-            paint.setImageFilter(SkImageFilters::Xfermode(sampledModes[i], offsetBackground,
-                                                          offsetForeground, &cropRect));
+            paint.setImageFilter(SkImageFilters::Blend(sampledModes[i], offsetBackground,
+                                                       offsetForeground, &cropRect));
             DrawClippedPaint(canvas, clipRect, paint, x, y);
             x += fBitmap.width() + MARGIN;
             if (x + fBitmap.width() > WIDTH) {
@@ -165,8 +165,7 @@
         // Test small bg, large fg with Screen (uses shader blend)
         SkIRect cropRect = SkIRect::MakeXYWH(10, 10, 60, 60);
         sk_sp<SkImageFilter> cropped(SkImageFilters::Offset(0, 0, foreground, &cropRect));
-        paint.setImageFilter(SkImageFilters::Xfermode(SkBlendMode::kScreen, cropped, background,
-                                                      nullptr));
+        paint.setImageFilter(SkImageFilters::Blend(SkBlendMode::kScreen, cropped, background));
         DrawClippedPaint(canvas, clipRect, paint, x, y);
         x += fBitmap.width() + MARGIN;
         if (x + fBitmap.width() > WIDTH) {
@@ -174,8 +173,7 @@
             y += fBitmap.height() + MARGIN;
         }
         // Test small fg, large bg with Screen (uses shader blend)
-        paint.setImageFilter(SkImageFilters::Xfermode(SkBlendMode::kScreen, background, cropped,
-                                                      nullptr));
+        paint.setImageFilter(SkImageFilters::Blend(SkBlendMode::kScreen, background, cropped));
         DrawClippedPaint(canvas, clipRect, paint, x, y);
         x += fBitmap.width() + MARGIN;
         if (x + fBitmap.width() > WIDTH) {
@@ -186,8 +184,8 @@
         // This tests that SkXfermodeImageFilter correctly applies the compositing mode to
         // the region outside the foreground.
         SkIRect cropRectFull = SkIRect::MakeXYWH(0, 0, 80, 80);
-        paint.setImageFilter(SkImageFilters::Xfermode(SkBlendMode::kSrcIn, background, cropped,
-                                                      &cropRectFull));
+        paint.setImageFilter(SkImageFilters::Blend(SkBlendMode::kSrcIn, background, cropped,
+                                                   &cropRectFull));
         DrawClippedPaint(canvas, clipRect, paint, x, y);
         x += fBitmap.width() + MARGIN;
         if (x + fBitmap.width() > WIDTH) {
