139 auto jni_mock = std::make_shared<JNIMock>();
141 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
145 auto raster_thread_merger =
147 ASSERT_FALSE(raster_thread_merger->IsMerged());
149 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
150 embedder->BeginFrame(
nullptr, raster_thread_merger);
151 embedder->PrepareFlutterView(
DlISize(10, 20), 1.0);
154 embedder->PrerollCompositeEmbeddedView(
155 0, std::make_unique<EmbeddedViewParams>());
157 auto postpreroll_result = embedder->PostPrerollAction(raster_thread_merger);
160 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
161 embedder->EndFrame(
true, raster_thread_merger);
163 ASSERT_TRUE(raster_thread_merger->IsMerged());
165 int pending_frames = 0;
166 while (raster_thread_merger->IsMerged()) {
167 raster_thread_merger->DecrementLease();
170 ASSERT_EQ(10, pending_frames);
260 auto jni_mock = std::make_shared<JNIMock>();
261 auto android_context =
264 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
265 auto gr_context = GrDirectContext::MakeMock(
nullptr);
266 auto frame_size =
DlISize(1000, 1000);
268 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
269 [gr_context,
window, frame_size, framebuffer_info]() {
270 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
271 SkSurfaces::Null(1000, 1000), framebuffer_info,
277 auto surface_frame_2 = std::make_unique<SurfaceFrame>(
278 SkSurfaces::Null(1000, 1000), framebuffer_info,
285 auto surface_mock = std::make_unique<SurfaceMock>();
286 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
288 .WillOnce(Return(ByMove(std::move(surface_frame_1))))
289 .WillOnce(Return(ByMove(std::move(surface_frame_2))));
291 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
292 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
294 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
295 .WillOnce(Return(ByMove(std::move(surface_mock))));
297 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
299 return android_surface_mock;
301 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
308 auto did_submit_frame =
false;
309 auto surface_frame = std::make_unique<SurfaceFrame>(
310 SkSurfaces::Null(1000, 1000), framebuffer_info,
313 if (canvas !=
nullptr) {
314 did_submit_frame =
true;
321 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
322 std::move(surface_frame));
324 EXPECT_TRUE(did_submit_frame);
326 auto postpreroll_result = embedder->PostPrerollAction(raster_thread_merger);
329 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
330 embedder->EndFrame(
false, raster_thread_merger);
335 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
336 embedder->BeginFrame(
nullptr, raster_thread_merger);
337 embedder->PrepareFlutterView(frame_size, 1.5);
349 std::make_unique<EmbeddedViewParams>(matrix1,
DlSize(200, 200), stack1);
351 embedder->PrerollCompositeEmbeddedView(0, std::move(view_params_1));
353 auto canvas_1 = embedder->CompositeEmbeddedView(0);
366 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
368 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
371 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(
372 0, 150, 150, 300, 300, 300, 300, stack1));
374 EXPECT_CALL(*jni_mock,
375 FlutterViewDisplayOverlaySurface(0, 150, 150, 100, 100));
377 auto did_submit_frame =
false;
378 auto surface_frame = std::make_unique<SurfaceFrame>(
379 SkSurfaces::Null(1000, 1000), framebuffer_info,
382 if (canvas !=
nullptr) {
383 did_submit_frame =
true;
390 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
391 std::move(surface_frame));
393 EXPECT_FALSE(did_submit_frame);
395 auto postpreroll_result = embedder->PostPrerollAction(raster_thread_merger);
398 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
399 embedder->EndFrame(
false, raster_thread_merger);
404 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
405 embedder->BeginFrame(
nullptr, raster_thread_merger);
406 embedder->PrepareFlutterView(frame_size, 1.5);
418 std::make_unique<EmbeddedViewParams>(matrix1,
DlSize(200, 200), stack1);
420 embedder->PrerollCompositeEmbeddedView(0, std::move(view_params_1));
422 auto canvas_1 = embedder->CompositeEmbeddedView(0);
436 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface()).Times(0);
438 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(
439 0, 150, 150, 300, 300, 300, 300, stack1));
441 EXPECT_CALL(*jni_mock,
442 FlutterViewDisplayOverlaySurface(0, 150, 150, 100, 100));
444 auto did_submit_frame =
false;
445 auto surface_frame = std::make_unique<SurfaceFrame>(
446 SkSurfaces::Null(1000, 1000), framebuffer_info,
449 if (canvas !=
nullptr) {
450 did_submit_frame =
true;
456 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
457 std::move(surface_frame));
459 EXPECT_TRUE(did_submit_frame);
461 auto postpreroll_result = embedder->PostPrerollAction(raster_thread_merger);
464 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
465 embedder->EndFrame(
false, raster_thread_merger);
473 auto jni_mock = std::make_shared<JNIMock>();
474 auto android_context =
477 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
478 auto gr_context = GrDirectContext::MakeMock(
nullptr);
479 auto frame_size =
DlISize(1000, 1000);
481 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
482 [gr_context,
window, frame_size, framebuffer_info]() {
483 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
484 SkSurfaces::Null(1000, 1000), framebuffer_info,
491 auto surface_mock = std::make_unique<SurfaceMock>();
492 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
494 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
496 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
497 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
499 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
500 .WillOnce(Return(ByMove(std::move(surface_mock))));
502 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
503 return android_surface_mock;
505 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
510 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
511 embedder->BeginFrame(
nullptr, raster_thread_merger);
512 embedder->PrepareFlutterView(frame_size, 1.5);
518 embedder->PrerollCompositeEmbeddedView(
520 std::make_unique<EmbeddedViewParams>(matrix,
DlSize(100, 100), stack));
522 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(
523 0, 100, 100, 100, 100, 150, 150, stack));
530 embedder->PrerollCompositeEmbeddedView(
532 std::make_unique<EmbeddedViewParams>(matrix,
DlSize(100, 100), stack));
534 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(
535 1, 300, 100, 100, 100, 150, 150, stack));
545 embedder->CompositeEmbeddedView(1)->DrawRect(
548 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
549 .WillRepeatedly([&]() {
550 return std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
555 EXPECT_CALL(*jni_mock,
556 FlutterViewDisplayOverlaySurface(1, 150, 100, 200, 100))
559 auto surface_frame = std::make_unique<SurfaceFrame>(
560 SkSurfaces::Null(1000, 1000), framebuffer_info,
567 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
568 std::move(surface_frame));
570 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
571 embedder->EndFrame(
false, raster_thread_merger);
575 auto jni_mock = std::make_shared<JNIMock>();
576 auto android_context =
579 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
580 auto gr_context = GrDirectContext::MakeMock(
nullptr);
581 auto frame_size =
DlISize(1000, 1000);
583 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
584 [gr_context,
window, frame_size, framebuffer_info]() {
585 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
586 SkSurfaces::Null(1000, 1000), framebuffer_info,
593 auto surface_mock = std::make_unique<SurfaceMock>();
594 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
596 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
598 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
599 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
601 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
602 .WillOnce(Return(ByMove(std::move(surface_mock))));
604 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
605 return android_surface_mock;
607 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
612 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
613 embedder->BeginFrame(
nullptr, raster_thread_merger);
614 embedder->PrepareFlutterView(frame_size, 1.5);
622 embedder->PrerollCompositeEmbeddedView(
624 std::make_unique<EmbeddedViewParams>(matrix,
DlSize(200, 200), stack));
625 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(0, 0, 0, 200, 200,
634 embedder->CompositeEmbeddedView(0)->DrawRect(
643 embedder->PrerollCompositeEmbeddedView(
645 std::make_unique<EmbeddedViewParams>(matrix,
DlSize(100, 100), stack));
646 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(1, 0, 0, 100, 100,
651 embedder->CompositeEmbeddedView(1)->DrawRect(
DlRect::MakeXYWH(25, 25, 80, 50),
654 embedder->CompositeEmbeddedView(1)->DrawRect(
657 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
658 .WillRepeatedly([&]() {
659 return std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
663 EXPECT_CALL(*jni_mock, FlutterViewDisplayOverlaySurface(1, 25, 25, 80, 150))
666 auto surface_frame = std::make_unique<SurfaceFrame>(
667 SkSurfaces::Null(1000, 1000), framebuffer_info,
674 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
675 std::move(surface_frame));
677 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
678 embedder->EndFrame(
false, raster_thread_merger);
682 auto jni_mock = std::make_shared<JNIMock>();
683 auto android_context =
686 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
687 auto gr_context = GrDirectContext::MakeMock(
nullptr);
688 auto frame_size =
DlISize(1000, 1000);
690 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
691 [gr_context,
window, frame_size, framebuffer_info]() {
692 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
693 SkSurfaces::Null(1000, 1000), framebuffer_info,
700 auto surface_mock = std::make_unique<SurfaceMock>();
701 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
703 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
705 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
706 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
708 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
709 .WillOnce(Return(ByMove(std::move(surface_mock))));
711 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
712 return android_surface_mock;
714 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
719 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
720 embedder->BeginFrame(
nullptr, raster_thread_merger);
721 embedder->PrepareFlutterView(frame_size, 1.5);
729 embedder->PrerollCompositeEmbeddedView(
731 std::make_unique<EmbeddedViewParams>(matrix,
DlSize(200, 200), stack));
732 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(0, 0, 0, 200, 200,
736 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface()).Times(0);
738 auto surface_frame = std::make_unique<SurfaceFrame>(
739 SkSurfaces::Null(1000, 1000), framebuffer_info,
746 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
747 std::move(surface_frame));
749 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
750 embedder->EndFrame(
false, raster_thread_merger);
774 auto jni_mock = std::make_shared<JNIMock>();
776 auto android_context =
778 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
779 auto gr_context = GrDirectContext::MakeMock(
nullptr);
780 auto frame_size =
DlISize(1000, 1000);
782 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
783 [gr_context,
window, frame_size, framebuffer_info]() {
784 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
785 SkSurfaces::Null(1000, 1000), framebuffer_info,
792 auto surface_mock = std::make_unique<SurfaceMock>();
793 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
794 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
796 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
797 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
799 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
800 .WillOnce(Return(ByMove(std::move(surface_mock))));
802 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
804 return android_surface_mock;
807 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
810 auto raster_thread_merger =
815 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
816 embedder->BeginFrame(
nullptr, raster_thread_merger);
817 embedder->PrepareFlutterView(frame_size, 1.5);
823 auto view_params_1 = std::make_unique<EmbeddedViewParams>(
826 embedder->PrerollCompositeEmbeddedView(0, std::move(view_params_1));
829 embedder->CompositeEmbeddedView(0)->DrawRect(
833 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
835 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
838 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(0, 0, 0, 200, 200,
840 EXPECT_CALL(*jni_mock,
841 FlutterViewDisplayOverlaySurface(0, 50, 50, 150, 150));
844 auto surface_frame = std::make_unique<SurfaceFrame>(
845 SkSurfaces::Null(1000, 1000), framebuffer_info,
851 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
852 std::move(surface_frame));
854 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
855 embedder->EndFrame(
false, raster_thread_merger);
858 EXPECT_CALL(*jni_mock, FlutterViewDestroyOverlaySurfaces());
859 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
861 embedder->BeginFrame(
nullptr, raster_thread_merger);
862 embedder->PrepareFlutterView(
DlISize(30, 40), 1.0);
866 auto jni_mock = std::make_shared<JNIMock>();
867 auto android_context =
870 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
871 auto gr_context = GrDirectContext::MakeMock(
nullptr);
872 auto frame_size =
DlISize(1000, 1000);
874 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
875 [gr_context,
window, frame_size, framebuffer_info]() {
876 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
877 SkSurfaces::Null(1000, 1000), framebuffer_info,
884 auto surface_mock = std::make_unique<SurfaceMock>();
885 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
886 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
888 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
889 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
891 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
892 .WillOnce(Return(ByMove(std::move(surface_mock))));
894 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
896 return android_surface_mock;
899 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
905 auto raster_thread_merger =
907 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame());
908 embedder->BeginFrame(
nullptr, raster_thread_merger);
909 embedder->PrepareFlutterView(frame_size, 1.5);
915 auto view_params_1 = std::make_unique<EmbeddedViewParams>(
918 embedder->PrerollCompositeEmbeddedView(0, std::move(view_params_1));
921 embedder->CompositeEmbeddedView(0)->DrawRect(
925 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
927 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
930 EXPECT_CALL(*jni_mock, FlutterViewOnDisplayPlatformView(0, 0, 0, 200, 200,
932 EXPECT_CALL(*jni_mock,
933 FlutterViewDisplayOverlaySurface(0, 50, 50, 150, 150));
935 auto surface_frame = std::make_unique<SurfaceFrame>(
936 SkSurfaces::Null(1000, 1000), framebuffer_info,
942 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
943 std::move(surface_frame));
945 EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
946 embedder->EndFrame(
false, raster_thread_merger);
949 EXPECT_CALL(*jni_mock, FlutterViewDestroyOverlaySurfaces()).Times(1);
950 EXPECT_CALL(*jni_mock, FlutterViewBeginFrame()).Times(0);
953 embedder->BeginFrame(
nullptr,
955 embedder->PrepareFlutterView(
DlISize(30, 40), 1.0);
997 auto jni_mock = std::make_shared<JNIMock>();
998 auto android_context =
1000 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
1001 auto gr_context = GrDirectContext::MakeMock(
nullptr);
1002 auto frame_size =
DlISize(1000, 1000);
1003 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
1004 [gr_context,
window, frame_size]() {
1006 auto surface_frame_1 = std::make_unique<SurfaceFrame>(
1007 SkSurfaces::Null(1000, 1000), framebuffer_info,
1011 [](
const SurfaceFrame& surface_frame) {
return true; },
1014 auto surface_mock = std::make_unique<SurfaceMock>();
1015 EXPECT_CALL(*surface_mock, AcquireFrame(frame_size))
1016 .WillOnce(Return(ByMove(std::move(surface_frame_1))));
1018 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
1019 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
1020 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()))
1021 .WillOnce(Return(ByMove(std::move(surface_mock))));
1023 return android_surface_mock;
1026 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
1029 auto raster_thread_merger =
1032 embedder->BeginFrame(
nullptr, raster_thread_merger);
1033 embedder->PrepareFlutterView(frame_size, 1.5);
1038 std::make_unique<EmbeddedViewParams>(
DlMatrix(),
DlSize(200, 200), stack);
1040 embedder->PrerollCompositeEmbeddedView(0, std::move(view_params));
1043 embedder->CompositeEmbeddedView(0)->DrawRect(
1047 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
1049 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
1053 auto surface_frame = std::make_unique<SurfaceFrame>(
1054 SkSurfaces::Null(1000, 1000), framebuffer_info,
1056 [](
const SurfaceFrame& surface_frame) {
return true; },
1058 embedder->SubmitFlutterView(
kImplicitViewId, gr_context.get(),
nullptr,
1059 std::move(surface_frame));
1061 embedder->EndFrame(
false, raster_thread_merger);
1063 EXPECT_CALL(*jni_mock, FlutterViewDestroyOverlaySurfaces());
1065 embedder->Teardown();