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

Commit ab463a9

Browse files
committed
as a counter
1 parent 7cee46c commit ab463a9

35 files changed

+262
-102
lines changed

flow/compositor_context.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ RasterStatus CompositorContext::ScopedFrame::Raster(
8888
// paints some raster cache.
8989
if (canvas()) {
9090
if (needs_save_layer) {
91-
FML_LOG(INFO) << "Using SaveLayer to protect non-readback surface";
9291
SkRect bounds = SkRect::Make(layer_tree.frame_size());
9392
SkPaint paint;
9493
paint.setBlendMode(SkBlendMode::kSrc);

flow/layers/clip_path_layer.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ void ClipPathLayer::Paint(PaintContext& context) const {
6464

6565
if (UsesSaveLayer()) {
6666
context.internal_nodes_canvas->saveLayer(paint_bounds(), nullptr);
67+
context.save_layer_count += 1;
6768
}
6869
PaintChildren(context);
6970
if (UsesSaveLayer()) {

flow/layers/clip_rect_layer.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ void ClipRectLayer::Paint(PaintContext& context) const {
6363

6464
if (UsesSaveLayer()) {
6565
context.internal_nodes_canvas->saveLayer(clip_rect_, nullptr);
66+
context.save_layer_count += 1;
6667
}
6768
PaintChildren(context);
6869
if (UsesSaveLayer()) {

flow/layers/clip_rrect_layer.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ void ClipRRectLayer::Paint(PaintContext& context) const {
6464

6565
if (UsesSaveLayer()) {
6666
context.internal_nodes_canvas->saveLayer(paint_bounds(), nullptr);
67+
context.save_layer_count += 1;
6768
}
6869
PaintChildren(context);
6970
if (UsesSaveLayer()) {

flow/layers/color_filter_layer.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ void ColorFilterLayer::Paint(PaintContext& context) const {
3939
TRACE_EVENT0("flutter", "ColorFilterLayer::Paint");
4040
FML_DCHECK(needs_painting(context));
4141

42+
// TODO(92937): ColorFilterLayer should do raster caching here.
43+
4244
SkPaint paint;
4345
paint.setColorFilter(filter_);
4446

flow/layers/display_list_layer.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ namespace flutter {
1111
DisplayListLayer::DisplayListLayer(const SkPoint& offset,
1212
SkiaGPUObject<DisplayList> display_list,
1313
bool is_complex,
14-
bool will_change)
14+
bool will_change,
15+
size_t save_layer_count)
1516
: offset_(offset),
1617
display_list_(std::move(display_list)),
1718
is_complex_(is_complex),
18-
will_change_(will_change) {}
19+
will_change_(will_change),
20+
save_layer_count_(save_layer_count) {}
1921

2022
#ifdef FLUTTER_ENABLE_DIFF_CONTEXT
2123

@@ -96,7 +98,7 @@ void DisplayListLayer::Preroll(PrerollContext* context,
9698
if (auto* cache = context->raster_cache) {
9799
TRACE_EVENT0("flutter", "DisplayListLayer::RasterCache (Preroll)");
98100
cache->Prepare(context, disp_list, is_complex_, will_change_, matrix,
99-
offset_);
101+
save_layer_count_, offset_);
100102
}
101103

102104
SkRect bounds = disp_list->bounds().makeOffset(offset_.x(), offset_.y());
@@ -121,6 +123,7 @@ void DisplayListLayer::Paint(PaintContext& context) const {
121123
return;
122124
}
123125

126+
context.save_layer_count += save_layer_count_;
124127
display_list()->RenderTo(context.leaf_nodes_canvas);
125128
}
126129

flow/layers/display_list_layer.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ class DisplayListLayer : public Layer {
1818
DisplayListLayer(const SkPoint& offset,
1919
SkiaGPUObject<DisplayList> display_list,
2020
bool is_complex,
21-
bool will_change);
21+
bool will_change,
22+
size_t save_layer_count);
2223

2324
DisplayList* display_list() const {
2425
return display_list_.skia_object().get();
@@ -40,11 +41,16 @@ class DisplayListLayer : public Layer {
4041

4142
void Paint(PaintContext& context) const override;
4243

44+
size_t save_layer_count() const override {
45+
return save_layer_count_;
46+
}
47+
4348
private:
4449
SkPoint offset_;
4550
flutter::SkiaGPUObject<DisplayList> display_list_;
4651
bool is_complex_ = false;
4752
bool will_change_ = false;
53+
size_t save_layer_count_ = 0;
4854

4955
#ifdef FLUTTER_ENABLE_DIFF_CONTEXT
5056

flow/layers/display_list_layer_unittests.cc

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ using DisplayListLayerTest = SkiaGPUObjectLayerTest;
2424
TEST_F(DisplayListLayerTest, PaintBeforePrerollInvalidDisplayListDies) {
2525
const SkPoint layer_offset = SkPoint::Make(0.0f, 0.0f);
2626
auto layer = std::make_shared<DisplayListLayer>(
27-
layer_offset, SkiaGPUObject<DisplayList>(), false, false);
27+
layer_offset, SkiaGPUObject<DisplayList>(), false, false, 0);
2828

2929
EXPECT_DEATH_IF_SUPPORTED(layer->Paint(paint_context()),
3030
"display_list_\\.skia_object\\(\\)");
@@ -38,7 +38,7 @@ TEST_F(DisplayListLayerTest, PaintBeforePrerollDies) {
3838
auto display_list = builder.Build();
3939
auto layer = std::make_shared<DisplayListLayer>(
4040
layer_offset, SkiaGPUObject<DisplayList>(display_list, unref_queue()),
41-
false, false);
41+
false, false, 0);
4242

4343
EXPECT_EQ(layer->paint_bounds(), SkRect::MakeEmpty());
4444
EXPECT_DEATH_IF_SUPPORTED(layer->Paint(paint_context()),
@@ -53,7 +53,7 @@ TEST_F(DisplayListLayerTest, PaintingEmptyLayerDies) {
5353
auto display_list = builder.Build();
5454
auto layer = std::make_shared<DisplayListLayer>(
5555
layer_offset, SkiaGPUObject<DisplayList>(display_list, unref_queue()),
56-
false, false);
56+
false, false, 0);
5757

5858
layer->Preroll(preroll_context(), SkMatrix());
5959
EXPECT_EQ(layer->paint_bounds(), SkRect::MakeEmpty());
@@ -66,7 +66,7 @@ TEST_F(DisplayListLayerTest, PaintingEmptyLayerDies) {
6666
TEST_F(DisplayListLayerTest, InvalidDisplayListDies) {
6767
const SkPoint layer_offset = SkPoint::Make(0.0f, 0.0f);
6868
auto layer = std::make_shared<DisplayListLayer>(
69-
layer_offset, SkiaGPUObject<DisplayList>(), false, false);
69+
layer_offset, SkiaGPUObject<DisplayList>(), false, false, 0);
7070

7171
// Crashes reading a nullptr.
7272
EXPECT_DEATH_IF_SUPPORTED(layer->Preroll(preroll_context(), SkMatrix()), "");
@@ -82,7 +82,8 @@ TEST_F(DisplayListLayerTest, SimpleDisplayList) {
8282
builder.drawRect(picture_bounds);
8383
auto display_list = builder.Build();
8484
auto layer = std::make_shared<DisplayListLayer>(
85-
layer_offset, SkiaGPUObject(display_list, unref_queue()), false, false);
85+
layer_offset, SkiaGPUObject(display_list, unref_queue()), false, false,
86+
0);
8687

8788
layer->Preroll(preroll_context(), SkMatrix());
8889
EXPECT_EQ(layer->paint_bounds(),

flow/layers/image_filter_layer.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ void ImageFilterLayer::Preroll(PrerollContext* context,
6868
// from frame to frame so we try to cache the layer itself
6969
// for maximum performance.
7070
TryToPrepareRasterCache(context, this, matrix);
71+
context->save_layer_count += 1;
7172
} else {
7273
// This ImageFilterLayer is not yet considered stable so we
7374
// increment the count to measure how many times it has been
@@ -89,6 +90,7 @@ void ImageFilterLayer::Preroll(PrerollContext* context,
8990
// switch during the Paint phase even if they are not stable.
9091
// This benefit is seen most during animations.
9192
TryToPrepareRasterCache(context, GetCacheableChild(), matrix);
93+
context->save_layer_count += 1;
9294
}
9395
}
9496
}

flow/layers/layer.cc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ Layer::AutoPrerollSaveLayerState::~AutoPrerollSaveLayerState() {
5656
}
5757
}
5858

59-
Layer::AutoSaveLayer::AutoSaveLayer(const PaintContext& paint_context,
59+
Layer::AutoSaveLayer::AutoSaveLayer(PaintContext& paint_context,
6060
const SkRect& bounds,
6161
const SkPaint* paint,
6262
SaveMode save_mode)
@@ -66,9 +66,10 @@ Layer::AutoSaveLayer::AutoSaveLayer(const PaintContext& paint_context,
6666
? *(paint_context.internal_nodes_canvas)
6767
: *(paint_context.leaf_nodes_canvas)) {
6868
canvas_.saveLayer(bounds_, paint);
69+
paint_context.save_layer_count += 1;
6970
}
7071

71-
Layer::AutoSaveLayer::AutoSaveLayer(const PaintContext& paint_context,
72+
Layer::AutoSaveLayer::AutoSaveLayer(PaintContext& paint_context,
7273
const SkCanvas::SaveLayerRec& layer_rec,
7374
SaveMode save_mode)
7475
: paint_context_(paint_context),
@@ -77,18 +78,19 @@ Layer::AutoSaveLayer::AutoSaveLayer(const PaintContext& paint_context,
7778
? *(paint_context.internal_nodes_canvas)
7879
: *(paint_context.leaf_nodes_canvas)) {
7980
canvas_.saveLayer(layer_rec);
81+
paint_context.save_layer_count += 1;
8082
}
8183

8284
Layer::AutoSaveLayer Layer::AutoSaveLayer::Create(
83-
const PaintContext& paint_context,
85+
PaintContext& paint_context,
8486
const SkRect& bounds,
8587
const SkPaint* paint,
8688
SaveMode save_mode) {
8789
return Layer::AutoSaveLayer(paint_context, bounds, paint, save_mode);
8890
}
8991

9092
Layer::AutoSaveLayer Layer::AutoSaveLayer::Create(
91-
const PaintContext& paint_context,
93+
PaintContext& paint_context,
9294
const SkCanvas::SaveLayerRec& layer_rec,
9395
SaveMode save_mode) {
9496
return Layer::AutoSaveLayer(paint_context, layer_rec, save_mode);

0 commit comments

Comments
 (0)