@@ -3352,5 +3352,57 @@ TEST_F(EmbedderTest, MultipleDisplaysWithSameDisplayIdIsInvalid) {
3352
3352
latch.Wait ();
3353
3353
}
3354
3354
3355
+ TEST_F (EmbedderTest, CompositorRenderTargetsNotRecycledWhenAvoidsCacheSet) {
3356
+ auto & context = GetEmbedderContext (ContextType::kOpenGLContext );
3357
+
3358
+ EmbedderConfigBuilder builder (context);
3359
+ builder.SetOpenGLRendererConfig (SkISize::Make (300 , 200 ));
3360
+ builder.SetCompositor (/* avoid_cache=*/ true );
3361
+ builder.SetDartEntrypoint (" render_targets_are_recycled" );
3362
+ builder.SetRenderTargetType (
3363
+ EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture );
3364
+
3365
+ fml::CountDownLatch latch (2 );
3366
+
3367
+ context.AddNativeCallback (" SignalNativeTest" ,
3368
+ CREATE_NATIVE_ENTRY ([&](Dart_NativeArguments args) {
3369
+ latch.CountDown ();
3370
+ }));
3371
+
3372
+ context.GetCompositor ().SetNextPresentCallback (
3373
+ [&](const FlutterLayer** layers, size_t layers_count) {
3374
+ ASSERT_EQ (layers_count, 20u );
3375
+ latch.CountDown ();
3376
+ });
3377
+
3378
+ auto engine = builder.LaunchEngine ();
3379
+ ASSERT_TRUE (engine.is_valid ());
3380
+
3381
+ FlutterWindowMetricsEvent event = {};
3382
+ event.struct_size = sizeof (event);
3383
+ event.width = 300 ;
3384
+ event.height = 200 ;
3385
+ event.pixel_ratio = 1.0 ;
3386
+ ASSERT_EQ (FlutterEngineSendWindowMetricsEvent (engine.get (), &event),
3387
+ kSuccess );
3388
+
3389
+ latch.Wait ();
3390
+ const unsigned num_frames = 7 ;
3391
+ const unsigned num_engine_layers = 10 ;
3392
+ const unsigned num_backing_stores = num_frames * num_engine_layers;
3393
+ ASSERT_EQ (context.GetCompositor ().GetPendingBackingStoresCount (), 0u );
3394
+ ASSERT_EQ (context.GetCompositor ().GetBackingStoresCreatedCount (),
3395
+ num_backing_stores);
3396
+ ASSERT_EQ (context.GetCompositor ().GetBackingStoresCollectedCount (),
3397
+ num_backing_stores);
3398
+ // Killing the engine should collect the frame in flight.
3399
+ engine.reset ();
3400
+ ASSERT_EQ (context.GetCompositor ().GetPendingBackingStoresCount (), 0u );
3401
+ ASSERT_EQ (context.GetCompositor ().GetBackingStoresCreatedCount (),
3402
+ num_backing_stores + num_engine_layers);
3403
+ ASSERT_EQ (context.GetCompositor ().GetBackingStoresCollectedCount (),
3404
+ num_backing_stores + num_engine_layers);
3405
+ }
3406
+
3355
3407
} // namespace testing
3356
3408
} // namespace flutter
0 commit comments