From 2587e1bb3910c6490726abeb6c3834f07db6cf71 Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Thu, 18 Feb 2021 11:25:17 -0800 Subject: [PATCH 1/8] backdrop filter layer should report cull_rect as its paint bounds --- flow/layers/backdrop_filter_layer.cc | 5 ++- .../layers/backdrop_filter_layer_unittests.cc | 33 ++++++++++++------- flow/layers/clip_rect_layer.cc | 4 ++- flow/layers/clip_rect_layer_unittests.cc | 2 +- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/flow/layers/backdrop_filter_layer.cc b/flow/layers/backdrop_filter_layer.cc index 9dfd84105b69e..2e267a40531c5 100644 --- a/flow/layers/backdrop_filter_layer.cc +++ b/flow/layers/backdrop_filter_layer.cc @@ -47,7 +47,10 @@ void BackdropFilterLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { Layer::AutoPrerollSaveLayerState save = Layer::AutoPrerollSaveLayerState::Create(context, true, bool(filter_)); - ContainerLayer::Preroll(context, matrix); + SkRect child_paint_bounds = SkRect::MakeEmpty(); + PrerollChildren(context, matrix, &child_paint_bounds); + child_paint_bounds.join(context->cull_rect); + set_paint_bounds(child_paint_bounds); } void BackdropFilterLayer::Paint(PaintContext& context) const { diff --git a/flow/layers/backdrop_filter_layer_unittests.cc b/flow/layers/backdrop_filter_layer_unittests.cc index 53cb5d151c809..c536c017391c4 100644 --- a/flow/layers/backdrop_filter_layer_unittests.cc +++ b/flow/layers/backdrop_filter_layer_unittests.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "flutter/flow/layers/backdrop_filter_layer.h" +#include "flutter/flow/layers/clip_rect_layer.h" #include "flutter/flow/layers/clip_rect_layer.h" #include "flutter/flow/layers/transform_layer.h" @@ -22,8 +23,10 @@ using BackdropFilterLayerTest = LayerTest; #ifndef NDEBUG TEST_F(BackdropFilterLayerTest, PaintingEmptyLayerDies) { auto layer = std::make_shared(sk_sp()); + auto parent = std::make_shared(kEmptyRect, Clip::hardEdge); + parent->Add(layer); - layer->Preroll(preroll_context(), SkMatrix()); + parent->Preroll(preroll_context(), SkMatrix()); EXPECT_EQ(layer->paint_bounds(), kEmptyRect); EXPECT_FALSE(layer->needs_painting(paint_context())); EXPECT_FALSE(layer->needs_system_composite()); @@ -53,8 +56,10 @@ TEST_F(BackdropFilterLayerTest, EmptyFilter) { auto mock_layer = std::make_shared(child_path, child_paint); auto layer = std::make_shared(nullptr); layer->Add(mock_layer); + auto parent = std::make_shared(child_bounds, Clip::hardEdge); + parent->Add(layer); - layer->Preroll(preroll_context(), initial_transform); + parent->Preroll(preroll_context(), initial_transform); EXPECT_EQ(layer->paint_bounds(), child_bounds); EXPECT_TRUE(layer->needs_painting(paint_context())); EXPECT_EQ(mock_layer->parent_matrix(), initial_transform); @@ -79,8 +84,10 @@ TEST_F(BackdropFilterLayerTest, SimpleFilter) { auto mock_layer = std::make_shared(child_path, child_paint); auto layer = std::make_shared(layer_filter); layer->Add(mock_layer); + auto parent = std::make_shared(child_bounds, Clip::hardEdge); + parent->Add(layer); - layer->Preroll(preroll_context(), initial_transform); + parent->Preroll(preroll_context(), initial_transform); EXPECT_EQ(layer->paint_bounds(), child_bounds); EXPECT_TRUE(layer->needs_painting(paint_context())); EXPECT_EQ(mock_layer->parent_matrix(), initial_transform); @@ -104,16 +111,18 @@ TEST_F(BackdropFilterLayerTest, MultipleChildren) { SkPath().addRect(child_bounds.makeOffset(3.0f, 0.0f)); const SkPaint child_paint1 = SkPaint(SkColors::kYellow); const SkPaint child_paint2 = SkPaint(SkColors::kCyan); + SkRect children_bounds = child_path1.getBounds(); + children_bounds.join(child_path2.getBounds()); auto layer_filter = SkImageFilters::Paint(SkPaint(SkColors::kMagenta)); auto mock_layer1 = std::make_shared(child_path1, child_paint1); auto mock_layer2 = std::make_shared(child_path2, child_paint2); auto layer = std::make_shared(layer_filter); layer->Add(mock_layer1); layer->Add(mock_layer2); + auto parent = std::make_shared(children_bounds, Clip::hardEdge); + parent->Add(layer); - SkRect children_bounds = child_path1.getBounds(); - children_bounds.join(child_path2.getBounds()); - layer->Preroll(preroll_context(), initial_transform); + parent->Preroll(preroll_context(), initial_transform); EXPECT_EQ(mock_layer1->paint_bounds(), child_path1.getBounds()); EXPECT_EQ(mock_layer2->paint_bounds(), child_path2.getBounds()); EXPECT_EQ(layer->paint_bounds(), children_bounds); @@ -144,6 +153,8 @@ TEST_F(BackdropFilterLayerTest, Nested) { SkPath().addRect(child_bounds.makeOffset(3.0f, 0.0f)); const SkPaint child_paint1 = SkPaint(SkColors::kYellow); const SkPaint child_paint2 = SkPaint(SkColors::kCyan); + SkRect children_bounds = child_path1.getBounds(); + children_bounds.join(child_path2.getBounds()); auto layer_filter1 = SkImageFilters::Paint(SkPaint(SkColors::kMagenta)); auto layer_filter2 = SkImageFilters::Paint(SkPaint(SkColors::kDkGray)); auto mock_layer1 = std::make_shared(child_path1, child_paint1); @@ -153,14 +164,14 @@ TEST_F(BackdropFilterLayerTest, Nested) { layer2->Add(mock_layer2); layer1->Add(mock_layer1); layer1->Add(layer2); + auto parent = std::make_shared(children_bounds, Clip::hardEdge); + parent->Add(layer1); - SkRect children_bounds = child_path1.getBounds(); - children_bounds.join(child_path2.getBounds()); - layer1->Preroll(preroll_context(), initial_transform); + parent->Preroll(preroll_context(), initial_transform); EXPECT_EQ(mock_layer1->paint_bounds(), child_path1.getBounds()); EXPECT_EQ(mock_layer2->paint_bounds(), child_path2.getBounds()); EXPECT_EQ(layer1->paint_bounds(), children_bounds); - EXPECT_EQ(layer2->paint_bounds(), mock_layer2->paint_bounds()); + EXPECT_EQ(layer2->paint_bounds(), children_bounds); EXPECT_TRUE(mock_layer1->needs_painting(paint_context())); EXPECT_TRUE(mock_layer2->needs_painting(paint_context())); EXPECT_TRUE(layer1->needs_painting(paint_context())); @@ -177,7 +188,7 @@ TEST_F(BackdropFilterLayerTest, Nested) { MockCanvas::DrawCall{ 1, MockCanvas::DrawPathData{child_path1, child_paint1}}, MockCanvas::DrawCall{ - 1, MockCanvas::SaveLayerData{child_path2.getBounds(), + 1, MockCanvas::SaveLayerData{children_bounds, SkPaint(), layer_filter2, 2}}, MockCanvas::DrawCall{ 2, MockCanvas::DrawPathData{child_path2, child_paint2}}, diff --git a/flow/layers/clip_rect_layer.cc b/flow/layers/clip_rect_layer.cc index 078a9d6a0d855..a230b38fa0893 100644 --- a/flow/layers/clip_rect_layer.cc +++ b/flow/layers/clip_rect_layer.cc @@ -36,7 +36,9 @@ void ClipRectLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { TRACE_EVENT0("flutter", "ClipRectLayer::Preroll"); SkRect previous_cull_rect = context->cull_rect; - context->cull_rect.intersect(clip_rect_); + if (!context->cull_rect.intersect(clip_rect_)) { + context->cull_rect.setEmpty(); + } Layer::AutoPrerollSaveLayerState save = Layer::AutoPrerollSaveLayerState::Create(context, UsesSaveLayer()); context->mutators_stack.PushClipRect(clip_rect_); diff --git a/flow/layers/clip_rect_layer_unittests.cc b/flow/layers/clip_rect_layer_unittests.cc index eb938b0522aa2..8a4a034f9aaa4 100644 --- a/flow/layers/clip_rect_layer_unittests.cc +++ b/flow/layers/clip_rect_layer_unittests.cc @@ -63,7 +63,7 @@ TEST_F(ClipRectLayerTest, PaintingCulledLayerDies) { EXPECT_EQ(layer->paint_bounds(), child_bounds); EXPECT_TRUE(mock_layer->needs_painting(paint_context())); EXPECT_TRUE(layer->needs_painting(paint_context())); - EXPECT_EQ(mock_layer->parent_cull_rect(), distant_bounds); + EXPECT_EQ(mock_layer->parent_cull_rect(), SkRect::MakeEmpty()); EXPECT_EQ(mock_layer->parent_matrix(), initial_matrix); EXPECT_EQ(mock_layer->parent_mutators(), std::vector({Mutator(layer_bounds)})); From 522b6bb549af11db00f745afb7f9c1c6195e848a Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Thu, 18 Feb 2021 14:32:53 -0800 Subject: [PATCH 2/8] make sure clip rrect and path empty cull rect as appropriate --- flow/layers/clip_path_layer.cc | 4 +++- flow/layers/clip_path_layer_unittests.cc | 2 +- flow/layers/clip_rect_layer_unittests.cc | 2 +- flow/layers/clip_rrect_layer.cc | 4 +++- flow/layers/clip_rrect_layer_unittests.cc | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/flow/layers/clip_path_layer.cc b/flow/layers/clip_path_layer.cc index 79488dbf34d5a..99a675fc35703 100644 --- a/flow/layers/clip_path_layer.cc +++ b/flow/layers/clip_path_layer.cc @@ -41,7 +41,9 @@ void ClipPathLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { SkRect previous_cull_rect = context->cull_rect; SkRect clip_path_bounds = clip_path_.getBounds(); - context->cull_rect.intersect(clip_path_bounds); + if (!context->cull_rect.intersect(clip_path_bounds)) { + context->cull_rect.setEmpty(); + } Layer::AutoPrerollSaveLayerState save = Layer::AutoPrerollSaveLayerState::Create(context, UsesSaveLayer()); context->mutators_stack.PushClipPath(clip_path_); diff --git a/flow/layers/clip_path_layer_unittests.cc b/flow/layers/clip_path_layer_unittests.cc index 4d1d0a9c48626..68ac35383292d 100644 --- a/flow/layers/clip_path_layer_unittests.cc +++ b/flow/layers/clip_path_layer_unittests.cc @@ -65,7 +65,7 @@ TEST_F(ClipPathLayerTest, PaintingCulledLayerDies) { EXPECT_EQ(layer->paint_bounds(), child_bounds); EXPECT_TRUE(mock_layer->needs_painting(paint_context())); EXPECT_TRUE(layer->needs_painting(paint_context())); - EXPECT_EQ(mock_layer->parent_cull_rect(), distant_bounds); + EXPECT_EQ(mock_layer->parent_cull_rect(), kEmptyRect); EXPECT_EQ(mock_layer->parent_matrix(), initial_matrix); EXPECT_EQ(mock_layer->parent_mutators(), std::vector({Mutator(layer_path)})); diff --git a/flow/layers/clip_rect_layer_unittests.cc b/flow/layers/clip_rect_layer_unittests.cc index 8a4a034f9aaa4..ae5dfec16f23e 100644 --- a/flow/layers/clip_rect_layer_unittests.cc +++ b/flow/layers/clip_rect_layer_unittests.cc @@ -63,7 +63,7 @@ TEST_F(ClipRectLayerTest, PaintingCulledLayerDies) { EXPECT_EQ(layer->paint_bounds(), child_bounds); EXPECT_TRUE(mock_layer->needs_painting(paint_context())); EXPECT_TRUE(layer->needs_painting(paint_context())); - EXPECT_EQ(mock_layer->parent_cull_rect(), SkRect::MakeEmpty()); + EXPECT_EQ(mock_layer->parent_cull_rect(), kEmptyRect); EXPECT_EQ(mock_layer->parent_matrix(), initial_matrix); EXPECT_EQ(mock_layer->parent_mutators(), std::vector({Mutator(layer_bounds)})); diff --git a/flow/layers/clip_rrect_layer.cc b/flow/layers/clip_rrect_layer.cc index 2fb346a78fbb9..e5abc5fc32984 100644 --- a/flow/layers/clip_rrect_layer.cc +++ b/flow/layers/clip_rrect_layer.cc @@ -37,7 +37,9 @@ void ClipRRectLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { SkRect previous_cull_rect = context->cull_rect; SkRect clip_rrect_bounds = clip_rrect_.getBounds(); - context->cull_rect.intersect(clip_rrect_bounds); + if (!context->cull_rect.intersect(clip_rrect_bounds)) { + context->cull_rect.setEmpty(); + } Layer::AutoPrerollSaveLayerState save = Layer::AutoPrerollSaveLayerState::Create(context, UsesSaveLayer()); context->mutators_stack.PushClipRRect(clip_rrect_); diff --git a/flow/layers/clip_rrect_layer_unittests.cc b/flow/layers/clip_rrect_layer_unittests.cc index 485d616679f59..8484061419591 100644 --- a/flow/layers/clip_rrect_layer_unittests.cc +++ b/flow/layers/clip_rrect_layer_unittests.cc @@ -68,7 +68,7 @@ TEST_F(ClipRRectLayerTest, PaintingCulledLayerDies) { EXPECT_EQ(layer->paint_bounds(), child_bounds); EXPECT_TRUE(mock_layer->needs_painting(paint_context())); EXPECT_TRUE(layer->needs_painting(paint_context())); - EXPECT_EQ(mock_layer->parent_cull_rect(), distant_bounds); + EXPECT_EQ(mock_layer->parent_cull_rect(), kEmptyRect); EXPECT_EQ(mock_layer->parent_matrix(), initial_matrix); EXPECT_EQ(mock_layer->parent_mutators(), std::vector({Mutator(layer_rrect)})); From 2bfab4ee48ecc2e74d8448b135caf5007c53f342 Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Thu, 18 Feb 2021 14:47:39 -0800 Subject: [PATCH 3/8] formatting --- .../layers/backdrop_filter_layer_unittests.cc | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/flow/layers/backdrop_filter_layer_unittests.cc b/flow/layers/backdrop_filter_layer_unittests.cc index c536c017391c4..0312a604d53d0 100644 --- a/flow/layers/backdrop_filter_layer_unittests.cc +++ b/flow/layers/backdrop_filter_layer_unittests.cc @@ -119,7 +119,8 @@ TEST_F(BackdropFilterLayerTest, MultipleChildren) { auto layer = std::make_shared(layer_filter); layer->Add(mock_layer1); layer->Add(mock_layer2); - auto parent = std::make_shared(children_bounds, Clip::hardEdge); + auto parent = + std::make_shared(children_bounds, Clip::hardEdge); parent->Add(layer); parent->Preroll(preroll_context(), initial_transform); @@ -164,7 +165,8 @@ TEST_F(BackdropFilterLayerTest, Nested) { layer2->Add(mock_layer2); layer1->Add(mock_layer1); layer1->Add(layer2); - auto parent = std::make_shared(children_bounds, Clip::hardEdge); + auto parent = + std::make_shared(children_bounds, Clip::hardEdge); parent->Add(layer1); parent->Preroll(preroll_context(), initial_transform); @@ -180,20 +182,20 @@ TEST_F(BackdropFilterLayerTest, Nested) { EXPECT_EQ(mock_layer2->parent_matrix(), initial_transform); layer1->Paint(paint_context()); - EXPECT_EQ(mock_canvas().draw_calls(), - std::vector( - {MockCanvas::DrawCall{ - 0, MockCanvas::SaveLayerData{children_bounds, SkPaint(), - layer_filter1, 1}}, - MockCanvas::DrawCall{ - 1, MockCanvas::DrawPathData{child_path1, child_paint1}}, - MockCanvas::DrawCall{ - 1, MockCanvas::SaveLayerData{children_bounds, - SkPaint(), layer_filter2, 2}}, - MockCanvas::DrawCall{ - 2, MockCanvas::DrawPathData{child_path2, child_paint2}}, - MockCanvas::DrawCall{2, MockCanvas::RestoreData{1}}, - MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}}})); + EXPECT_EQ( + mock_canvas().draw_calls(), + std::vector({MockCanvas::DrawCall{ + 0, MockCanvas::SaveLayerData{children_bounds, SkPaint(), + layer_filter1, 1}}, + MockCanvas::DrawCall{ + 1, MockCanvas::DrawPathData{child_path1, child_paint1}}, + MockCanvas::DrawCall{ + 1, MockCanvas::SaveLayerData{children_bounds, SkPaint(), + layer_filter2, 2}}, + MockCanvas::DrawCall{ + 2, MockCanvas::DrawPathData{child_path2, child_paint2}}, + MockCanvas::DrawCall{2, MockCanvas::RestoreData{1}}, + MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}}})); } TEST_F(BackdropFilterLayerTest, Readback) { From 9b0beaafc084bd45dbdca517bf52b75e6a2b7e3a Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Fri, 19 Feb 2021 09:42:29 -0800 Subject: [PATCH 4/8] implement new behavior on canvaskit back end --- .../lib/src/engine/canvaskit/layer.dart | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib/web_ui/lib/src/engine/canvaskit/layer.dart b/lib/web_ui/lib/src/engine/canvaskit/layer.dart index edd4da3220788..6650ab6b3c06e 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/layer.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/layer.dart @@ -41,6 +41,28 @@ class PrerollContext { final MutatorsStack mutatorsStack = MutatorsStack(); PrerollContext(this.rasterCache, this.viewEmbedder); + + ui.Rect get cullRect { + ui.Rect cullRect = ui.Rect.largest; + for (Mutator m in mutatorsStack) { + ui.Rect clipRect; + switch (m.type) { + case MutatorType.clipRect: + clipRect = m.rect!; + break; + case MutatorType.clipRRect: + clipRect = m.rrect!.outerRect; + break; + case MutatorType.clipPath: + clipRect = m.path!.getBounds(); + break; + default: + continue; + } + cullRect = cullRect.intersect(clipRect); + } + return cullRect; + } } /// A context shared by all layers during the paint pass. @@ -133,6 +155,12 @@ class BackdropFilterEngineLayer extends ContainerLayer implements ui.BackdropFil BackdropFilterEngineLayer(this._filter); + @override + void preroll(PrerollContext preRollContext, Matrix4 matrix) { + ui.Rect childBounds = prerollChildren(preRollContext, matrix); + paintBounds = childBounds.expandToInclude(preRollContext.cullRect); + } + @override void paint(PaintContext context) { context.internalNodesCanvas.saveLayerWithFilter(paintBounds, _filter); From 7a8f06248fdb866ac7fbff87f767af2eba684ab3 Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Fri, 19 Feb 2021 15:38:39 -0800 Subject: [PATCH 5/8] add golden web test for new behavior --- .../engine/backdrop_filter_golden_test.dart | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart b/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart index b0321ca43742b..41f6cd56fbc7e 100644 --- a/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart +++ b/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart @@ -114,6 +114,38 @@ void testMain() async { await matchGoldenFile('backdrop_filter_clip_moved.png', region: region, maxDiffRatePercent: 0.8); }); + + // The blur filter should be applied to the background inside the clip even + // though there are no children of the backdrop filter. + test('Background should blur even if child does not paint', () async { + final Rect region = Rect.fromLTWH(0, 0, 190, 130); + + final SurfaceSceneBuilder builder = SurfaceSceneBuilder(); + final Picture backgroundPicture = _drawBackground(region); + builder.addPicture(Offset.zero, backgroundPicture); + + builder.pushClipRect( + const Rect.fromLTRB(10, 10, 180, 120), + ); + final Picture circles1 = _drawTestPictureWithCircles(region, 30, 30); + builder.addPicture(Offset.zero, circles1); + + builder.pushClipRect( + const Rect.fromLTRB(60, 10, 180, 120), + ); + builder.pushBackdropFilter(ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), + oldLayer: null); + builder.pop(); + builder.pop(); + builder.pop(); + + html.document.body.append(builder + .build() + .webOnlyRootElement); + + await matchGoldenFile('backdrop_filter_no_child_rendering.png', region: region, + maxDiffRatePercent: 0.8); + }); } Picture _drawTestPictureWithCircles(Rect region, double offsetX, double offsetY) { From 2dfb823e57be761cbc7c79b68bf6878e7a43ba80 Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Fri, 19 Feb 2021 17:20:13 -0800 Subject: [PATCH 6/8] write new goldens - to be reverted after capturing them from the pre-submit logs --- .../test/golden_tests/engine/backdrop_filter_golden_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart b/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart index 41f6cd56fbc7e..1eb15ba8fd811 100644 --- a/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart +++ b/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart @@ -144,7 +144,7 @@ void testMain() async { .webOnlyRootElement); await matchGoldenFile('backdrop_filter_no_child_rendering.png', region: region, - maxDiffRatePercent: 0.8); + maxDiffRatePercent: 0.8, write: true); }); } From c0adf9a98c58baf645875a00045feb1305266fde Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Tue, 23 Feb 2021 13:21:23 -0800 Subject: [PATCH 7/8] remove write:true flag from new golden tests --- .../test/golden_tests/engine/backdrop_filter_golden_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart b/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart index 1eb15ba8fd811..41f6cd56fbc7e 100644 --- a/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart +++ b/lib/web_ui/test/golden_tests/engine/backdrop_filter_golden_test.dart @@ -144,7 +144,7 @@ void testMain() async { .webOnlyRootElement); await matchGoldenFile('backdrop_filter_no_child_rendering.png', region: region, - maxDiffRatePercent: 0.8, write: true); + maxDiffRatePercent: 0.8); }); } From 2c711b409325361db4881fda838c9669353ab3e0 Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Tue, 23 Feb 2021 17:01:23 -0800 Subject: [PATCH 8/8] update goldens revision for new test output --- lib/web_ui/dev/goldens_lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web_ui/dev/goldens_lock.yaml b/lib/web_ui/dev/goldens_lock.yaml index 1ef753c7470ca..60fb77ce695d6 100644 --- a/lib/web_ui/dev/goldens_lock.yaml +++ b/lib/web_ui/dev/goldens_lock.yaml @@ -1,2 +1,2 @@ repository: https://github.com/flutter/goldens.git -revision: cb8e029f9a5ebe0608f78fcdf20754f6ef261c81 +revision: 041056fc3ae057574586fa6f69b2cc9465c4a5bf