Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 691ec20

Browse files
author
Jonah Williams
authored
Revert "[Impeller] Avoid inserting additional save layers based on clip configuration. (#43759)"
This reverts commit 0ec9cc8.
1 parent 683bca5 commit 691ec20

File tree

11 files changed

+15
-88
lines changed

11 files changed

+15
-88
lines changed

flow/compositor_context.cc

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,13 @@ namespace flutter {
1313

1414
std::optional<SkRect> FrameDamage::ComputeClipRect(
1515
flutter::LayerTree& layer_tree,
16-
bool has_raster_cache,
17-
bool impeller_enabled) {
16+
bool has_raster_cache) {
1817
if (layer_tree.root_layer()) {
1918
PaintRegionMap empty_paint_region_map;
2019
DiffContext context(layer_tree.frame_size(), layer_tree.paint_region_map(),
2120
prev_layer_tree_ ? prev_layer_tree_->paint_region_map()
2221
: empty_paint_region_map,
23-
has_raster_cache, impeller_enabled);
22+
has_raster_cache);
2423
context.PushCullRect(SkRect::MakeIWH(layer_tree.frame_size().width(),
2524
layer_tree.frame_size().height()));
2625
{
@@ -122,8 +121,7 @@ RasterStatus CompositorContext::ScopedFrame::Raster(
122121

123122
std::optional<SkRect> clip_rect;
124123
if (frame_damage) {
125-
clip_rect = frame_damage->ComputeClipRect(layer_tree, !ignore_raster_cache,
126-
!gr_context_);
124+
clip_rect = frame_damage->ComputeClipRect(layer_tree, !ignore_raster_cache);
127125

128126
if (aiks_context_ &&
129127
!ShouldPerformPartialRepaint(clip_rect, layer_tree.frame_size())) {

flow/compositor_context.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,7 @@ class FrameDamage {
8484
// but the paint region of layer_tree will be calculated so that it can be
8585
// used for diffing of subsequent frames.
8686
std::optional<SkRect> ComputeClipRect(flutter::LayerTree& layer_tree,
87-
bool has_raster_cache,
88-
bool impeller_enabled);
87+
bool has_raster_cache);
8988

9089
// See Damage::frame_damage.
9190
std::optional<SkIRect> GetFrameDamage() const {

flow/diff_context.cc

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@ namespace flutter {
1010
DiffContext::DiffContext(SkISize frame_size,
1111
PaintRegionMap& this_frame_paint_region_map,
1212
const PaintRegionMap& last_frame_paint_region_map,
13-
bool has_raster_cache,
14-
bool impeller_enabled)
13+
bool has_raster_cache)
1514
: clip_tracker_(DisplayListMatrixClipTracker(kGiantRect, SkMatrix::I())),
1615
rects_(std::make_shared<std::vector<SkRect>>()),
1716
frame_size_(frame_size),
1817
this_frame_paint_region_map_(this_frame_paint_region_map),
1918
last_frame_paint_region_map_(last_frame_paint_region_map),
20-
has_raster_cache_(has_raster_cache),
21-
impeller_enabled_(impeller_enabled) {}
19+
has_raster_cache_(has_raster_cache) {}
2220

2321
void DiffContext::BeginSubtree() {
2422
state_stack_.push_back(state_);

flow/diff_context.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ class DiffContext {
4646
explicit DiffContext(SkISize frame_size,
4747
PaintRegionMap& this_frame_paint_region_map,
4848
const PaintRegionMap& last_frame_paint_region_map,
49-
bool has_raster_cache,
50-
bool impeller_enabled);
49+
bool has_raster_cache);
5150

5251
// Starts a new subtree.
5352
void BeginSubtree();
@@ -162,8 +161,6 @@ class DiffContext {
162161
// cached.
163162
bool has_raster_cache() const { return has_raster_cache_; }
164163

165-
bool impeller_enabled() const { return impeller_enabled_; }
166-
167164
class Statistics {
168165
public:
169166
// Picture replaced by different picture
@@ -248,7 +245,6 @@ class DiffContext {
248245
PaintRegionMap& this_frame_paint_region_map_;
249246
const PaintRegionMap& last_frame_paint_region_map_;
250247
bool has_raster_cache_;
251-
bool impeller_enabled_;
252248

253249
void AddDamage(const SkRect& rect);
254250

flow/layers/clip_rrect_layer_unittests.cc

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -595,51 +595,6 @@ TEST_F(ClipRRectLayerTest, EmptyClipDoesNotCullPlatformView) {
595595
EXPECT_EQ(embedder.painted_views(), std::vector<int64_t>({view_id}));
596596
}
597597

598-
TEST_F(ClipRRectLayerTest, AntiAliasWithSaveLayerIgnoresSaveLayerImpeller) {
599-
enable_impeller();
600-
601-
auto path1 = SkPath().addRect({10, 10, 30, 30});
602-
auto mock1 = MockLayer::MakeOpacityCompatible(path1);
603-
auto path2 = SkPath().addRect({20, 20, 40, 40});
604-
auto mock2 = MockLayer::MakeOpacityCompatible(path2);
605-
auto children_bounds = path1.getBounds();
606-
children_bounds.join(path2.getBounds());
607-
SkRect clip_rect = SkRect::MakeWH(500, 500);
608-
SkRRect clip_rrect = SkRRect::MakeRectXY(clip_rect, 20, 20);
609-
auto clip_rrect_layer = std::make_shared<ClipRRectLayer>(
610-
clip_rrect, Clip::antiAliasWithSaveLayer);
611-
clip_rrect_layer->Add(mock1);
612-
clip_rrect_layer->Add(mock2);
613-
614-
// ClipRectLayer will pass through compatibility from multiple
615-
// non-overlapping compatible children
616-
PrerollContext* context = preroll_context();
617-
clip_rrect_layer->Preroll(context);
618-
EXPECT_EQ(context->renderable_state_flags, 0);
619-
620-
DisplayListBuilder expected_builder;
621-
/* OpacityLayer::Paint() */ {
622-
expected_builder.Save();
623-
{
624-
/* ClipRectLayer::Paint() */ {
625-
expected_builder.Save();
626-
expected_builder.ClipRRect(clip_rrect, ClipOp::kIntersect, true);
627-
/* child layer1 paint */ {
628-
expected_builder.DrawPath(path1, DlPaint());
629-
}
630-
/* child layer2 paint */ { //
631-
expected_builder.DrawPath(path2, DlPaint());
632-
}
633-
// expected_builder.Restore();
634-
}
635-
}
636-
expected_builder.Restore();
637-
}
638-
639-
clip_rrect_layer->Paint(display_list_paint_context());
640-
EXPECT_TRUE(DisplayListsEQ_Verbose(expected_builder.Build(), display_list()));
641-
}
642-
643598
} // namespace testing
644599
} // namespace flutter
645600

flow/layers/clip_shape_layer.h

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ class ClipShapeLayer : public CacheableContainerLayer {
3232
context->MarkSubtreeDirty(context->GetOldLayerPaintRegion(old_layer));
3333
}
3434
}
35-
if (UsesSaveLayer(context->impeller_enabled()) &&
36-
context->has_raster_cache()) {
35+
if (UsesSaveLayer() && context->has_raster_cache()) {
3736
context->WillPaintWithIntegralTransform();
3837
}
3938
if (context->PushCullRect(clip_shape_bounds())) {
@@ -43,7 +42,7 @@ class ClipShapeLayer : public CacheableContainerLayer {
4342
}
4443

4544
void Preroll(PrerollContext* context) override {
46-
bool uses_save_layer = UsesSaveLayer(context->impeller_enabled);
45+
bool uses_save_layer = UsesSaveLayer();
4746

4847
// We can use the raster_cache for children only when the use_save_layer is
4948
// true so if use_save_layer is false we pass the layer_raster_item is
@@ -53,8 +52,7 @@ class ClipShapeLayer : public CacheableContainerLayer {
5352
context, context->state_stack.transform_3x3());
5453

5554
Layer::AutoPrerollSaveLayerState save =
56-
Layer::AutoPrerollSaveLayerState::Create(
57-
context, UsesSaveLayer(context->impeller_enabled));
55+
Layer::AutoPrerollSaveLayerState::Create(context, UsesSaveLayer());
5856

5957
auto mutator = context->state_stack.save();
6058
ApplyClip(mutator);
@@ -80,7 +78,7 @@ class ClipShapeLayer : public CacheableContainerLayer {
8078
auto mutator = context.state_stack.save();
8179
ApplyClip(mutator);
8280

83-
if (!UsesSaveLayer(context.impeller_enabled)) {
81+
if (!UsesSaveLayer()) {
8482
PaintChildren(context);
8583
return;
8684
}
@@ -101,10 +99,7 @@ class ClipShapeLayer : public CacheableContainerLayer {
10199
PaintChildren(context);
102100
}
103101

104-
bool UsesSaveLayer(bool enable_impeller) const {
105-
if (enable_impeller) {
106-
return false;
107-
}
102+
bool UsesSaveLayer() const {
108103
return clip_behavior_ == Clip::antiAliasWithSaveLayer;
109104
}
110105

flow/layers/layer.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ struct PrerollContext {
7171
// presence of a texture layer during Preroll.
7272
bool has_texture_layer = false;
7373

74-
bool impeller_enabled = false;
75-
7674
// The list of flags that describe which rendering state attributes
7775
// (such as opacity, ColorFilter, ImageFilter) a given layer can
7876
// render itself without requiring the parent to perform a protective
@@ -119,7 +117,6 @@ struct PaintContext {
119117
// only when leaf layer tracing is enabled.
120118
LayerSnapshotStore* layer_snapshot_store = nullptr;
121119
bool enable_leaf_layer_tracing = false;
122-
bool impeller_enabled = false;
123120
impeller::AiksContext* aiks_context;
124121
};
125122

flow/layers/layer_tree.cc

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ bool LayerTree::Preroll(CompositorContext::ScopedFrame& frame,
6060
.raster_time = frame.context().raster_time(),
6161
.ui_time = frame.context().ui_time(),
6262
.texture_registry = frame.context().texture_registry(),
63-
.impeller_enabled = !frame.gr_context(),
6463
.raster_cached_entries = &raster_cache_items_,
6564
// clang-format on
6665
};
@@ -140,7 +139,6 @@ void LayerTree::Paint(CompositorContext::ScopedFrame& frame,
140139
.raster_cache = cache,
141140
.layer_snapshot_store = snapshot_store,
142141
.enable_leaf_layer_tracing = enable_leaf_layer_tracing_,
143-
.impeller_enabled = !!frame.aiks_context(),
144142
.aiks_context = frame.aiks_context(),
145143
// clang-format on
146144
};

flow/testing/diff_context_test.cc

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,11 @@ Damage DiffContextTest::DiffLayerTree(MockLayerTree& layer_tree,
1717
const SkIRect& additional_damage,
1818
int horizontal_clip_alignment,
1919
int vertical_clip_alignment,
20-
bool use_raster_cache,
21-
bool impeller_enabled) {
20+
bool use_raster_cache) {
2221
FML_CHECK(layer_tree.size() == old_layer_tree.size());
2322

2423
DiffContext dc(layer_tree.size(), layer_tree.paint_region_map(),
25-
old_layer_tree.paint_region_map(), use_raster_cache,
26-
impeller_enabled);
24+
old_layer_tree.paint_region_map(), use_raster_cache);
2725
dc.PushCullRect(
2826
SkRect::MakeIWH(layer_tree.size().width(), layer_tree.size().height()));
2927
layer_tree.root()->Diff(&dc, old_layer_tree.root());

flow/testing/diff_context_test.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ class DiffContextTest : public LayerTest {
4141
const SkIRect& additional_damage = SkIRect::MakeEmpty(),
4242
int horizontal_clip_alignment = 0,
4343
int vertical_alignment = 0,
44-
bool use_raster_cache = true,
45-
bool impeller_enabled = false);
44+
bool use_raster_cache = true);
4645

4746
// Create display list consisting of filled rect with given color; Being able
4847
// to specify different color is useful to test deep comparison of pictures

0 commit comments

Comments
 (0)