22// Use of this source code is governed by a BSD-style license that can be
33// found in the LICENSE file.
44
5+ #define FML_USED_ON_EMBEDDER
6+
57#include < memory>
68#include " flutter/shell/platform/android/external_view_embedder/external_view_embedder.h"
79
@@ -87,12 +89,24 @@ fml::RefPtr<fml::RasterThreadMerger> GetThreadMergerFromRasterThread(
8789 rasterizer_queue_id);
8890}
8991
92+ TaskRunners GetTaskRunnersForFixture () {
93+ fml::MessageLoop::EnsureInitializedForCurrentThread ();
94+ auto & loop = fml::MessageLoop::GetCurrent ();
95+ return {
96+ " test" ,
97+ loop.GetTaskRunner (), // platform
98+ loop.GetTaskRunner (), // raster
99+ loop.GetTaskRunner (), // ui
100+ loop.GetTaskRunner () // io
101+ };
102+ }
103+
90104TEST (AndroidExternalViewEmbedder, GetCurrentCanvases) {
91105 auto jni_mock = std::make_shared<JNIMock>();
92106
93107 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
94108 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
95- android_context, jni_mock, nullptr );
109+ android_context, jni_mock, nullptr , GetTaskRunnersForFixture () );
96110 fml::Thread rasterizer_thread (" rasterizer" );
97111 auto raster_thread_merger =
98112 GetThreadMergerFromPlatformThread (&rasterizer_thread);
@@ -117,7 +131,7 @@ TEST(AndroidExternalViewEmbedder, GetCurrentCanvasesCompositeOrder) {
117131
118132 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
119133 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
120- android_context, jni_mock, nullptr );
134+ android_context, jni_mock, nullptr , GetTaskRunnersForFixture () );
121135 fml::Thread rasterizer_thread (" rasterizer" );
122136 auto raster_thread_merger =
123137 GetThreadMergerFromPlatformThread (&rasterizer_thread);
@@ -140,7 +154,7 @@ TEST(AndroidExternalViewEmbedder, GetCurrentCanvasesCompositeOrder) {
140154TEST (AndroidExternalViewEmbedder, CompositeEmbeddedView) {
141155 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
142156 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
143- android_context, nullptr , nullptr );
157+ android_context, nullptr , nullptr , GetTaskRunnersForFixture () );
144158
145159 ASSERT_EQ (nullptr , embedder->CompositeEmbeddedView (0 ));
146160 embedder->PrerollCompositeEmbeddedView (
@@ -156,7 +170,7 @@ TEST(AndroidExternalViewEmbedder, CompositeEmbeddedView) {
156170TEST (AndroidExternalViewEmbedder, CancelFrame) {
157171 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
158172 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
159- android_context, nullptr , nullptr );
173+ android_context, nullptr , nullptr , GetTaskRunnersForFixture () );
160174
161175 embedder->PrerollCompositeEmbeddedView (
162176 0 , std::make_unique<EmbeddedViewParams>());
@@ -170,7 +184,7 @@ TEST(AndroidExternalViewEmbedder, RasterizerRunsOnPlatformThread) {
170184 auto jni_mock = std::make_shared<JNIMock>();
171185 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
172186 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
173- android_context, jni_mock, nullptr );
187+ android_context, jni_mock, nullptr , GetTaskRunnersForFixture () );
174188
175189 fml::Thread rasterizer_thread (" rasterizer" );
176190 auto raster_thread_merger =
@@ -204,7 +218,7 @@ TEST(AndroidExternalViewEmbedder, RasterizerRunsOnRasterizerThread) {
204218 auto jni_mock = std::make_shared<JNIMock>();
205219 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
206220 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
207- android_context, jni_mock, nullptr );
221+ android_context, jni_mock, nullptr , GetTaskRunnersForFixture () );
208222
209223 fml::Thread rasterizer_thread (" rasterizer" );
210224 auto raster_thread_merger =
@@ -225,7 +239,7 @@ TEST(AndroidExternalViewEmbedder, PlatformViewRect) {
225239
226240 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
227241 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
228- android_context, jni_mock, nullptr );
242+ android_context, jni_mock, nullptr , GetTaskRunnersForFixture () );
229243 fml::Thread rasterizer_thread (" rasterizer" );
230244 auto raster_thread_merger =
231245 GetThreadMergerFromPlatformThread (&rasterizer_thread);
@@ -253,7 +267,7 @@ TEST(AndroidExternalViewEmbedder, PlatformViewRectChangedParams) {
253267
254268 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
255269 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
256- android_context, jni_mock, nullptr );
270+ android_context, jni_mock, nullptr , GetTaskRunnersForFixture () );
257271 fml::Thread rasterizer_thread (" rasterizer" );
258272 auto raster_thread_merger =
259273 GetThreadMergerFromPlatformThread (&rasterizer_thread);
@@ -328,7 +342,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrame) {
328342 return android_surface_mock;
329343 });
330344 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
331- *android_context, jni_mock, surface_factory);
345+ *android_context, jni_mock, surface_factory, GetTaskRunnersForFixture () );
332346
333347 auto raster_thread_merger = GetThreadMergerFromPlatformThread ();
334348
@@ -521,7 +535,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFrameOverlayComposition) {
521535 return android_surface_mock;
522536 });
523537 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
524- *android_context, jni_mock, surface_factory);
538+ *android_context, jni_mock, surface_factory, GetTaskRunnersForFixture () );
525539
526540 auto raster_thread_merger = GetThreadMergerFromPlatformThread ();
527541
@@ -623,7 +637,7 @@ TEST(AndroidExternalViewEmbedder, SubmitFramePlatformViewWithoutAnyOverlay) {
623637 return android_surface_mock;
624638 });
625639 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
626- *android_context, jni_mock, surface_factory);
640+ *android_context, jni_mock, surface_factory, GetTaskRunnersForFixture () );
627641
628642 auto raster_thread_merger = GetThreadMergerFromPlatformThread ();
629643
@@ -662,7 +676,7 @@ TEST(AndroidExternalViewEmbedder, DoesNotCallJNIPlatformThreadOnlyMethods) {
662676
663677 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
664678 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
665- android_context, jni_mock, nullptr );
679+ android_context, jni_mock, nullptr , GetTaskRunnersForFixture () );
666680
667681 // While on the raster thread, don't make JNI calls as these methods can only
668682 // run on the platform thread.
@@ -711,7 +725,7 @@ TEST(AndroidExternalViewEmbedder, DestroyOverlayLayersOnSizeChange) {
711725 });
712726
713727 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
714- *android_context, jni_mock, surface_factory);
728+ *android_context, jni_mock, surface_factory, GetTaskRunnersForFixture () );
715729 fml::Thread rasterizer_thread (" rasterizer" );
716730 auto raster_thread_merger =
717731 GetThreadMergerFromPlatformThread (&rasterizer_thread);
@@ -798,7 +812,7 @@ TEST(AndroidExternalViewEmbedder, DoesNotDestroyOverlayLayersOnSizeChange) {
798812 });
799813
800814 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
801- *android_context, jni_mock, surface_factory);
815+ *android_context, jni_mock, surface_factory, GetTaskRunnersForFixture () );
802816
803817 // ------------------ First frame ------------------ //
804818 {
@@ -843,9 +857,7 @@ TEST(AndroidExternalViewEmbedder, DoesNotDestroyOverlayLayersOnSizeChange) {
843857 embedder->EndFrame (/* should_resubmit_frame=*/ false , raster_thread_merger);
844858 }
845859
846- // Changing the frame size from the raster thread does not make JNI calls.
847-
848- EXPECT_CALL (*jni_mock, FlutterViewDestroyOverlaySurfaces ()).Times (0 );
860+ EXPECT_CALL (*jni_mock, FlutterViewDestroyOverlaySurfaces ()).Times (1 );
849861 EXPECT_CALL (*jni_mock, FlutterViewBeginFrame ()).Times (0 );
850862
851863 fml::Thread platform_thread (" platform" );
@@ -857,15 +869,15 @@ TEST(AndroidExternalViewEmbedder, SupportsDynamicThreadMerging) {
857869 auto jni_mock = std::make_shared<JNIMock>();
858870 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
859871 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
860- android_context, jni_mock, nullptr );
872+ android_context, jni_mock, nullptr , GetTaskRunnersForFixture () );
861873 ASSERT_TRUE (embedder->SupportsDynamicThreadMerging ());
862874}
863875
864876TEST (AndroidExternalViewEmbedder, DisableThreadMerger) {
865877 auto jni_mock = std::make_shared<JNIMock>();
866878 auto android_context = AndroidContext (AndroidRenderingAPI::kSoftware );
867879 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
868- android_context, jni_mock, nullptr );
880+ android_context, jni_mock, nullptr , GetTaskRunnersForFixture () );
869881
870882 fml::Thread platform_thread (" platform" );
871883 auto raster_thread_merger = GetThreadMergerFromRasterThread (&platform_thread);
@@ -921,7 +933,7 @@ TEST(AndroidExternalViewEmbedder, Teardown) {
921933 });
922934
923935 auto embedder = std::make_unique<AndroidExternalViewEmbedder>(
924- *android_context, jni_mock, surface_factory);
936+ *android_context, jni_mock, surface_factory, GetTaskRunnersForFixture () );
925937 fml::Thread rasterizer_thread (" rasterizer" );
926938 auto raster_thread_merger =
927939 GetThreadMergerFromPlatformThread (&rasterizer_thread);
0 commit comments