@@ -579,6 +579,73 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame__overlayComposition) {
579579 embedder->EndFrame (/* should_resubmit_frame=*/ false , raster_thread_merger);
580580}
581581
582+ TEST (AndroidExternalViewEmbedder, SubmitFrame__platformViewWithoutAnyOverlay) {
583+ auto jni_mock = std::make_shared<JNIMock>();
584+ auto android_context =
585+ std::make_shared<AndroidContext>(AndroidRenderingAPI::kSoftware );
586+
587+ auto window = fml::MakeRefCounted<AndroidNativeWindow>(nullptr );
588+ auto gr_context = GrDirectContext::MakeMock (nullptr );
589+ auto frame_size = SkISize::Make (1000 , 1000 );
590+ auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
591+ [&android_context, gr_context, window, frame_size]() {
592+ auto surface_frame_1 = std::make_unique<SurfaceFrame>(
593+ SkSurface::MakeNull (1000 , 1000 ), false ,
594+ [](const SurfaceFrame& surface_frame, SkCanvas* canvas) {
595+ return true ;
596+ });
597+
598+ auto surface_mock = std::make_unique<SurfaceMock>();
599+ EXPECT_CALL (*surface_mock, AcquireFrame (frame_size))
600+ .Times (1 /* frames */ )
601+ .WillOnce (Return (ByMove (std::move (surface_frame_1))));
602+
603+ auto android_surface_mock =
604+ std::make_unique<AndroidSurfaceMock>(android_context);
605+ EXPECT_CALL (*android_surface_mock, IsValid ()).WillOnce (Return (true ));
606+
607+ EXPECT_CALL (*android_surface_mock, CreateGPUSurface (gr_context.get ()))
608+ .WillOnce (Return (ByMove (std::move (surface_mock))));
609+
610+ EXPECT_CALL (*android_surface_mock, SetNativeWindow (window));
611+ return android_surface_mock;
612+ });
613+ auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
614+ *android_context, jni_mock, surface_factory);
615+
616+ auto raster_thread_merger =
617+ GetThreadMergerFromPlatformThread (/* merged=*/ true );
618+
619+ EXPECT_CALL (*jni_mock, FlutterViewBeginFrame ());
620+ embedder->BeginFrame (frame_size, nullptr , 1.5 , raster_thread_merger);
621+
622+ {
623+ // Add Android view.
624+ SkMatrix matrix;
625+ MutatorsStack stack;
626+ stack.PushTransform (SkMatrix::Translate (0 , 0 ));
627+
628+ embedder->PrerollCompositeEmbeddedView (
629+ 0 , std::make_unique<EmbeddedViewParams>(matrix, SkSize::Make (200 , 200 ),
630+ stack));
631+ EXPECT_CALL (*jni_mock, FlutterViewOnDisplayPlatformView (0 , 0 , 0 , 200 , 200 ,
632+ 300 , 300 , stack));
633+ }
634+
635+ EXPECT_CALL (*jni_mock, FlutterViewCreateOverlaySurface ()).Times (0 );
636+
637+ auto surface_frame = std::make_unique<SurfaceFrame>(
638+ SkSurface::MakeNull (1000 , 1000 ), false ,
639+ [](const SurfaceFrame& surface_frame, SkCanvas* canvas) mutable {
640+ return true ;
641+ });
642+
643+ embedder->SubmitFrame (gr_context.get (), std::move (surface_frame), nullptr );
644+
645+ EXPECT_CALL (*jni_mock, FlutterViewEndFrame ());
646+ embedder->EndFrame (/* should_resubmit_frame=*/ false , raster_thread_merger);
647+ }
648+
582649TEST (AndroidExternalViewEmbedder, DoesNotCallJNIPlatformThreadOnlyMethods) {
583650 auto jni_mock = std::make_shared<JNIMock>();
584651
0 commit comments