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

Commit 9b68847

Browse files
committed
ImageFilterLayer Reset cache_children; Fix some comments
1 parent 9e0e52b commit 9b68847

17 files changed

+59
-64
lines changed

flow/layers/cacheable_layer.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@ AutoCache::AutoCache(RasterCacheItem* raster_cache_item,
1414
: raster_cache_item_(raster_cache_item),
1515
context_(context),
1616
matrix_(matrix) {
17-
if (cacheEnable()) {
17+
if (IsCacheEnabled()) {
1818
raster_cache_item->PrerollSetup(context, matrix);
1919
current_index_ = context_->raster_cached_entries->size();
2020
}
2121
}
2222

23-
bool AutoCache::cacheEnable() {
23+
bool AutoCache::IsCacheEnabled() {
2424
return raster_cache_item_ && context_ && context_->raster_cache;
2525
}
2626

2727
AutoCache::~AutoCache() {
28-
if (cacheEnable()) {
28+
if (IsCacheEnabled()) {
2929
raster_cache_item_->PrerollFinalize(context_, matrix_);
3030
}
3131
}

flow/layers/cacheable_layer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class AutoCache {
2424
~AutoCache();
2525

2626
private:
27-
inline bool cacheEnable();
27+
inline bool IsCacheEnabled();
2828
int current_index_;
2929
RasterCacheItem* raster_cache_item_ = nullptr;
3030
PrerollContext* context_ = nullptr;

flow/layers/clip_path_layer_unittests.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ TEST_F(ClipPathLayerTest, LayerCached) {
497497
auto layer =
498498
std::make_shared<ClipPathLayer>(layer_clip, Clip::antiAliasWithSaveLayer);
499499
layer->Add(mock1);
500-
SkPaint paint;
500+
501501
auto initial_transform = SkMatrix::Translate(50.0, 25.5);
502502
SkMatrix cache_ctm = initial_transform;
503503
SkCanvas cache_canvas;
@@ -525,6 +525,7 @@ TEST_F(ClipPathLayerTest, LayerCached) {
525525
EXPECT_EQ(raster_cache()->GetLayerCachedEntriesCount(), (size_t)1);
526526
EXPECT_EQ(clip_cache_item->cache_state(),
527527
RasterCacheItem::CacheState::kCurrent);
528+
SkPaint paint;
528529
EXPECT_TRUE(raster_cache()->Draw(clip_cache_item->GetId().value(),
529530
cache_canvas, &paint));
530531
}

flow/layers/clip_rect_layer_unittests.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,6 @@ TEST_F(ClipRectLayerTest, OpacityInheritanceSaveLayerPainting) {
480480
TEST_F(ClipRectLayerTest, LayerCached) {
481481
auto path1 = SkPath().addRect({10, 10, 30, 30});
482482
auto mock1 = MockLayer::MakeOpacityCompatible(path1);
483-
SkPaint paint;
484483
SkRect clip_rect = SkRect::MakeWH(500, 500);
485484
auto layer =
486485
std::make_shared<ClipRectLayer>(clip_rect, Clip::antiAliasWithSaveLayer);
@@ -511,6 +510,7 @@ TEST_F(ClipRectLayerTest, LayerCached) {
511510
EXPECT_EQ(raster_cache()->GetLayerCachedEntriesCount(), (size_t)1);
512511
EXPECT_EQ(clip_cache_item->cache_state(),
513512
RasterCacheItem::CacheState::kCurrent);
513+
SkPaint paint;
514514
EXPECT_TRUE(raster_cache()->Draw(clip_cache_item->GetId().value(),
515515
cache_canvas, &paint));
516516
}

flow/layers/clip_rrect_layer_unittests.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ TEST_F(ClipRRectLayerTest, LayerCached) {
526526

527527
TEST_F(ClipRRectLayerTest, NoSaveLayerShouldNotCache) {
528528
auto path1 = SkPath().addRect({10, 10, 30, 30});
529-
SkPaint paint = SkPaint();
529+
530530
auto mock1 = MockLayer::MakeOpacityCompatible(path1);
531531
SkRect clip_rect = SkRect::MakeWH(500, 500);
532532
SkRRect clip_r_rect = SkRRect::MakeRectXY(clip_rect, 20, 20);

flow/layers/color_filter_layer_unittests.cc

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -341,17 +341,26 @@ TEST_F(ColorFilterLayerTest, CacheColorFilterLayerSelf) {
341341
layer->Paint(paint_context());
342342
// frame 2.
343343
layer->Preroll(preroll_context(), initial_transform);
344+
LayerTree::TryToRasterCache(cacheable_items(), &paint_context());
345+
// ColorFilterLayer default cache children.
346+
EXPECT_EQ(cacheable_color_filter_item->cache_state(),
347+
RasterCacheItem::CacheState::kChildren);
348+
EXPECT_TRUE(raster_cache()->Draw(cacheable_color_filter_item->GetId().value(),
349+
cache_canvas, &paint));
350+
EXPECT_FALSE(raster_cache()->Draw(
351+
cacheable_color_filter_item->GetId().value(), other_canvas, &paint));
344352
layer->Paint(paint_context());
353+
345354
// frame 3.
346355
layer->Preroll(preroll_context(), initial_transform);
347356
layer->Paint(paint_context());
348357

349358
LayerTree::TryToRasterCache(cacheable_items(), &paint_context());
350-
// frame1,2 cache the ImageFilter's children layer, frame3 cache the
351-
// ImageFilterLayer
359+
// frame1,2 cache the ColorFilterLayer's children layer, frame3 cache the
360+
// ColorFilterLayer
352361
EXPECT_EQ(raster_cache()->GetLayerCachedEntriesCount(), (size_t)2);
353362

354-
// ImageFilterLayer default cache itself.
363+
// ColorFilterLayer default cache itself.
355364
EXPECT_EQ(cacheable_color_filter_item->cache_state(),
356365
RasterCacheItem::CacheState::kCurrent);
357366
EXPECT_EQ(cacheable_color_filter_item->GetId(),
@@ -382,7 +391,7 @@ TEST_F(ColorFilterLayerTest, OpacityInheritance) {
382391
PrerollContext* context = preroll_context();
383392
context->subtree_can_inherit_opacity = false;
384393
color_filter_layer->Preroll(preroll_context(), initial_transform);
385-
// ImageFilterLayers can always inherit opacity whether or not their
394+
// ColorFilterLayer can always inherit opacity whether or not their
386395
// children are compatible.
387396
EXPECT_TRUE(context->subtree_can_inherit_opacity);
388397

flow/layers/container_layer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class ContainerLayer : public Layer {
2828
virtual void DiffChildren(DiffContext* context,
2929
const ContainerLayer* old_layer);
3030

31-
void PaintChildren(PaintContext& context) const;
31+
void PaintChildren(PaintContext& context) const override;
3232

3333
const ContainerLayer* as_container_layer() const override { return this; }
3434

flow/layers/display_list_raster_cache_item.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,9 @@ bool DisplayListRasterCacheItem::TryToPrepareRasterCache(
170170
};
171171
return context.raster_cache->UpdateCacheEntry(
172172
GetId().value(), r_context,
173-
[=](SkCanvas* canvas) { display_list_->RenderTo(canvas); });
173+
[display_list = display_list_](SkCanvas* canvas) {
174+
display_list->RenderTo(canvas);
175+
});
174176
return false;
175177
}
176178
} // namespace flutter

flow/layers/image_filter_layer.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ void ImageFilterLayer::Preroll(PrerollContext* context,
6868

6969
set_paint_bounds(child_bounds);
7070

71+
// CacheChildren only when the transformed_filter_ doesn't equal null.
72+
// So in here we reset the LayerRasterCacheItem cache state.
73+
layer_raster_cache_item_->MarkNotCacheChildren();
74+
7175
transformed_filter_ = filter_->makeWithLocalMatrix(matrix);
7276
if (transformed_filter_) {
7377
layer_raster_cache_item_->MarkCacheChildren();

flow/layers/layer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,8 @@ class Layer {
302302

303303
virtual void Paint(PaintContext& context) const = 0;
304304

305+
virtual void PaintChildren(PaintContext& context) const { FML_DCHECK(false); }
306+
305307
bool subtree_has_platform_view() const { return subtree_has_platform_view_; }
306308
void set_subtree_has_platform_view(bool value) {
307309
subtree_has_platform_view_ = value;

0 commit comments

Comments
 (0)