remove localmatrix parameter from Blend and Lerp compose shaders

Bug: skia:10080
Change-Id: I936d6d696c86c50d5b51dc84894127c38ad753d4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/279048
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index 82366e9..ddde299 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -6,6 +6,8 @@
 
 Milestone 83
 
+  * Remove localmatrix option from SkShaders::[Blend, Lerp]
+
   * Fill out Direct3D parameters for backend textures and backend rendertargets.
 
   * SkImage::makeTextureImage() takes an optional SkBudgeted param
diff --git a/gm/composeshader.cpp b/gm/composeshader.cpp
index 907bf36..8ef0824 100644
--- a/gm/composeshader.cpp
+++ b/gm/composeshader.cpp
@@ -192,23 +192,24 @@
     void onDraw(SkCanvas* canvas) override {
         SkBlendMode mode = SkBlendMode::kDstOver;
 
-        SkTLazy<SkMatrix> lm;
-        if (fUseLocalMatrix) {
-            lm.set(SkMatrix::MakeTrans(0, squareLength * 0.5f));
-        }
+        SkMatrix lm = SkMatrix::MakeTrans(0, squareLength * 0.5f);
 
         sk_sp<SkShader> shaders[] = {
             // gradient should appear over color bitmap
-            SkShaders::Blend(mode, fLinearGradientShader, fColorBitmapShader, lm.getMaybeNull()),
+            SkShaders::Blend(mode, fLinearGradientShader, fColorBitmapShader),
             // gradient should appear over alpha8 bitmap colorized by the paint color
-            SkShaders::Blend(mode, fLinearGradientShader, fAlpha8BitmapShader, lm.getMaybeNull()),
+            SkShaders::Blend(mode, fLinearGradientShader, fAlpha8BitmapShader),
         };
+        if (fUseLocalMatrix) {
+            for (unsigned i = 0; i < SK_ARRAY_COUNT(shaders); ++i) {
+                shaders[i] = shaders[i]->makeWithLocalMatrix(lm);
+            }
+        }
 
         SkPaint paint;
         paint.setColor(SK_ColorYELLOW);
 
-        const SkRect r = SkRect::MakeXYWH(0, 0, SkIntToScalar(squareLength),
-                                          SkIntToScalar(squareLength));
+        const SkRect r = SkRect::MakeIWH(squareLength, squareLength);
 
         for (size_t y = 0; y < SK_ARRAY_COUNT(shaders); ++y) {
             canvas->save();
diff --git a/include/core/SkShader.h b/include/core/SkShader.h
index 45f9db0..211a6f8 100644
--- a/include/core/SkShader.h
+++ b/include/core/SkShader.h
@@ -139,10 +139,8 @@
     static sk_sp<SkShader> Empty();
     static sk_sp<SkShader> Color(SkColor);
     static sk_sp<SkShader> Color(const SkColor4f&, sk_sp<SkColorSpace>);
-    static sk_sp<SkShader> Blend(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src,
-                                 const SkMatrix* localMatrix = nullptr);
-    static sk_sp<SkShader> Lerp(float t, sk_sp<SkShader> dst, sk_sp<SkShader> src,
-                                const SkMatrix* localMatrix = nullptr);
+    static sk_sp<SkShader> Blend(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src);
+    static sk_sp<SkShader> Lerp(float t, sk_sp<SkShader> dst, sk_sp<SkShader> src);
 
 private:
     SkShaders() = delete;
diff --git a/modules/canvaskit/CHANGELOG.md b/modules/canvaskit/CHANGELOG.md
index 6848f0f..bfce278 100644
--- a/modules/canvaskit/CHANGELOG.md
+++ b/modules/canvaskit/CHANGELOG.md
@@ -6,6 +6,9 @@
 
 ## [Unreleased]
 
+### Removed
+ - localmatrix option for `SkShader.Lerp` and `SkShader.Blend`.
+
 ## [0.14.0] - 2020-03-18
 
 ### Added
diff --git a/modules/canvaskit/canvaskit_bindings.cpp b/modules/canvaskit/canvaskit_bindings.cpp
index c527688..1831f7d 100644
--- a/modules/canvaskit/canvaskit_bindings.cpp
+++ b/modules/canvaskit/canvaskit_bindings.cpp
@@ -1464,23 +1464,9 @@
 
     class_<SkShader>("SkShader")
         .smart_ptr<sk_sp<SkShader>>("sk_sp<SkShader>")
-        .class_function("_Blend", optional_override([](SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src)->sk_sp<SkShader> {
-            return SkShaders::Blend(mode, dst, src, nullptr);
-        }))
-        .class_function("_Blend", optional_override([](SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src,
-                                                       SimpleMatrix sm)->sk_sp<SkShader> {
-            auto m = toSkMatrix(sm);
-            return SkShaders::Blend(mode, dst, src, &m);
-        }))
+        .class_function("Blend", select_overload<sk_sp<SkShader>(SkBlendMode, sk_sp<SkShader>, sk_sp<SkShader>)>(&SkShaders::Blend))
         .class_function("Color", select_overload<sk_sp<SkShader>(SkColor)>(&SkShaders::Color))
-        .class_function("_Lerp", optional_override([](float t, sk_sp<SkShader> dst, sk_sp<SkShader> src)->sk_sp<SkShader> {
-            return SkShaders::Lerp(t, dst, src, nullptr);
-        }))
-        .class_function("_Lerp", optional_override([](float t, sk_sp<SkShader> dst, sk_sp<SkShader> src,
-                                                      SimpleMatrix sm)->sk_sp<SkShader> {
-            auto m = toSkMatrix(sm);
-            return SkShaders::Lerp(t, dst, src, &m);
-        }));
+        .class_function("Lerp", select_overload<sk_sp<SkShader>(float, sk_sp<SkShader>, sk_sp<SkShader>)>(&SkShaders::Lerp));
 
 #ifdef SK_INCLUDE_RUNTIME_EFFECT
     class_<SkRuntimeEffect>("SkRuntimeEffect")
diff --git a/modules/canvaskit/externs.js b/modules/canvaskit/externs.js
index 154efdf..ddc2b3c 100644
--- a/modules/canvaskit/externs.js
+++ b/modules/canvaskit/externs.js
@@ -471,9 +471,6 @@
     MakeRadialGradient: function() {},
     MakeTwoPointConicalGradient: function() {},
     MakeSweepGradient: function() {},
-
-    _Blend: function() {},
-    _Lerp: function() {},
   },
 
   SkSurface: {
diff --git a/modules/canvaskit/interface.js b/modules/canvaskit/interface.js
index 91cc51d..495fb9d 100644
--- a/modules/canvaskit/interface.js
+++ b/modules/canvaskit/interface.js
@@ -1001,20 +1001,6 @@
     return m;
   }
 
-  CanvasKit.SkShader.Blend = function(mode, dst, src, localMatrix) {
-    if (!localMatrix) {
-      return this._Blend(mode, dst, src);
-    }
-    return this._Blend(mode, dst, src, localMatrix);
-  }
-
-  CanvasKit.SkShader.Lerp = function(t, dst, src, localMatrix) {
-    if (!localMatrix) {
-      return this._Lerp(t, dst, src);
-    }
-    return this._Lerp(t, dst, src, localMatrix);
-  }
-
   CanvasKit.SkSurface.prototype.captureFrameAsSkPicture = function(drawFrame) {
     // Set up SkPictureRecorder
     var spr = new CanvasKit.SkPictureRecorder();
diff --git a/modules/skottie/src/effects/MotionTileEffect.cpp b/modules/skottie/src/effects/MotionTileEffect.cpp
index b693c4e..bc2c31f 100644
--- a/modules/skottie/src/effects/MotionTileEffect.cpp
+++ b/modules/skottie/src/effects/MotionTileEffect.cpp
@@ -113,8 +113,8 @@
             // First drawing pass: in-place masked layer content.
             fMainPassShader  = SkShaders::Blend(SkBlendMode::kSrcIn , mask_shader, layer_shader);
             // Second pass: phased-shifted layer content, with an inverse mask.
-            fPhasePassShader = SkShaders::Blend(SkBlendMode::kSrcOut, mask_shader, layer_shader,
-                                                &phase_shader_matrix);
+            fPhasePassShader = SkShaders::Blend(SkBlendMode::kSrcOut, mask_shader, layer_shader)
+                               ->makeWithLocalMatrix(phase_shader_matrix);
         } else {
             fMainPassShader  = std::move(layer_shader);
             fPhasePassShader = nullptr;
diff --git a/src/core/SkDraw_vertices.cpp b/src/core/SkDraw_vertices.cpp
index 35fab6c..dc3361a 100644
--- a/src/core/SkDraw_vertices.cpp
+++ b/src/core/SkDraw_vertices.cpp
@@ -355,8 +355,7 @@
                                                       usePerspective);
         if (shader) {
             shader = outerAlloc->make<SkShader_Blend>(bmode,
-                                                     sk_ref_sp(triShader), sk_ref_sp(shader),
-                                                     nullptr);
+                                                     sk_ref_sp(triShader), sk_ref_sp(shader));
         } else {
             shader = triShader;
         }
