Revert "Revert "Make ShaderMaskLayer code builder aware" (#35588)"

This reverts commit bd89852694fe08b12467c74a17bc6b7c5cb30563.
diff --git a/flow/layers/shader_mask_layer.cc b/flow/layers/shader_mask_layer.cc
index b7dd47e..9a99a80 100644
--- a/flow/layers/shader_mask_layer.cc
+++ b/flow/layers/shader_mask_layer.cc
@@ -54,19 +54,32 @@
       return;
     }
   }
+  auto shader_rect = SkRect::MakeWH(mask_rect_.width(), mask_rect_.height());
 
-  Layer::AutoSaveLayer save = Layer::AutoSaveLayer::Create(
-      context, paint_bounds(), cache_paint.sk_paint());
-  PaintChildren(context);
+  if (context.leaf_nodes_builder) {
+    context.builder_multiplexer->saveLayer(&paint_bounds(),
+                                           cache_paint.dl_paint());
+    PaintChildren(context);
 
-  SkPaint paint;
-  paint.setBlendMode(ToSk(blend_mode_));
-  if (shader_) {
-    paint.setShader(shader_->skia_object());
+    DlPaint dl_paint;
+    dl_paint.setBlendMode(blend_mode_);
+    if (shader_) {
+      dl_paint.setColorSource(shader_.get());
+    }
+    context.leaf_nodes_builder->translate(mask_rect_.left(), mask_rect_.top());
+    context.leaf_nodes_builder->drawRect(shader_rect, dl_paint);
+  } else {
+    Layer::AutoSaveLayer save = Layer::AutoSaveLayer::Create(
+        context, paint_bounds(), cache_paint.sk_paint());
+    PaintChildren(context);
+    SkPaint paint;
+    paint.setBlendMode(ToSk(blend_mode_));
+    if (shader_) {
+      paint.setShader(shader_->skia_object());
+    }
+    context.leaf_nodes_canvas->translate(mask_rect_.left(), mask_rect_.top());
+    context.leaf_nodes_canvas->drawRect(shader_rect, paint);
   }
-  context.leaf_nodes_canvas->translate(mask_rect_.left(), mask_rect_.top());
-  context.leaf_nodes_canvas->drawRect(
-      SkRect::MakeWH(mask_rect_.width(), mask_rect_.height()), paint);
 }
 
 }  // namespace flutter
diff --git a/flow/layers/shader_mask_layer_unittests.cc b/flow/layers/shader_mask_layer_unittests.cc
index 5f6c38b..c4f863a 100644
--- a/flow/layers/shader_mask_layer_unittests.cc
+++ b/flow/layers/shader_mask_layer_unittests.cc
@@ -373,17 +373,18 @@
     {
       expected_builder.translate(offset.fX, offset.fY);
       /* ShaderMaskLayer::Paint() */ {
-        expected_builder.setColor(opacity_alpha << 24);
-        expected_builder.saveLayer(&child_path.getBounds(), true);
+        DlPaint sl_paint;
+        sl_paint.setColor(opacity_alpha << 24);
+        expected_builder.saveLayer(&child_path.getBounds(), &sl_paint);
         {
           /* child layer paint */ {
-            expected_builder.setColor(0xFF000000);
-            expected_builder.drawPath(child_path);
+            expected_builder.drawPath(child_path,
+                                      DlPaint().setColor(0xFF000000));
           }
           expected_builder.translate(mask_rect.fLeft, mask_rect.fTop);
-          expected_builder.setBlendMode(DlBlendMode::kSrc);
           expected_builder.drawRect(
-              SkRect::MakeWH(mask_rect.width(), mask_rect.height()));
+              SkRect::MakeWH(mask_rect.width(), mask_rect.height()),
+              DlPaint().setBlendMode(DlBlendMode::kSrc));
         }
         expected_builder.restore();
       }