33// found in the LICENSE file.
44
55#include " flutter/flow/layers/backdrop_filter_layer.h"
6+ #include " flutter/flow/layers/clip_rect_layer.h"
67
78#include " flutter/flow/layers/clip_rect_layer.h"
89#include " flutter/flow/layers/transform_layer.h"
@@ -22,8 +23,10 @@ using BackdropFilterLayerTest = LayerTest;
2223#ifndef NDEBUG
2324TEST_F (BackdropFilterLayerTest, PaintingEmptyLayerDies) {
2425 auto layer = std::make_shared<BackdropFilterLayer>(sk_sp<SkImageFilter>());
26+ auto parent = std::make_shared<ClipRectLayer>(kEmptyRect , Clip::hardEdge);
27+ parent->Add (layer);
2528
26- layer ->Preroll (preroll_context (), SkMatrix ());
29+ parent ->Preroll (preroll_context (), SkMatrix ());
2730 EXPECT_EQ (layer->paint_bounds (), kEmptyRect );
2831 EXPECT_FALSE (layer->needs_painting (paint_context ()));
2932 EXPECT_FALSE (layer->needs_system_composite ());
@@ -53,8 +56,10 @@ TEST_F(BackdropFilterLayerTest, EmptyFilter) {
5356 auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint);
5457 auto layer = std::make_shared<BackdropFilterLayer>(nullptr );
5558 layer->Add (mock_layer);
59+ auto parent = std::make_shared<ClipRectLayer>(child_bounds, Clip::hardEdge);
60+ parent->Add (layer);
5661
57- layer ->Preroll (preroll_context (), initial_transform);
62+ parent ->Preroll (preroll_context (), initial_transform);
5863 EXPECT_EQ (layer->paint_bounds (), child_bounds);
5964 EXPECT_TRUE (layer->needs_painting (paint_context ()));
6065 EXPECT_EQ (mock_layer->parent_matrix (), initial_transform);
@@ -79,8 +84,10 @@ TEST_F(BackdropFilterLayerTest, SimpleFilter) {
7984 auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint);
8085 auto layer = std::make_shared<BackdropFilterLayer>(layer_filter);
8186 layer->Add (mock_layer);
87+ auto parent = std::make_shared<ClipRectLayer>(child_bounds, Clip::hardEdge);
88+ parent->Add (layer);
8289
83- layer ->Preroll (preroll_context (), initial_transform);
90+ parent ->Preroll (preroll_context (), initial_transform);
8491 EXPECT_EQ (layer->paint_bounds (), child_bounds);
8592 EXPECT_TRUE (layer->needs_painting (paint_context ()));
8693 EXPECT_EQ (mock_layer->parent_matrix (), initial_transform);
@@ -104,16 +111,19 @@ TEST_F(BackdropFilterLayerTest, MultipleChildren) {
104111 SkPath ().addRect (child_bounds.makeOffset (3 .0f , 0 .0f ));
105112 const SkPaint child_paint1 = SkPaint (SkColors::kYellow );
106113 const SkPaint child_paint2 = SkPaint (SkColors::kCyan );
114+ SkRect children_bounds = child_path1.getBounds ();
115+ children_bounds.join (child_path2.getBounds ());
107116 auto layer_filter = SkImageFilters::Paint (SkPaint (SkColors::kMagenta ));
108117 auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1);
109118 auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2);
110119 auto layer = std::make_shared<BackdropFilterLayer>(layer_filter);
111120 layer->Add (mock_layer1);
112121 layer->Add (mock_layer2);
122+ auto parent =
123+ std::make_shared<ClipRectLayer>(children_bounds, Clip::hardEdge);
124+ parent->Add (layer);
113125
114- SkRect children_bounds = child_path1.getBounds ();
115- children_bounds.join (child_path2.getBounds ());
116- layer->Preroll (preroll_context (), initial_transform);
126+ parent->Preroll (preroll_context (), initial_transform);
117127 EXPECT_EQ (mock_layer1->paint_bounds (), child_path1.getBounds ());
118128 EXPECT_EQ (mock_layer2->paint_bounds (), child_path2.getBounds ());
119129 EXPECT_EQ (layer->paint_bounds (), children_bounds);
@@ -144,6 +154,8 @@ TEST_F(BackdropFilterLayerTest, Nested) {
144154 SkPath ().addRect (child_bounds.makeOffset (3 .0f , 0 .0f ));
145155 const SkPaint child_paint1 = SkPaint (SkColors::kYellow );
146156 const SkPaint child_paint2 = SkPaint (SkColors::kCyan );
157+ SkRect children_bounds = child_path1.getBounds ();
158+ children_bounds.join (child_path2.getBounds ());
147159 auto layer_filter1 = SkImageFilters::Paint (SkPaint (SkColors::kMagenta ));
148160 auto layer_filter2 = SkImageFilters::Paint (SkPaint (SkColors::kDkGray ));
149161 auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1);
@@ -153,14 +165,15 @@ TEST_F(BackdropFilterLayerTest, Nested) {
153165 layer2->Add (mock_layer2);
154166 layer1->Add (mock_layer1);
155167 layer1->Add (layer2);
168+ auto parent =
169+ std::make_shared<ClipRectLayer>(children_bounds, Clip::hardEdge);
170+ parent->Add (layer1);
156171
157- SkRect children_bounds = child_path1.getBounds ();
158- children_bounds.join (child_path2.getBounds ());
159- layer1->Preroll (preroll_context (), initial_transform);
172+ parent->Preroll (preroll_context (), initial_transform);
160173 EXPECT_EQ (mock_layer1->paint_bounds (), child_path1.getBounds ());
161174 EXPECT_EQ (mock_layer2->paint_bounds (), child_path2.getBounds ());
162175 EXPECT_EQ (layer1->paint_bounds (), children_bounds);
163- EXPECT_EQ (layer2->paint_bounds (), mock_layer2-> paint_bounds () );
176+ EXPECT_EQ (layer2->paint_bounds (), children_bounds );
164177 EXPECT_TRUE (mock_layer1->needs_painting (paint_context ()));
165178 EXPECT_TRUE (mock_layer2->needs_painting (paint_context ()));
166179 EXPECT_TRUE (layer1->needs_painting (paint_context ()));
@@ -169,20 +182,20 @@ TEST_F(BackdropFilterLayerTest, Nested) {
169182 EXPECT_EQ (mock_layer2->parent_matrix (), initial_transform);
170183
171184 layer1->Paint (paint_context ());
172- EXPECT_EQ (mock_canvas (). draw_calls (),
173- std::vector (
174- {MockCanvas::DrawCall{
175- 0 , MockCanvas::SaveLayerData{children_bounds, SkPaint (),
176- layer_filter1, 1 }},
177- MockCanvas::DrawCall{
178- 1 , MockCanvas::DrawPathData{child_path1, child_paint1}},
179- MockCanvas::DrawCall{
180- 1 , MockCanvas::SaveLayerData{child_path2. getBounds (),
181- SkPaint (), layer_filter2, 2 }},
182- MockCanvas::DrawCall{
183- 2 , MockCanvas::DrawPathData{child_path2, child_paint2}},
184- MockCanvas::DrawCall{2 , MockCanvas::RestoreData{1 }},
185- MockCanvas::DrawCall{1 , MockCanvas::RestoreData{0 }}}));
185+ EXPECT_EQ (
186+ mock_canvas (). draw_calls (),
187+ std::vector ( {MockCanvas::DrawCall{
188+ 0 , MockCanvas::SaveLayerData{children_bounds, SkPaint (),
189+ layer_filter1, 1 }},
190+ MockCanvas::DrawCall{
191+ 1 , MockCanvas::DrawPathData{child_path1, child_paint1}},
192+ MockCanvas::DrawCall{
193+ 1 , MockCanvas::SaveLayerData{children_bounds, SkPaint (),
194+ layer_filter2, 2 }},
195+ MockCanvas::DrawCall{
196+ 2 , MockCanvas::DrawPathData{child_path2, child_paint2}},
197+ MockCanvas::DrawCall{2 , MockCanvas::RestoreData{1 }},
198+ MockCanvas::DrawCall{1 , MockCanvas::RestoreData{0 }}}));
186199}
187200
188201TEST_F (BackdropFilterLayerTest, Readback) {
0 commit comments