Revert "[Impeller] Avoid inserting additional save layers based on clip configuration. (#43759)" This reverts commit 0ec9cc8997ee0c0b7216707c5e08901212ac0532.
diff --git a/flow/compositor_context.cc b/flow/compositor_context.cc index 2c7593c..446cf96 100644 --- a/flow/compositor_context.cc +++ b/flow/compositor_context.cc
@@ -13,14 +13,13 @@ std::optional<SkRect> FrameDamage::ComputeClipRect( flutter::LayerTree& layer_tree, - bool has_raster_cache, - bool impeller_enabled) { + bool has_raster_cache) { if (layer_tree.root_layer()) { PaintRegionMap empty_paint_region_map; DiffContext context(layer_tree.frame_size(), layer_tree.paint_region_map(), prev_layer_tree_ ? prev_layer_tree_->paint_region_map() : empty_paint_region_map, - has_raster_cache, impeller_enabled); + has_raster_cache); context.PushCullRect(SkRect::MakeIWH(layer_tree.frame_size().width(), layer_tree.frame_size().height())); { @@ -122,8 +121,7 @@ std::optional<SkRect> clip_rect; if (frame_damage) { - clip_rect = frame_damage->ComputeClipRect(layer_tree, !ignore_raster_cache, - !gr_context_); + clip_rect = frame_damage->ComputeClipRect(layer_tree, !ignore_raster_cache); if (aiks_context_ && !ShouldPerformPartialRepaint(clip_rect, layer_tree.frame_size())) {
diff --git a/flow/compositor_context.h b/flow/compositor_context.h index 04bb29a..e458aa6 100644 --- a/flow/compositor_context.h +++ b/flow/compositor_context.h
@@ -84,8 +84,7 @@ // but the paint region of layer_tree will be calculated so that it can be // used for diffing of subsequent frames. std::optional<SkRect> ComputeClipRect(flutter::LayerTree& layer_tree, - bool has_raster_cache, - bool impeller_enabled); + bool has_raster_cache); // See Damage::frame_damage. std::optional<SkIRect> GetFrameDamage() const {
diff --git a/flow/diff_context.cc b/flow/diff_context.cc index 612fe56..160b5c8 100644 --- a/flow/diff_context.cc +++ b/flow/diff_context.cc
@@ -10,15 +10,13 @@ DiffContext::DiffContext(SkISize frame_size, PaintRegionMap& this_frame_paint_region_map, const PaintRegionMap& last_frame_paint_region_map, - bool has_raster_cache, - bool impeller_enabled) + bool has_raster_cache) : clip_tracker_(DisplayListMatrixClipTracker(kGiantRect, SkMatrix::I())), rects_(std::make_shared<std::vector<SkRect>>()), frame_size_(frame_size), this_frame_paint_region_map_(this_frame_paint_region_map), last_frame_paint_region_map_(last_frame_paint_region_map), - has_raster_cache_(has_raster_cache), - impeller_enabled_(impeller_enabled) {} + has_raster_cache_(has_raster_cache) {} void DiffContext::BeginSubtree() { state_stack_.push_back(state_);
diff --git a/flow/diff_context.h b/flow/diff_context.h index 029fb49..e273fdb 100644 --- a/flow/diff_context.h +++ b/flow/diff_context.h
@@ -46,8 +46,7 @@ explicit DiffContext(SkISize frame_size, PaintRegionMap& this_frame_paint_region_map, const PaintRegionMap& last_frame_paint_region_map, - bool has_raster_cache, - bool impeller_enabled); + bool has_raster_cache); // Starts a new subtree. void BeginSubtree(); @@ -162,8 +161,6 @@ // cached. bool has_raster_cache() const { return has_raster_cache_; } - bool impeller_enabled() const { return impeller_enabled_; } - class Statistics { public: // Picture replaced by different picture @@ -248,7 +245,6 @@ PaintRegionMap& this_frame_paint_region_map_; const PaintRegionMap& last_frame_paint_region_map_; bool has_raster_cache_; - bool impeller_enabled_; void AddDamage(const SkRect& rect);
diff --git a/flow/layers/clip_rrect_layer_unittests.cc b/flow/layers/clip_rrect_layer_unittests.cc index 98d6493..1c3672d 100644 --- a/flow/layers/clip_rrect_layer_unittests.cc +++ b/flow/layers/clip_rrect_layer_unittests.cc
@@ -595,51 +595,6 @@ EXPECT_EQ(embedder.painted_views(), std::vector<int64_t>({view_id})); } -TEST_F(ClipRRectLayerTest, AntiAliasWithSaveLayerIgnoresSaveLayerImpeller) { - enable_impeller(); - - auto path1 = SkPath().addRect({10, 10, 30, 30}); - auto mock1 = MockLayer::MakeOpacityCompatible(path1); - auto path2 = SkPath().addRect({20, 20, 40, 40}); - auto mock2 = MockLayer::MakeOpacityCompatible(path2); - auto children_bounds = path1.getBounds(); - children_bounds.join(path2.getBounds()); - SkRect clip_rect = SkRect::MakeWH(500, 500); - SkRRect clip_rrect = SkRRect::MakeRectXY(clip_rect, 20, 20); - auto clip_rrect_layer = std::make_shared<ClipRRectLayer>( - clip_rrect, Clip::antiAliasWithSaveLayer); - clip_rrect_layer->Add(mock1); - clip_rrect_layer->Add(mock2); - - // ClipRectLayer will pass through compatibility from multiple - // non-overlapping compatible children - PrerollContext* context = preroll_context(); - clip_rrect_layer->Preroll(context); - EXPECT_EQ(context->renderable_state_flags, 0); - - DisplayListBuilder expected_builder; - /* OpacityLayer::Paint() */ { - expected_builder.Save(); - { - /* ClipRectLayer::Paint() */ { - expected_builder.Save(); - expected_builder.ClipRRect(clip_rrect, ClipOp::kIntersect, true); - /* child layer1 paint */ { - expected_builder.DrawPath(path1, DlPaint()); - } - /* child layer2 paint */ { // - expected_builder.DrawPath(path2, DlPaint()); - } - // expected_builder.Restore(); - } - } - expected_builder.Restore(); - } - - clip_rrect_layer->Paint(display_list_paint_context()); - EXPECT_TRUE(DisplayListsEQ_Verbose(expected_builder.Build(), display_list())); -} - } // namespace testing } // namespace flutter
diff --git a/flow/layers/clip_shape_layer.h b/flow/layers/clip_shape_layer.h index d332678..69c479f 100644 --- a/flow/layers/clip_shape_layer.h +++ b/flow/layers/clip_shape_layer.h
@@ -32,8 +32,7 @@ context->MarkSubtreeDirty(context->GetOldLayerPaintRegion(old_layer)); } } - if (UsesSaveLayer(context->impeller_enabled()) && - context->has_raster_cache()) { + if (UsesSaveLayer() && context->has_raster_cache()) { context->WillPaintWithIntegralTransform(); } if (context->PushCullRect(clip_shape_bounds())) { @@ -43,7 +42,7 @@ } void Preroll(PrerollContext* context) override { - bool uses_save_layer = UsesSaveLayer(context->impeller_enabled); + bool uses_save_layer = UsesSaveLayer(); // We can use the raster_cache for children only when the use_save_layer is // true so if use_save_layer is false we pass the layer_raster_item is @@ -53,8 +52,7 @@ context, context->state_stack.transform_3x3()); Layer::AutoPrerollSaveLayerState save = - Layer::AutoPrerollSaveLayerState::Create( - context, UsesSaveLayer(context->impeller_enabled)); + Layer::AutoPrerollSaveLayerState::Create(context, UsesSaveLayer()); auto mutator = context->state_stack.save(); ApplyClip(mutator); @@ -80,7 +78,7 @@ auto mutator = context.state_stack.save(); ApplyClip(mutator); - if (!UsesSaveLayer(context.impeller_enabled)) { + if (!UsesSaveLayer()) { PaintChildren(context); return; } @@ -101,10 +99,7 @@ PaintChildren(context); } - bool UsesSaveLayer(bool enable_impeller) const { - if (enable_impeller) { - return false; - } + bool UsesSaveLayer() const { return clip_behavior_ == Clip::antiAliasWithSaveLayer; }
diff --git a/flow/layers/layer.h b/flow/layers/layer.h index d9864e8..1010824 100644 --- a/flow/layers/layer.h +++ b/flow/layers/layer.h
@@ -71,8 +71,6 @@ // presence of a texture layer during Preroll. bool has_texture_layer = false; - bool impeller_enabled = false; - // The list of flags that describe which rendering state attributes // (such as opacity, ColorFilter, ImageFilter) a given layer can // render itself without requiring the parent to perform a protective @@ -119,7 +117,6 @@ // only when leaf layer tracing is enabled. LayerSnapshotStore* layer_snapshot_store = nullptr; bool enable_leaf_layer_tracing = false; - bool impeller_enabled = false; impeller::AiksContext* aiks_context; };
diff --git a/flow/layers/layer_tree.cc b/flow/layers/layer_tree.cc index e8aea74..bb7492a 100644 --- a/flow/layers/layer_tree.cc +++ b/flow/layers/layer_tree.cc
@@ -60,7 +60,6 @@ .raster_time = frame.context().raster_time(), .ui_time = frame.context().ui_time(), .texture_registry = frame.context().texture_registry(), - .impeller_enabled = !frame.gr_context(), .raster_cached_entries = &raster_cache_items_, // clang-format on }; @@ -140,7 +139,6 @@ .raster_cache = cache, .layer_snapshot_store = snapshot_store, .enable_leaf_layer_tracing = enable_leaf_layer_tracing_, - .impeller_enabled = !!frame.aiks_context(), .aiks_context = frame.aiks_context(), // clang-format on };
diff --git a/flow/testing/diff_context_test.cc b/flow/testing/diff_context_test.cc index 26b2a67..c4c68bb 100644 --- a/flow/testing/diff_context_test.cc +++ b/flow/testing/diff_context_test.cc
@@ -17,13 +17,11 @@ const SkIRect& additional_damage, int horizontal_clip_alignment, int vertical_clip_alignment, - bool use_raster_cache, - bool impeller_enabled) { + bool use_raster_cache) { FML_CHECK(layer_tree.size() == old_layer_tree.size()); DiffContext dc(layer_tree.size(), layer_tree.paint_region_map(), - old_layer_tree.paint_region_map(), use_raster_cache, - impeller_enabled); + old_layer_tree.paint_region_map(), use_raster_cache); dc.PushCullRect( SkRect::MakeIWH(layer_tree.size().width(), layer_tree.size().height())); layer_tree.root()->Diff(&dc, old_layer_tree.root());
diff --git a/flow/testing/diff_context_test.h b/flow/testing/diff_context_test.h index 03a1ac0..be10a01 100644 --- a/flow/testing/diff_context_test.h +++ b/flow/testing/diff_context_test.h
@@ -41,8 +41,7 @@ const SkIRect& additional_damage = SkIRect::MakeEmpty(), int horizontal_clip_alignment = 0, int vertical_alignment = 0, - bool use_raster_cache = true, - bool impeller_enabled = false); + bool use_raster_cache = true); // Create display list consisting of filled rect with given color; Being able // to specify different color is useful to test deep comparison of pictures
diff --git a/flow/testing/layer_test.h b/flow/testing/layer_test.h index 178c307..e74ef6f 100644 --- a/flow/testing/layer_test.h +++ b/flow/testing/layer_test.h
@@ -195,12 +195,6 @@ paint_context_.layer_snapshot_store = nullptr; } - void enable_impeller() { - preroll_context_.impeller_enabled = true; - paint_context_.impeller_enabled = true; - display_list_paint_context_.impeller_enabled = true; - } - private: void set_raster_cache_(std::unique_ptr<RasterCache> raster_cache) { raster_cache_ = std::move(raster_cache);