44
55#include " flutter/flow/layers/clip_rrect_layer.h"
66
7+ #include " flutter/flow/layers/layer_tree.h"
78#include " flutter/flow/layers/opacity_layer.h"
89#include " flutter/flow/testing/layer_test.h"
910#include " flutter/flow/testing/mock_layer.h"
@@ -486,6 +487,7 @@ TEST_F(ClipRRectLayerTest, OpacityInheritanceSaveLayerPainting) {
486487
487488TEST_F (ClipRRectLayerTest, LayerCached) {
488489 auto path1 = SkPath ().addRect ({10 , 10 , 30 , 30 });
490+ SkPaint paint = SkPaint ();
489491 auto mock1 = MockLayer::MakeOpacityCompatible (path1);
490492 SkRect clip_rect = SkRect::MakeWH (500 , 500 );
491493 SkRRect clip_r_rect = SkRRect::MakeRectXY (clip_rect, 20 , 20 );
@@ -500,24 +502,61 @@ TEST_F(ClipRRectLayerTest, LayerCached) {
500502
501503 use_mock_raster_cache ();
502504
503- EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
504- EXPECT_FALSE (raster_cache ()->Draw (layer.get (), cache_canvas,
505- RasterCacheLayerStrategy::kLayer ));
505+ const auto * clip_cache_item = layer->raster_cache_item ();
506506
507507 layer->Preroll (preroll_context (), initial_transform);
508+ LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
509+
508510 EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
509- EXPECT_FALSE (raster_cache ()->Draw (layer.get (), cache_canvas,
510- RasterCacheLayerStrategy::kLayer ));
511+ EXPECT_EQ (clip_cache_item->cache_state (), RasterCacheItem::CacheState::kNone );
511512
512513 layer->Preroll (preroll_context (), initial_transform);
514+ LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
513515 EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
514- EXPECT_FALSE (raster_cache ()->Draw (layer.get (), cache_canvas,
515- RasterCacheLayerStrategy::kLayer ));
516+ EXPECT_EQ (clip_cache_item->cache_state (), RasterCacheItem::CacheState::kNone );
516517
517518 layer->Preroll (preroll_context (), initial_transform);
519+ LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
518520 EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )1 );
519- EXPECT_TRUE (raster_cache ()->Draw (layer.get (), cache_canvas,
520- RasterCacheLayerStrategy::kLayer ));
521+ EXPECT_EQ (clip_cache_item->cache_state (),
522+ RasterCacheItem::CacheState::kCurrent );
523+ EXPECT_TRUE (raster_cache ()->Draw (clip_cache_item->GetId ().value (),
524+ cache_canvas, &paint));
525+ }
526+
527+ TEST_F (ClipRRectLayerTest, NoSaveLayerShouldNotCache) {
528+ auto path1 = SkPath ().addRect ({10 , 10 , 30 , 30 });
529+
530+ auto mock1 = MockLayer::MakeOpacityCompatible (path1);
531+ SkRect clip_rect = SkRect::MakeWH (500 , 500 );
532+ SkRRect clip_r_rect = SkRRect::MakeRectXY (clip_rect, 20 , 20 );
533+ auto layer = std::make_shared<ClipRRectLayer>(clip_r_rect, Clip::antiAlias);
534+ layer->Add (mock1);
535+
536+ auto initial_transform = SkMatrix::Translate (50.0 , 25.5 );
537+ SkMatrix cache_ctm = initial_transform;
538+ SkCanvas cache_canvas;
539+ cache_canvas.setMatrix (cache_ctm);
540+
541+ use_mock_raster_cache ();
542+
543+ const auto * clip_cache_item = layer->raster_cache_item ();
544+
545+ layer->Preroll (preroll_context (), initial_transform);
546+ LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
547+
548+ EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
549+ EXPECT_EQ (clip_cache_item->cache_state (), RasterCacheItem::CacheState::kNone );
550+
551+ layer->Preroll (preroll_context (), initial_transform);
552+ LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
553+ EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
554+ EXPECT_EQ (clip_cache_item->cache_state (), RasterCacheItem::CacheState::kNone );
555+
556+ layer->Preroll (preroll_context (), initial_transform);
557+ LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
558+ EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
559+ EXPECT_EQ (clip_cache_item->cache_state (), RasterCacheItem::CacheState::kNone );
521560}
522561
523562} // namespace testing
0 commit comments