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