[Impeller] Convert SaveLayer alpha playgrounds into goldens (#41095)

[Impeller] Convert SaveLayer alpha playgrounds into goldens
diff --git a/impeller/aiks/aiks_unittests.cc b/impeller/aiks/aiks_unittests.cc
index af8255d..0211b27 100644
--- a/impeller/aiks/aiks_unittests.cc
+++ b/impeller/aiks/aiks_unittests.cc
@@ -1980,5 +1980,121 @@
   }
 IMPELLER_FOR_EACH_BLEND_MODE(BLEND_MODE_TEST)
 
+TEST_P(AiksTest, TranslucentSaveLayerDrawsCorrectly) {
+  Canvas canvas;
+
+  canvas.DrawRect(Rect::MakeXYWH(100, 100, 300, 300), {.color = Color::Blue()});
+
+  canvas.SaveLayer({.color = Color::Black().WithAlpha(0.5)});
+  canvas.DrawRect(Rect::MakeXYWH(100, 500, 300, 300), {.color = Color::Blue()});
+  canvas.Restore();
+
+  ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture()));
+}
+
+TEST_P(AiksTest, TranslucentSaveLayerWithBlendColorFilterDrawsCorrectly) {
+  Canvas canvas;
+
+  canvas.DrawRect(Rect::MakeXYWH(100, 100, 300, 300), {.color = Color::Blue()});
+
+  canvas.SaveLayer({
+      .color = Color::Black().WithAlpha(0.5),
+      .color_filter =
+          [](FilterInput::Ref input) {
+            return ColorFilterContents::MakeBlend(
+                BlendMode::kDestinationOver, {std::move(input)}, Color::Red());
+          },
+  });
+  canvas.DrawRect(Rect::MakeXYWH(100, 500, 300, 300), {.color = Color::Blue()});
+  canvas.Restore();
+
+  ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture()));
+}
+
+TEST_P(AiksTest, TranslucentSaveLayerWithBlendImageFilterAndDrawsCorrectly) {
+  Canvas canvas;
+
+  canvas.DrawRect(Rect::MakeXYWH(100, 100, 300, 300), {.color = Color::Blue()});
+
+  canvas.SaveLayer({
+      .color = Color::Black().WithAlpha(0.5),
+      .image_filter =
+          [](FilterInput::Ref input, const Matrix& effect_transform,
+             bool is_subpass) {
+            return ColorFilterContents::MakeBlend(
+                BlendMode::kDestinationOver, {std::move(input)}, Color::Red());
+          },
+  });
+
+  canvas.DrawRect(Rect::MakeXYWH(100, 500, 300, 300), {.color = Color::Blue()});
+  canvas.Restore();
+
+  ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture()));
+}
+
+TEST_P(AiksTest, TranslucentSaveLayerImageDrawsCorrectly) {
+  Canvas canvas;
+
+  auto image = std::make_shared<Image>(CreateTextureForFixture("airplane.jpg"));
+  canvas.DrawImage(image, {100, 100}, {});
+
+  canvas.SaveLayer({.color = Color::Black().WithAlpha(0.5)});
+  canvas.DrawImage(image, {100, 500}, {});
+  canvas.Restore();
+
+  ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture()));
+}
+
+TEST_P(AiksTest, TranslucentSaveLayerWithColorMatrixColorFilterDrawsCorrectly) {
+  Canvas canvas;
+
+  auto image = std::make_shared<Image>(CreateTextureForFixture("airplane.jpg"));
+  canvas.DrawImage(image, {100, 100}, {});
+
+  canvas.SaveLayer({
+      .color = Color::Black().WithAlpha(0.5),
+      .color_filter =
+          [](FilterInput::Ref input) {
+            return ColorFilterContents::MakeColorMatrix({std::move(input)},
+                                                        {.array = {
+                                                             1, 0, 0, 0, 0,  //
+                                                             0, 1, 0, 0, 0,  //
+                                                             0, 0, 1, 0, 0,  //
+                                                             0, 0, 0, 2, 0   //
+                                                         }});
+          },
+  });
+  canvas.DrawImage(image, {100, 500}, {});
+  canvas.Restore();
+
+  ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture()));
+}
+
+TEST_P(AiksTest, TranslucentSaveLayerWithColorMatrixImageFilterDrawsCorrectly) {
+  Canvas canvas;
+
+  auto image = std::make_shared<Image>(CreateTextureForFixture("airplane.jpg"));
+  canvas.DrawImage(image, {100, 100}, {});
+
+  canvas.SaveLayer({
+      .color = Color::Black().WithAlpha(0.5),
+      .image_filter =
+          [](FilterInput::Ref input, const Matrix& effect_transform,
+             bool is_subpass) {
+            return ColorFilterContents::MakeColorMatrix({std::move(input)},
+                                                        {.array = {
+                                                             1, 0, 0, 0, 0,  //
+                                                             0, 1, 0, 0, 0,  //
+                                                             0, 0, 1, 0, 0,  //
+                                                             0, 0, 0, 2, 0   //
+                                                         }});
+          },
+  });
+  canvas.DrawImage(image, {100, 500}, {});
+  canvas.Restore();
+
+  ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture()));
+}
+
 }  // namespace testing
 }  // namespace impeller