diff --git a/src/shaders/SkComposeShader.cpp b/src/shaders/SkComposeShader.cpp
index bd6cffe..96ebf79 100644
--- a/src/shaders/SkComposeShader.cpp
+++ b/src/shaders/SkComposeShader.cpp
@@ -19,10 +19,6 @@
 
 namespace {
 
-sk_sp<SkShader> wrap_lm(sk_sp<SkShader> shader, const SkMatrix* lm) {
-    return (shader && lm) ? shader->makeWithLocalMatrix(*lm) : shader;
-}
-
 struct LocalMatrixStageRec final : public SkStageRec {
     LocalMatrixStageRec(const SkStageRec& rec, const SkMatrix& lm)
         : INHERITED(rec) {
@@ -44,29 +40,27 @@
 
 } // namespace
 
-sk_sp<SkShader> SkShaders::Blend(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src,
-                                 const SkMatrix* lm) {
+sk_sp<SkShader> SkShaders::Blend(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src) {
     switch (mode) {
         case SkBlendMode::kClear: return Color(0);
-        case SkBlendMode::kDst:   return wrap_lm(std::move(dst), lm);
-        case SkBlendMode::kSrc:   return wrap_lm(std::move(src), lm);
+        case SkBlendMode::kDst:   return dst;
+        case SkBlendMode::kSrc:   return src;
         default: break;
     }
-    return sk_sp<SkShader>(new SkShader_Blend(mode, std::move(dst), std::move(src), lm));
+    return sk_sp<SkShader>(new SkShader_Blend(mode, std::move(dst), std::move(src)));
 }
 
-sk_sp<SkShader> SkShaders::Lerp(float weight, sk_sp<SkShader> dst, sk_sp<SkShader> src,
-                                const SkMatrix* lm) {
+sk_sp<SkShader> SkShaders::Lerp(float weight, sk_sp<SkShader> dst, sk_sp<SkShader> src) {
     if (SkScalarIsNaN(weight)) {
         return nullptr;
     }
     if (dst == src || weight <= 0) {
-        return wrap_lm(std::move(dst), lm);
+        return dst;
     }
     if (weight >= 1) {
-        return wrap_lm(std::move(src), lm);
+        return src;
     }
-    return sk_sp<SkShader>(new SkShader_Lerp(weight, std::move(dst), std::move(src), lm));
+    return sk_sp<SkShader>(new SkShader_Lerp(weight, std::move(dst), std::move(src)));
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/shaders/SkComposeShader.h b/src/shaders/SkComposeShader.h
index f022592..dd36d38 100644
--- a/src/shaders/SkComposeShader.h
+++ b/src/shaders/SkComposeShader.h
@@ -13,9 +13,8 @@
 
 class SkShader_Blend final : public SkShaderBase {
 public:
-    SkShader_Blend(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src, const SkMatrix* lm)
-        : INHERITED(lm)
-        , fDst(std::move(dst))
+    SkShader_Blend(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src)
+        : fDst(std::move(dst))
         , fSrc(std::move(src))
         , fMode(mode)
     {}
@@ -45,9 +44,8 @@
 
 class SkShader_Lerp final : public SkShaderBase {
 public:
-    SkShader_Lerp(float weight, sk_sp<SkShader> dst, sk_sp<SkShader> src, const SkMatrix* lm)
-        : INHERITED(lm)
-        , fDst(std::move(dst))
+    SkShader_Lerp(float weight, sk_sp<SkShader> dst, sk_sp<SkShader> src)
+        : fDst(std::move(dst))
         , fSrc(std::move(src))
         , fWeight(weight)
     {