@@ -3352,5 +3352,52 @@ 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_backing_store_cache=*/ true );
3361
+ builder.SetDartEntrypoint (" render_targets_are_recycled" );
3362
+ builder.SetRenderTargetType (
3363
+ EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLTexture );
3364
+
3365
+ const unsigned num_frames = 8 ;
3366
+ const unsigned num_engine_layers = 10 ;
3367
+ const unsigned num_backing_stores = num_frames * num_engine_layers;
3368
+ fml::CountDownLatch latch (1 + num_frames); // 1 for native test signal.
3369
+
3370
+ context.AddNativeCallback (" SignalNativeTest" ,
3371
+ CREATE_NATIVE_ENTRY ([&](Dart_NativeArguments args) {
3372
+ latch.CountDown ();
3373
+ }));
3374
+
3375
+ context.GetCompositor ().SetPresentCallback (
3376
+ [&](const FlutterLayer** layers, size_t layers_count) {
3377
+ ASSERT_EQ (layers_count, 20u );
3378
+ latch.CountDown ();
3379
+ },
3380
+ /* one_shot=*/ false );
3381
+
3382
+ auto engine = builder.LaunchEngine ();
3383
+ ASSERT_TRUE (engine.is_valid ());
3384
+
3385
+ FlutterWindowMetricsEvent event = {};
3386
+ event.struct_size = sizeof (event);
3387
+ event.width = 300 ;
3388
+ event.height = 200 ;
3389
+ event.pixel_ratio = 1.0 ;
3390
+ ASSERT_EQ (FlutterEngineSendWindowMetricsEvent (engine.get (), &event),
3391
+ kSuccess );
3392
+
3393
+ latch.Wait ();
3394
+
3395
+ ASSERT_EQ (context.GetCompositor ().GetBackingStoresCreatedCount (),
3396
+ num_backing_stores);
3397
+ // Killing the engine should collect all the frames.
3398
+ engine.reset ();
3399
+ ASSERT_EQ (context.GetCompositor ().GetPendingBackingStoresCount (), 0u );
3400
+ }
3401
+
3355
3402
} // namespace testing
3356
3403
} // namespace flutter
0 commit comments