142 auto jni_mock = std::make_shared<JNIMock>();
144 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
148 auto raster_thread_merger =
150 ASSERT_FALSE(raster_thread_merger->IsMerged());
152 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
153 embedder->BeginFrame(
nullptr, raster_thread_merger);
154 embedder->PrepareFlutterView(
DlISize(10, 20), 1.0);
157 embedder->PrerollCompositeEmbeddedView(
158 0, std::make_unique<EmbeddedViewParams>());
160 auto postpreroll_result = embedder->PostPrerollAction(raster_thread_merger);
163 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
164 embedder->EndFrame(
true, raster_thread_merger);
166 ASSERT_TRUE(raster_thread_merger->IsMerged());
168 int pending_frames = 0;
169 while (raster_thread_merger->IsMerged()) {
170 raster_thread_merger->DecrementLease();
173 ASSERT_EQ(10, pending_frames);
263 auto jni_mock = std::make_shared<JNIMock>();
264 auto android_context =
267 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
268 auto gr_context = GrDirectContext::MakeMock(
nullptr);
269 auto frame_size =
DlISize(1000, 1000);
271 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
272 [gr_context,
window, frame_size, framebuffer_info]() {
273 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
274 SkSurfaces::Null(1000, 1000), framebuffer_info,
280 auto surface_frame_2 = std::make_unique<SurfaceFrame>(
281 SkSurfaces::Null(1000, 1000), framebuffer_info,
288 auto surface_mock = std::make_unique<SurfaceMock>();
289 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
291 .WillOnce(Return(ByMove(std::move(surface_frame_1))))
292 .WillOnce(Return(ByMove(std::move(surface_frame_2))));
294 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
295 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
297 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
298 .WillOnce(Return(ByMove(std::move(surface_mock))));
300 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
302 return android_surface_mock;
304 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
311 auto did_submit_frame =
false;
312 auto surface_frame = std::make_unique<SurfaceFrame>(
313 SkSurfaces::Null(1000, 1000), framebuffer_info,
316 if (canvas !=
nullptr) {
317 did_submit_frame =
true;
324 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
325 std::move(surface_frame));
327 EXPECT_TRUE(did_submit_frame);
329 auto postpreroll_result = embedder->PostPrerollAction(raster_thread_merger);
332 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
333 embedder->EndFrame(
false, raster_thread_merger);
338 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
339 embedder->BeginFrame(
nullptr, raster_thread_merger);
340 embedder->PrepareFlutterView(frame_size, 1.5);
352 std::make_unique<EmbeddedViewParams>(matrix1,
DlSize(200, 200), stack1);
354 embedder->PrerollCompositeEmbeddedView(0, std::move(view_params_1));
356 auto canvas_1 = embedder->CompositeEmbeddedView(0);
369 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
371 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
374 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(
375 0, 150, 150, 300, 300, 300, 300, stack1));
377 EXPECT_CALL(*jni_mock,
378 FlutterViewDisplayOverlaySurface(0, 150, 150, 100, 100));
380 auto did_submit_frame =
false;
381 auto surface_frame = std::make_unique<SurfaceFrame>(
382 SkSurfaces::Null(1000, 1000), framebuffer_info,
385 if (canvas !=
nullptr) {
386 did_submit_frame =
true;
393 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
394 std::move(surface_frame));
396 EXPECT_FALSE(did_submit_frame);
398 auto postpreroll_result = embedder->PostPrerollAction(raster_thread_merger);
401 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
402 embedder->EndFrame(
false, raster_thread_merger);
407 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
408 embedder->BeginFrame(
nullptr, raster_thread_merger);
409 embedder->PrepareFlutterView(frame_size, 1.5);
421 std::make_unique<EmbeddedViewParams>(matrix1,
DlSize(200, 200), stack1);
423 embedder->PrerollCompositeEmbeddedView(0, std::move(view_params_1));
425 auto canvas_1 = embedder->CompositeEmbeddedView(0);
439 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface()).Times(0);
441 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(
442 0, 150, 150, 300, 300, 300, 300, stack1));
444 EXPECT_CALL(*jni_mock,
445 FlutterViewDisplayOverlaySurface(0, 150, 150, 100, 100));
447 auto did_submit_frame =
false;
448 auto surface_frame = std::make_unique<SurfaceFrame>(
449 SkSurfaces::Null(1000, 1000), framebuffer_info,
452 if (canvas !=
nullptr) {
453 did_submit_frame =
true;
459 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
460 std::move(surface_frame));
462 EXPECT_TRUE(did_submit_frame);
464 auto postpreroll_result = embedder->PostPrerollAction(raster_thread_merger);
467 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
468 embedder->EndFrame(
false, raster_thread_merger);
476 auto jni_mock = std::make_shared<JNIMock>();
477 auto android_context =
480 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
481 auto gr_context = GrDirectContext::MakeMock(
nullptr);
482 auto frame_size =
DlISize(1000, 1000);
484 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
485 [gr_context,
window, frame_size, framebuffer_info]() {
486 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
487 SkSurfaces::Null(1000, 1000), framebuffer_info,
494 auto surface_mock = std::make_unique<SurfaceMock>();
495 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
497 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
499 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
500 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
502 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
503 .WillOnce(Return(ByMove(std::move(surface_mock))));
505 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
506 return android_surface_mock;
508 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
513 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
514 embedder->BeginFrame(
nullptr, raster_thread_merger);
515 embedder->PrepareFlutterView(frame_size, 1.5);
521 embedder->PrerollCompositeEmbeddedView(
523 std::make_unique<EmbeddedViewParams>(matrix,
DlSize(100, 100), stack));
525 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(
526 0, 100, 100, 100, 100, 150, 150, stack));
533 embedder->PrerollCompositeEmbeddedView(
535 std::make_unique<EmbeddedViewParams>(matrix,
DlSize(100, 100), stack));
537 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(
538 1, 300, 100, 100, 100, 150, 150, stack));
548 embedder->CompositeEmbeddedView(1)->DrawRect(
551 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
552 .WillRepeatedly([&]() {
553 return std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
558 EXPECT_CALL(*jni_mock,
559 FlutterViewDisplayOverlaySurface(1, 150, 100, 200, 100))
562 auto surface_frame = std::make_unique<SurfaceFrame>(
563 SkSurfaces::Null(1000, 1000), framebuffer_info,
570 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
571 std::move(surface_frame));
573 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
574 embedder->EndFrame(
false, raster_thread_merger);
578 auto jni_mock = std::make_shared<JNIMock>();
579 auto android_context =
582 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
583 auto gr_context = GrDirectContext::MakeMock(
nullptr);
584 auto frame_size =
DlISize(1000, 1000);
586 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
587 [gr_context,
window, frame_size, framebuffer_info]() {
588 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
589 SkSurfaces::Null(1000, 1000), framebuffer_info,
596 auto surface_mock = std::make_unique<SurfaceMock>();
597 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
599 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
601 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
602 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
604 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
605 .WillOnce(Return(ByMove(std::move(surface_mock))));
607 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
608 return android_surface_mock;
610 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
615 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
616 embedder->BeginFrame(
nullptr, raster_thread_merger);
617 embedder->PrepareFlutterView(frame_size, 1.5);
625 embedder->PrerollCompositeEmbeddedView(
627 std::make_unique<EmbeddedViewParams>(matrix,
DlSize(200, 200), stack));
628 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(0, 0, 0, 200, 200,
637 embedder->CompositeEmbeddedView(0)->DrawRect(
646 embedder->PrerollCompositeEmbeddedView(
648 std::make_unique<EmbeddedViewParams>(matrix,
DlSize(100, 100), stack));
649 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(1, 0, 0, 100, 100,
654 embedder->CompositeEmbeddedView(1)->DrawRect(
DlRect::MakeXYWH(25, 25, 80, 50),
657 embedder->CompositeEmbeddedView(1)->DrawRect(
660 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
661 .WillRepeatedly([&]() {
662 return std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
666 EXPECT_CALL(*jni_mock, FlutterViewDisplayOverlaySurface(1, 25, 25, 80, 150))
669 auto surface_frame = std::make_unique<SurfaceFrame>(
670 SkSurfaces::Null(1000, 1000), framebuffer_info,
677 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
678 std::move(surface_frame));
680 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
681 embedder->EndFrame(
false, raster_thread_merger);
685 auto jni_mock = std::make_shared<JNIMock>();
686 auto android_context =
689 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
690 auto gr_context = GrDirectContext::MakeMock(
nullptr);
691 auto frame_size =
DlISize(1000, 1000);
693 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
694 [gr_context,
window, frame_size, framebuffer_info]() {
695 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
696 SkSurfaces::Null(1000, 1000), framebuffer_info,
703 auto surface_mock = std::make_unique<SurfaceMock>();
704 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
706 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
708 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
709 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
711 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
712 .WillOnce(Return(ByMove(std::move(surface_mock))));
714 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
715 return android_surface_mock;
717 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
722 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
723 embedder->BeginFrame(
nullptr, raster_thread_merger);
724 embedder->PrepareFlutterView(frame_size, 1.5);
732 embedder->PrerollCompositeEmbeddedView(
734 std::make_unique<EmbeddedViewParams>(matrix,
DlSize(200, 200), stack));
735 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(0, 0, 0, 200, 200,
739 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface()).Times(0);
741 auto surface_frame = std::make_unique<SurfaceFrame>(
742 SkSurfaces::Null(1000, 1000), framebuffer_info,
749 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
750 std::move(surface_frame));
752 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
753 embedder->EndFrame(
false, raster_thread_merger);
777 auto jni_mock = std::make_shared<JNIMock>();
779 auto android_context =
781 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
782 auto gr_context = GrDirectContext::MakeMock(
nullptr);
783 auto frame_size =
DlISize(1000, 1000);
785 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
786 [gr_context,
window, frame_size, framebuffer_info]() {
787 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
788 SkSurfaces::Null(1000, 1000), framebuffer_info,
795 auto surface_mock = std::make_unique<SurfaceMock>();
796 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
797 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
799 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
800 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
802 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
803 .WillOnce(Return(ByMove(std::move(surface_mock))));
805 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
807 return android_surface_mock;
810 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
813 auto raster_thread_merger =
818 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
819 embedder->BeginFrame(
nullptr, raster_thread_merger);
820 embedder->PrepareFlutterView(frame_size, 1.5);
826 auto view_params_1 = std::make_unique<EmbeddedViewParams>(
829 embedder->PrerollCompositeEmbeddedView(0, std::move(view_params_1));
832 embedder->CompositeEmbeddedView(0)->DrawRect(
836 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
838 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
841 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(0, 0, 0, 200, 200,
843 EXPECT_CALL(*jni_mock,
844 FlutterViewDisplayOverlaySurface(0, 50, 50, 150, 150));
847 auto surface_frame = std::make_unique<SurfaceFrame>(
848 SkSurfaces::Null(1000, 1000), framebuffer_info,
854 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
855 std::move(surface_frame));
857 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
858 embedder->EndFrame(
false, raster_thread_merger);
861 EXPECT_CALL(*jni_mock, FlutterViewDestroyOverlaySurfaces());
862 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
864 embedder->BeginFrame(
nullptr, raster_thread_merger);
865 embedder->PrepareFlutterView(
DlISize(30, 40), 1.0);
869 auto jni_mock = std::make_shared<JNIMock>();
870 auto android_context =
873 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
874 auto gr_context = GrDirectContext::MakeMock(
nullptr);
875 auto frame_size =
DlISize(1000, 1000);
877 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
878 [gr_context,
window, frame_size, framebuffer_info]() {
879 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
880 SkSurfaces::Null(1000, 1000), framebuffer_info,
887 auto surface_mock = std::make_unique<SurfaceMock>();
888 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
889 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
891 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
892 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
894 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
895 .WillOnce(Return(ByMove(std::move(surface_mock))));
897 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
899 return android_surface_mock;
902 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
908 auto raster_thread_merger =
910 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
911 embedder->BeginFrame(
nullptr, raster_thread_merger);
912 embedder->PrepareFlutterView(frame_size, 1.5);
918 auto view_params_1 = std::make_unique<EmbeddedViewParams>(
921 embedder->PrerollCompositeEmbeddedView(0, std::move(view_params_1));
924 embedder->CompositeEmbeddedView(0)->DrawRect(
928 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
930 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
933 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(0, 0, 0, 200, 200,
935 EXPECT_CALL(*jni_mock,
936 FlutterViewDisplayOverlaySurface(0, 50, 50, 150, 150));
938 auto surface_frame = std::make_unique<SurfaceFrame>(
939 SkSurfaces::Null(1000, 1000), framebuffer_info,
945 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
946 std::move(surface_frame));
948 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
949 embedder->EndFrame(
false, raster_thread_merger);
952 EXPECT_CALL(*jni_mock, FlutterViewDestroyOverlaySurfaces()).Times(1);
953 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame()).Times(0);
956 embedder->BeginFrame(
nullptr,
958 embedder->PrepareFlutterView(
DlISize(30, 40), 1.0);
1000 auto jni_mock = std::make_shared<JNIMock>();
1001 auto android_context =
1003 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
1004 auto gr_context = GrDirectContext::MakeMock(
nullptr);
1005 auto frame_size =
DlISize(1000, 1000);
1006 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
1007 [gr_context,
window, frame_size]() {
1009 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
1010 SkSurfaces::Null(1000, 1000), framebuffer_info,
1014 [](
const SurfaceFrame& surface_frame) {
return true; },
1017 auto surface_mock = std::make_unique<SurfaceMock>();
1018 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
1019 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
1021 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
1022 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
1023 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
1024 .WillOnce(Return(ByMove(std::move(surface_mock))));
1026 return android_surface_mock;
1029 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
1032 auto raster_thread_merger =
1035 embedder->BeginFrame(
nullptr, raster_thread_merger);
1036 embedder->PrepareFlutterView(frame_size, 1.5);
1041 std::make_unique<EmbeddedViewParams>(
DlMatrix(),
DlSize(200, 200), stack);
1043 embedder->PrerollCompositeEmbeddedView(0, std::move(view_params));
1046 embedder->CompositeEmbeddedView(0)->DrawRect(
1050 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
1052 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
1056 auto surface_frame = std::make_unique<SurfaceFrame>(
1057 SkSurfaces::Null(1000, 1000), framebuffer_info,
1059 [](
const SurfaceFrame& surface_frame) {
return true; },
1061 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
1062 std::move(surface_frame));
1064 embedder->EndFrame(
false, raster_thread_merger);
1066 EXPECT_CALL(*jni_mock, FlutterViewDestroyOverlaySurfaces());
1068 embedder->Teardown();