@@ -512,29 +512,72 @@ TEST_F(ClipRRectLayerTest, LayerCached) {
512512
513513 use_mock_raster_cache ();
514514 preroll_context ()->state_stack .set_preroll_delegate (initial_transform);
515-
516- const auto * clip_cache_item = layer->raster_cache_item ();
515+ EXPECT_EQ (layer->raster_cache_item (), nullptr );
517516
518517 layer->Preroll (preroll_context ());
518+ EXPECT_NE (layer->raster_cache_item (), nullptr );
519519 LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
520520
521521 EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
522- EXPECT_EQ (clip_cache_item->cache_state (), RasterCacheItem::CacheState::kNone );
522+ EXPECT_EQ (layer->raster_cache_item ()->cache_state (),
523+ RasterCacheItem::CacheState::kNone );
523524
524525 layer->Preroll (preroll_context ());
525526 LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
526527 EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
527- EXPECT_EQ (clip_cache_item->cache_state (), RasterCacheItem::CacheState::kNone );
528+ EXPECT_EQ (layer->raster_cache_item ()->cache_state (),
529+ RasterCacheItem::CacheState::kNone );
528530
529531 layer->Preroll (preroll_context ());
530532 LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
531533 EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )1 );
532- EXPECT_EQ (clip_cache_item ->cache_state (),
534+ EXPECT_EQ (layer-> raster_cache_item () ->cache_state (),
533535 RasterCacheItem::CacheState::kCurrent );
534- EXPECT_TRUE (raster_cache ()->Draw (clip_cache_item ->GetId ().value (),
536+ EXPECT_TRUE (raster_cache ()->Draw (layer-> raster_cache_item () ->GetId ().value (),
535537 cache_canvas, &paint));
536538}
537539
540+ TEST_F (ClipRRectLayerTest, NullRasterCacheResetsRasterCacheItem) {
541+ auto path1 = SkPath ().addRect ({10 , 10 , 30 , 30 });
542+ DlPaint paint = DlPaint ();
543+ auto mock1 = MockLayer::MakeOpacityCompatible (path1);
544+ SkRect clip_rect = SkRect::MakeWH (500 , 500 );
545+ SkRRect clip_rrect = SkRRect::MakeRectXY (clip_rect, 20 , 20 );
546+ auto layer = std::make_shared<ClipRRectLayer>(clip_rrect,
547+ Clip::antiAliasWithSaveLayer);
548+ layer->Add (mock1);
549+
550+ ASSERT_EQ (layer->raster_cache_item (), nullptr );
551+
552+ layer->Preroll (preroll_context ());
553+ ASSERT_EQ (layer->raster_cache_item (), nullptr );
554+
555+ use_mock_raster_cache ();
556+
557+ int limit = RasterCacheUtil::kMinimumRendersBeforeCachingFilterLayer ;
558+ for (int i = 1 ; i < limit; i++) {
559+ layer->Preroll (preroll_context ());
560+ ASSERT_NE (layer->raster_cache_item (), nullptr );
561+ ASSERT_EQ (layer->raster_cache_item ()->cache_state (),
562+ RasterCacheItem::kNone );
563+ ASSERT_FALSE (
564+ layer->raster_cache_item ()->TryToPrepareRasterCache (paint_context ()));
565+ }
566+
567+ layer->Preroll (preroll_context ());
568+ ASSERT_NE (layer->raster_cache_item (), nullptr );
569+ ASSERT_EQ (layer->raster_cache_item ()->cache_state (),
570+ RasterCacheItem::kCurrent );
571+ ASSERT_TRUE (
572+ layer->raster_cache_item ()->TryToPrepareRasterCache (paint_context ()));
573+
574+ use_null_raster_cache ();
575+
576+ layer->Preroll (preroll_context ());
577+ ASSERT_NE (layer->raster_cache_item (), nullptr );
578+ ASSERT_EQ (layer->raster_cache_item ()->cache_state (), RasterCacheItem::kNone );
579+ }
580+
538581TEST_F (ClipRRectLayerTest, NoSaveLayerShouldNotCache) {
539582 auto path1 = SkPath ().addRect ({10 , 10 , 30 , 30 });
540583
@@ -551,24 +594,23 @@ TEST_F(ClipRRectLayerTest, NoSaveLayerShouldNotCache) {
551594
552595 use_mock_raster_cache ();
553596 preroll_context ()->state_stack .set_preroll_delegate (initial_transform);
554-
555- const auto * clip_cache_item = layer->raster_cache_item ();
597+ EXPECT_EQ (layer->raster_cache_item (), nullptr );
556598
557599 layer->Preroll (preroll_context ());
558600 LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
559601
560602 EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
561- EXPECT_EQ (clip_cache_item-> cache_state (), RasterCacheItem::CacheState:: kNone );
603+ EXPECT_EQ (layer-> raster_cache_item (), nullptr );
562604
563605 layer->Preroll (preroll_context ());
564606 LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
565607 EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
566- EXPECT_EQ (clip_cache_item-> cache_state (), RasterCacheItem::CacheState:: kNone );
608+ EXPECT_EQ (layer-> raster_cache_item (), nullptr );
567609
568610 layer->Preroll (preroll_context ());
569611 LayerTree::TryToRasterCache (cacheable_items (), &paint_context ());
570612 EXPECT_EQ (raster_cache ()->GetLayerCachedEntriesCount (), (size_t )0 );
571- EXPECT_EQ (clip_cache_item-> cache_state (), RasterCacheItem::CacheState:: kNone );
613+ EXPECT_EQ (layer-> raster_cache_item (), nullptr );
572614}
573615
574616TEST_F (ClipRRectLayerTest, EmptyClipDoesNotCullPlatformView) {
0 commit comments