diff --git a/impeller/display_list/display_list_unittests.cc b/impeller/display_list/display_list_unittests.cc
index ca2930e..4512eaa 100644
--- a/impeller/display_list/display_list_unittests.cc
+++ b/impeller/display_list/display_list_unittests.cc
@@ -573,111 +573,6 @@
   ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
 }
 
-TEST_P(DisplayListTest, SaveLayerWithColorMatrixFiltersAndAlphaDrawCorrectly) {
-  auto texture = CreateTextureForFixture("boston.jpg");
-  enum class Type { kUseAsImageFilter, kUseAsColorFilter, kDisableFilter };
-  auto callback = [&]() {
-    static float alpha = 0.5;
-    static int selected_type = 0;
-    const char* names[] = {"Use as image filter", "Use as color filter",
-                           "Disable filter"};
-
-    static float color_matrix[20] = {
-        1, 0, 0, 0, 0,  //
-        0, 1, 0, 0, 0,  //
-        0, 0, 1, 0, 0,  //
-        0, 0, 0, 2, 0,  //
-    };
-
-    ImGui::Begin("Controls", nullptr, ImGuiWindowFlags_AlwaysAutoResize);
-    ImGui::SliderFloat("Alpha", &alpha, 0, 1);
-
-    ImGui::Combo("Type", &selected_type, names, sizeof(names) / sizeof(char*));
-    std::string label = "##1";
-    for (int i = 0; i < 20; i += 5) {
-      ImGui::InputScalarN(label.c_str(), ImGuiDataType_Float,
-                          &(color_matrix[i]), 5, nullptr, nullptr, "%.2f", 0);
-      label[2]++;
-    }
-    ImGui::End();
-
-    flutter::DisplayListBuilder builder;
-    flutter::DlPaint save_paint;
-    save_paint.setAlpha(static_cast<uint8_t>(255 * alpha));
-    auto color_filter =
-        std::make_shared<flutter::DlMatrixColorFilter>(color_matrix);
-    Type type = static_cast<Type>(selected_type);
-    switch (type) {
-      case Type::kUseAsImageFilter: {
-        auto image_filter =
-            std::make_shared<flutter::DlColorFilterImageFilter>(color_filter);
-        save_paint.setImageFilter(image_filter);
-        break;
-      }
-      case Type::kUseAsColorFilter: {
-        save_paint.setColorFilter(color_filter);
-        break;
-      }
-      case Type::kDisableFilter:
-        break;
-    }
-    builder.SaveLayer(nullptr, &save_paint);
-    flutter::DlPaint draw_paint;
-    builder.DrawImage(DlImageImpeller::Make(texture), SkPoint::Make(100, 100),
-                      flutter::DlImageSampling::kNearestNeighbor, &draw_paint);
-    builder.Restore();
-    return builder.Build();
-  };
-
-  ASSERT_TRUE(OpenPlaygroundHere(callback));
-}
-
-TEST_P(DisplayListTest, SaveLayerWithBlendFiltersAndAlphaDrawCorrectly) {
-  auto texture = CreateTextureForFixture("boston.jpg");
-  enum class Type { kUseAsImageFilter, kUseAsColorFilter, kDisableFilter };
-  auto callback = [&]() {
-    static float alpha = 0.5;
-    static int selected_type = 0;
-    const char* names[] = {"Use as image filter", "Use as color filter",
-                           "Disable filter"};
-
-    ImGui::Begin("Controls", nullptr, ImGuiWindowFlags_AlwaysAutoResize);
-    ImGui::SliderFloat("Alpha", &alpha, 0, 1);
-
-    ImGui::Combo("Type", &selected_type, names, sizeof(names) / sizeof(char*));
-    ImGui::End();
-
-    flutter::DisplayListBuilder builder;
-    flutter::DlPaint save_paint;
-    save_paint.setAlpha(static_cast<uint8_t>(255 * alpha));
-    auto color_filter = std::make_shared<flutter::DlBlendColorFilter>(
-        flutter::DlColor::kRed(), flutter::DlBlendMode::kDstOver);
-    Type type = static_cast<Type>(selected_type);
-    switch (type) {
-      case Type::kUseAsImageFilter: {
-        auto image_filter =
-            std::make_shared<flutter::DlColorFilterImageFilter>(color_filter);
-        save_paint.setImageFilter(image_filter);
-        break;
-      }
-      case Type::kUseAsColorFilter: {
-        save_paint.setColorFilter(color_filter);
-        break;
-      }
-      case Type::kDisableFilter:
-        break;
-    }
-    builder.SaveLayer(nullptr, &save_paint);
-    flutter::DlPaint draw_paint;
-    draw_paint.setColor(flutter::DlColor::kBlue());
-    builder.DrawRect(SkRect::MakeLTRB(100, 100, 400, 400), draw_paint);
-    builder.Restore();
-    return builder.Build();
-  };
-
-  ASSERT_TRUE(OpenPlaygroundHere(callback));
-}
-
 TEST_P(DisplayListTest, CanDrawBackdropFilter) {
   auto texture = CreateTextureForFixture("embarcadero.jpg");