17#include "third_party/dart/runtime/include/dart_api.h"
43 auto settings = CreateSettingsForFixture();
46 auto vm_data = vm_ref.GetVMData();
49 GetCurrentTaskRunner(),
50 GetCurrentTaskRunner(),
51 GetCurrentTaskRunner(),
52 GetCurrentTaskRunner()
55 auto isolate_configuration =
62 vm_data->GetSettings(),
63 vm_data->GetIsolateSnapshot(),
67 settings.isolate_create_callback,
68 settings.isolate_shutdown_callback,
72 std::move(isolate_configuration),
75 auto root_isolate = weak_isolate.lock();
76 ASSERT_TRUE(root_isolate);
78 ASSERT_TRUE(root_isolate->Shutdown());
83 auto settings = CreateSettingsForFixture();
86 auto vm_data = vm_ref.GetVMData();
89 GetCurrentTaskRunner(),
90 GetCurrentTaskRunner(),
91 GetCurrentTaskRunner(),
92 GetCurrentTaskRunner()
94 auto isolate_configuration =
101 vm_data->GetSettings(),
102 vm_data->GetIsolateSnapshot(),
106 settings.isolate_create_callback,
107 settings.isolate_shutdown_callback,
111 std::move(isolate_configuration),
114 auto root_isolate = weak_isolate.lock();
115 ASSERT_TRUE(root_isolate);
117 size_t destruction_callback_count = 0;
118 root_isolate->AddIsolateShutdownCallback([&destruction_callback_count]() {
119 ASSERT_NE(Dart_CurrentIsolate(),
nullptr);
120 destruction_callback_count++;
122 ASSERT_TRUE(root_isolate->Shutdown());
123 ASSERT_EQ(destruction_callback_count, 1u);
128 const auto settings = CreateSettingsForFixture();
131 GetCurrentTaskRunner(),
132 GetCurrentTaskRunner(),
133 GetCurrentTaskRunner(),
134 GetCurrentTaskRunner()
138 ASSERT_TRUE(isolate);
144 const auto settings = CreateSettingsForFixture();
147 GetCurrentTaskRunner(),
148 GetCurrentTaskRunner(),
149 GetCurrentTaskRunner(),
150 GetCurrentTaskRunner()
155 ASSERT_FALSE(isolate);
160 const auto settings = CreateSettingsForFixture();
163 GetCurrentTaskRunner(),
164 GetCurrentTaskRunner(),
165 GetCurrentTaskRunner(),
166 GetCurrentTaskRunner()
171 ASSERT_TRUE(isolate);
173 ASSERT_TRUE(isolate->RunInIsolateScope([]() ->
bool {
174 if (tonic::CheckAndHandleError(::Dart_Invoke(
175 Dart_RootLibrary(), tonic::ToDart(
"sayHi"), 0, nullptr))) {
184 auto settings = CreateSettingsForFixture();
185 settings.enable_impeller =
true;
188 GetCurrentTaskRunner(),
189 GetCurrentTaskRunner(),
190 GetCurrentTaskRunner(),
191 GetCurrentTaskRunner()
196 ASSERT_TRUE(isolate);
198 ASSERT_TRUE(isolate->RunInIsolateScope([settings]() ->
bool {
199 Dart_Handle dart_ui = ::Dart_LookupLibrary(tonic::ToDart(
"dart:ui"));
200 if (tonic::CheckAndHandleError(dart_ui)) {
203 Dart_Handle impeller_enabled =
210 Dart_BooleanValue(impeller_enabled, &result))) {
213 return result == settings.enable_impeller;
218 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
219 auto settings = CreateSettingsForFixture();
220 settings.enable_impeller =
false;
221 auto vm_ref = DartVMRef::Create(settings);
223 GetCurrentTaskRunner(),
224 GetCurrentTaskRunner(),
225 GetCurrentTaskRunner(),
226 GetCurrentTaskRunner()
231 ASSERT_TRUE(isolate);
232 ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
233 ASSERT_TRUE(isolate->RunInIsolateScope([settings]() ->
bool {
234 Dart_Handle dart_ui = ::Dart_LookupLibrary(tonic::ToDart(
"dart:ui"));
235 if (tonic::CheckAndHandleError(dart_ui)) {
238 Dart_Handle impeller_enabled =
245 Dart_BooleanValue(impeller_enabled, &result))) {
248 return result == settings.enable_impeller;
253 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
257 const auto settings = CreateSettingsForFixture();
258 auto vm_ref = DartVMRef::Create(settings);
259 auto thread = CreateNewThread();
267 "canRegisterNativeCallback", {},
269 ASSERT_TRUE(isolate);
270 ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
289 return root_isolate_shutdown_latch_.IsSignaledForTest();
301 AddNativeCallback(
"NotifyNative",
308 Dart_GetNativeArgument(
args, 0));
309 ASSERT_EQ(
"Hello from code is secondary isolate.",
message);
312 auto settings = CreateSettingsForFixture();
313 settings.root_isolate_shutdown_callback = [
this]() {
314 RootIsolateShutdownSignal();
316 settings.isolate_shutdown_callback = [
this]() { ChildShutdownSignal(); };
317 auto vm_ref = DartVMRef::Create(settings);
318 auto thread = CreateNewThread();
326 "testCanLaunchSecondaryIsolate", {},
328 ASSERT_TRUE(isolate);
329 ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
331 ASSERT_FALSE(RootIsolateIsSignaled());
349 HandlesIsolateInitializationFailureCorrectly) {
350 AddNativeCallback(
"MakeNextIsolateSpawnFail",
352 Dart_SetRootLibrary(Dart_Null());
354 AddNativeCallback(
"NotifyNative",
356 ([
this](Dart_NativeArguments
args) { NotifyDone(); })));
357 auto settings = CreateSettingsForFixture();
358 auto vm_ref = DartVMRef::Create(settings);
359 auto thread = CreateNewThread();
367 "testIsolateStartupFailure", {},
369 ASSERT_TRUE(isolate);
370 ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
375 AddNativeCallback(
"NotifyNative",
378 Dart_GetNativeArgument(
args, 0)));
382 const auto settings = CreateSettingsForFixture();
383 auto vm_ref = DartVMRef::Create(settings);
384 auto thread = CreateNewThread();
392 "testCanReceiveArguments", {
"arg1"},
394 ASSERT_TRUE(isolate);
395 ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
401#if (FLUTTER_RUNTIME_MODE != FLUTTER_RUNTIME_MODE_DEBUG) && \
402 (FLUTTER_RUNTIME_MODE != FLUTTER_RUNTIME_MODE_PROFILE)
405 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
407 auto settings = CreateSettingsForFixture();
408 settings.enable_vm_service =
true;
409 settings.vm_service_port = 0;
410 settings.vm_service_host =
"127.0.0.1";
411 settings.enable_service_port_fallback =
true;
412 settings.service_isolate_create_callback = [&service_isolate_latch]() {
413 service_isolate_latch.
Signal();
415 auto vm_ref = DartVMRef::Create(settings);
417 auto vm_data = vm_ref.GetVMData();
418 ASSERT_TRUE(vm_data);
420 GetCurrentTaskRunner(),
421 GetCurrentTaskRunner(),
422 GetCurrentTaskRunner(),
423 GetCurrentTaskRunner()
426 auto isolate_configuration =
427 IsolateConfiguration::InferFromSettings(settings);
432 auto weak_isolate = DartIsolate::CreateRunningRootIsolate(
433 vm_data->GetSettings(),
434 vm_data->GetIsolateSnapshot(),
438 settings.isolate_create_callback,
439 settings.isolate_shutdown_callback,
443 std::move(isolate_configuration),
447 auto root_isolate = weak_isolate.lock();
448 ASSERT_TRUE(root_isolate);
449 ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Running);
450 service_isolate_latch.
Wait();
451 ASSERT_TRUE(root_isolate->Shutdown());
455 RootIsolateCreateCallbackIsMadeOnceAndBeforeIsolateRunning) {
456 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
457 auto settings = CreateSettingsForFixture();
458 size_t create_callback_count = 0u;
459 settings.root_isolate_create_callback =
460 [&create_callback_count](
const auto& isolate) {
461 ASSERT_EQ(isolate.GetPhase(), DartIsolate::Phase::Ready);
462 create_callback_count++;
463 ASSERT_NE(::Dart_CurrentIsolate(),
nullptr);
465 auto vm_ref = DartVMRef::Create(settings);
467 GetCurrentTaskRunner(),
468 GetCurrentTaskRunner(),
469 GetCurrentTaskRunner(),
470 GetCurrentTaskRunner()
475 ASSERT_TRUE(isolate);
476 ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
478 ASSERT_EQ(create_callback_count, 1u);
482 IsolateCreateCallbacksTakeInstanceSettingsInsteadOfVMSettings) {
483 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
484 auto vm_settings = CreateSettingsForFixture();
485 auto vm_ref = DartVMRef::Create(vm_settings);
486 auto instance_settings = vm_settings;
487 size_t create_callback_count = 0u;
488 instance_settings.root_isolate_create_callback =
489 [&create_callback_count](
const auto& isolate) {
490 ASSERT_EQ(isolate.GetPhase(), DartIsolate::Phase::Ready);
491 create_callback_count++;
492 ASSERT_NE(::Dart_CurrentIsolate(),
nullptr);
495 GetCurrentTaskRunner(),
496 GetCurrentTaskRunner(),
497 GetCurrentTaskRunner(),
498 GetCurrentTaskRunner()
503 ASSERT_TRUE(isolate);
504 ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
506 ASSERT_EQ(create_callback_count, 1u);
510 if (!DartVM::IsRunningPrecompiledCode()) {
511 FML_LOG(INFO) <<
"Split AOT does not work in JIT mode";
514 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
515 auto settings = CreateSettingsForFixture();
516 auto vm_ref = DartVMRef::Create(settings);
518 auto vm_data = vm_ref.GetVMData();
519 ASSERT_TRUE(vm_data);
521 GetCurrentTaskRunner(),
522 GetCurrentTaskRunner(),
523 GetCurrentTaskRunner(),
524 GetCurrentTaskRunner()
526 auto isolate_configuration =
527 IsolateConfiguration::InferFromSettings(settings);
532 auto weak_isolate = DartIsolate::CreateRunningRootIsolate(
533 vm_data->GetSettings(),
534 vm_data->GetIsolateSnapshot(),
538 settings.isolate_create_callback,
539 settings.isolate_shutdown_callback,
543 std::move(isolate_configuration),
547 auto root_isolate = weak_isolate.lock();
548 ASSERT_TRUE(root_isolate);
549 ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Running);
551 auto isolate_data = std::make_unique<const fml::NonOwnedMapping>(
552 split_aot_symbols_.vm_isolate_data, 0);
553 auto isolate_instructions = std::make_unique<const fml::NonOwnedMapping>(
554 split_aot_symbols_.vm_isolate_instrs, 0);
557 ASSERT_FALSE(root_isolate->LoadLoadingUnit(3, std::move(isolate_data),
558 std::move(isolate_instructions)));
559 ASSERT_TRUE(root_isolate->Shutdown());
563 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
565 std::vector<std::string> messages;
572 Dart_GetNativeArgument(
args, 0));
577 const auto settings = CreateSettingsForFixture();
578 auto vm_ref = DartVMRef::Create(settings);
579 auto thread = CreateNewThread();
587 "mainForPluginRegistrantTest", {},
589 ASSERT_TRUE(isolate);
590 ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
592 ASSERT_EQ(messages.size(), 1u);
593 ASSERT_EQ(messages[0],
"_PluginRegistrant.register() was called");
597 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
598 auto settings = CreateSettingsForFixture();
599 auto vm_ref = DartVMRef::Create(settings);
601 auto vm_data = vm_ref.GetVMData();
602 ASSERT_TRUE(vm_data);
604 GetCurrentTaskRunner(),
605 GetCurrentTaskRunner(),
606 GetCurrentTaskRunner(),
607 GetCurrentTaskRunner()
610 size_t get_kernel_count = 0u;
611 if (!DartVM::IsRunningPrecompiledCode()) {
612 ASSERT_TRUE(settings.application_kernels);
613 auto mappings = settings.application_kernels();
614 ASSERT_EQ(mappings.size(), 1u);
621 mapping = std::move(mappings.front())]() mutable ->
Mappings {
623 EXPECT_EQ(get_kernel_count, 1u)
624 <<
"Unexpectedly got more than one call for the kernel mapping.";
625 EXPECT_TRUE(mapping);
626 std::vector<std::unique_ptr<const fml::Mapping>> kernel_mappings;
628 kernel_mappings.emplace_back(std::move(mapping));
630 return kernel_mappings;
634 std::shared_ptr<DartIsolate> root_isolate;
636 auto isolate_configuration =
637 IsolateConfiguration::InferFromSettings(settings);
640 context.advisory_script_uri =
"main.dart";
641 context.advisory_script_entrypoint =
"main";
642 auto weak_isolate = DartIsolate::CreateRunningRootIsolate(
643 vm_data->GetSettings(),
644 vm_data->GetIsolateSnapshot(),
648 settings.isolate_create_callback,
649 settings.isolate_shutdown_callback,
653 std::move(isolate_configuration),
655 root_isolate = weak_isolate.lock();
657 ASSERT_TRUE(root_isolate);
658 ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Running);
659 if (!DartVM::IsRunningPrecompiledCode()) {
660 ASSERT_EQ(get_kernel_count, 1u);
664 auto isolate_configuration = IsolateConfiguration::InferFromSettings(
668 IsolateLaunchType::kExistingGroup);
670 UIDartState::Context context(task_runners);
671 context.advisory_script_uri =
"main.dart";
672 context.advisory_script_entrypoint =
"main";
673 auto weak_isolate = DartIsolate::CreateRunningRootIsolate(
674 vm_data->GetSettings(),
675 vm_data->GetIsolateSnapshot(),
677 DartIsolate::Flags{},
679 settings.isolate_create_callback,
680 settings.isolate_shutdown_callback,
684 std::move(isolate_configuration),
687 auto spawned_isolate = weak_isolate.lock();
688 ASSERT_TRUE(spawned_isolate);
689 ASSERT_EQ(spawned_isolate->GetPhase(), DartIsolate::Phase::Running);
690 if (!DartVM::IsRunningPrecompiledCode()) {
691 ASSERT_EQ(get_kernel_count, 1u);
693 ASSERT_TRUE(spawned_isolate->Shutdown());
696 ASSERT_TRUE(root_isolate->Shutdown());
701 std::shared_ptr<PlatformIsolateManager> mgr =
713 double height)
override {}
718 std::unique_ptr<PlatformMessage>
message)
override {}
725 int64_t isolate_port)
override {}
731 const std::vector<std::string>& supported_locale_data)
override {
737 int configuration_id)
const override {
749 Dart_GetNativeArgument(
args, 0));
750 ASSERT_EQ(
"Platform isolate is ready",
message);
755 auto platform_configuration =
756 std::make_unique<PlatformConfiguration>(&client);
757 Dart_Isolate platform_isolate =
nullptr;
760 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
761 auto settings = CreateSettingsForFixture();
762 auto vm_ref = DartVMRef::Create(settings);
764 auto vm_data = vm_ref.GetVMData();
765 ASSERT_TRUE(vm_data);
767 auto platform_thread = CreateNewThread();
768 auto ui_thread = CreateNewThread();
776 vm_ref, settings, task_runners,
"emptyMain", {},
778 ASSERT_TRUE(isolate);
779 auto root_isolate = isolate->get();
780 ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Running);
782 client.mgr->IsRegisteredForTestingOnly(root_isolate->isolate()));
789 platform_thread_latch.
Wait();
796 isolate->RunInIsolateScope([root_isolate, &platform_isolate]() {
797 Dart_Handle lib = Dart_RootLibrary();
798 Dart_Handle entry_point = Dart_GetField(
799 lib, tonic::ToDart(
"mainForPlatformIsolates"));
800 char* error = nullptr;
802 root_isolate->CreatePlatformIsolate(entry_point, &error);
805 EXPECT_TRUE(platform_isolate);
806 EXPECT_EQ(Dart_CurrentIsolate(), root_isolate->isolate());
812 ui_thread_latch.
Wait();
813 ASSERT_TRUE(platform_isolate);
814 EXPECT_TRUE(client.mgr->IsRegisteredForTestingOnly(platform_isolate));
817 platform_thread_latch.
Signal();
820 message_latch.
Wait();
824 EXPECT_FALSE(client.mgr->IsRegisteredForTestingOnly(platform_isolate));
829 auto platform_configuration =
830 std::make_unique<PlatformConfiguration>(&client);
832 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
833 auto settings = CreateSettingsForFixture();
834 auto vm_ref = DartVMRef::Create(settings);
836 auto vm_data = vm_ref.GetVMData();
837 ASSERT_TRUE(vm_data);
839 auto platform_thread = CreateNewThread();
840 auto ui_thread = CreateNewThread();
848 vm_ref, settings, task_runners,
"emptyMain", {},
850 ASSERT_TRUE(isolate);
851 auto root_isolate = isolate->get();
852 ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Running);
853 EXPECT_FALSE(client.
mgr->IsRegisteredForTestingOnly(root_isolate->isolate()));
856 Dart_Isolate platform_isolate =
nullptr;
860 isolate->RunInIsolateScope([root_isolate, &platform_isolate]() {
861 Dart_Handle lib = Dart_RootLibrary();
862 Dart_Handle entry_point =
863 Dart_GetField(lib, tonic::ToDart(
"emptyMain"));
864 char* error = nullptr;
866 root_isolate->CreatePlatformIsolate(entry_point, &error);
869 EXPECT_TRUE(platform_isolate);
870 EXPECT_EQ(Dart_CurrentIsolate(), root_isolate->isolate());
877 ui_thread_latch.
Wait();
878 ASSERT_TRUE(platform_isolate);
879 EXPECT_TRUE(client.
mgr->IsRegisteredForTestingOnly(platform_isolate));
886 Dart_EnterIsolate(platform_isolate);
887 Dart_ShutdownIsolate();
888 platform_thread_latch.
Signal();
890 platform_thread_latch.
Wait();
893 EXPECT_FALSE(client.
mgr->IsRegisteredForTestingOnly(platform_isolate));
899 AddNativeCallback(
"PassMessage",
904 auto platform_configuration =
905 std::make_unique<PlatformConfiguration>(&client);
907 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
908 auto settings = CreateSettingsForFixture();
909 auto vm_ref = DartVMRef::Create(settings);
911 auto vm_data = vm_ref.GetVMData();
912 ASSERT_TRUE(vm_data);
914 auto platform_thread = CreateNewThread();
915 auto ui_thread = CreateNewThread();
923 vm_ref, settings, task_runners,
"emptyMain", {},
925 ASSERT_TRUE(isolate);
926 auto root_isolate = isolate->get();
927 ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Running);
934 client.mgr->ShutdownPlatformIsolates();
935 manager_shutdown_latch.
Signal();
937 manager_shutdown_latch.
Wait();
942 ASSERT_TRUE(isolate->RunInIsolateScope([root_isolate]() {
943 Dart_Handle lib = Dart_RootLibrary();
944 Dart_Handle entry_point =
945 Dart_GetField(lib, tonic::ToDart(
"mainForPlatformIsolates"));
946 char* error = nullptr;
947 Dart_Isolate platform_isolate =
948 root_isolate->CreatePlatformIsolate(entry_point, &error);
953 EXPECT_FALSE(platform_isolate);
954 EXPECT_EQ(Dart_CurrentIsolate(), root_isolate->isolate());
960 ui_thread_latch.
Wait();
966 AddNativeCallback(
"PassMessage",
971 auto platform_configuration =
972 std::make_unique<PlatformConfiguration>(&client);
974 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
975 auto settings = CreateSettingsForFixture();
976 auto vm_ref = DartVMRef::Create(settings);
978 auto vm_data = vm_ref.GetVMData();
979 ASSERT_TRUE(vm_data);
981 auto platform_thread = CreateNewThread();
982 auto ui_thread = CreateNewThread();
990 vm_ref, settings, task_runners,
"emptyMain", {},
992 ASSERT_TRUE(isolate);
993 auto root_isolate = isolate->get();
994 ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Running);
996 Dart_Isolate platform_isolate =
nullptr;
1004 &platform_isolate]()
mutable {
1005 platform_thread_latch.
Wait();
1006 client.mgr->ShutdownPlatformIsolates();
1007 EXPECT_TRUE(platform_isolate);
1008 EXPECT_FALSE(client.mgr->IsRegisteredForTestingOnly(platform_isolate));
1015 isolate->RunInIsolateScope([root_isolate, &platform_isolate]() {
1016 Dart_Handle lib = Dart_RootLibrary();
1017 Dart_Handle entry_point =
1018 Dart_GetField(lib, tonic::ToDart(
"mainForPlatformIsolates"));
1019 char* error = nullptr;
1021 root_isolate->CreatePlatformIsolate(entry_point, &error);
1023 EXPECT_FALSE(error);
1024 EXPECT_TRUE(platform_isolate);
1025 EXPECT_EQ(Dart_CurrentIsolate(), root_isolate->isolate());
1029 ui_thread_latch.
Signal();
1031 ui_thread_latch.
Wait();
1032 ASSERT_TRUE(platform_isolate);
1033 EXPECT_TRUE(client.mgr->IsRegisteredForTestingOnly(platform_isolate));
1036 platform_thread_latch.
Signal();
1045 epilogue_latch.
Wait();
1051 AddNativeCallback(
"PassMessage",
1056 auto platform_configuration =
1057 std::make_unique<PlatformConfiguration>(&client);
1059 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
1060 auto settings = CreateSettingsForFixture();
1061 auto vm_ref = DartVMRef::Create(settings);
1062 ASSERT_TRUE(vm_ref);
1063 auto vm_data = vm_ref.GetVMData();
1064 ASSERT_TRUE(vm_data);
1066 auto platform_thread = CreateNewThread();
1067 auto ui_thread = CreateNewThread();
1075 vm_ref, settings, task_runners,
"emptyMain", {},
1077 ASSERT_TRUE(isolate);
1078 auto root_isolate = isolate->get();
1079 ASSERT_EQ(root_isolate->GetPhase(), DartIsolate::Phase::Running);
1081 Dart_Isolate platform_isolate =
nullptr;
1086 isolate->RunInIsolateScope([root_isolate, &platform_isolate]() {
1087 Dart_Handle lib = Dart_RootLibrary();
1088 Dart_Handle entry_point = Dart_GetField(
1089 lib, tonic::ToDart(
"mainForPlatformIsolatesThrowError"));
1090 char* error = nullptr;
1092 root_isolate->CreatePlatformIsolate(entry_point, &error);
1094 EXPECT_FALSE(error);
1095 EXPECT_TRUE(platform_isolate);
1096 EXPECT_EQ(Dart_CurrentIsolate(), root_isolate->isolate());
1100 ui_thread_latch.
Signal();
1102 ui_thread_latch.
Wait();
1103 ASSERT_TRUE(platform_isolate);
1104 EXPECT_TRUE(client.mgr->IsRegisteredForTestingOnly(platform_isolate));
1113 epilogue_latch.
Wait();
1119 ASSERT_FALSE(DartVMRef::IsInstanceRunning());
1120 auto settings = CreateSettingsForFixture();
1121 auto vm_ref = DartVMRef::Create(settings);
1122 ASSERT_TRUE(vm_ref);
1123 auto vm_data = vm_ref.GetVMData();
1124 ASSERT_TRUE(vm_data);
1126 GetCurrentTaskRunner(),
1127 GetCurrentTaskRunner(),
1128 GetCurrentTaskRunner(),
1129 GetCurrentTaskRunner()
1132 auto isolate_configuration =
1133 IsolateConfiguration::InferFromSettings(settings);
1138 auto weak_isolate = DartIsolate::CreateRunningRootIsolate(
1139 vm_data->GetSettings(),
1140 vm_data->GetIsolateSnapshot(),
1144 settings.isolate_create_callback,
1145 settings.isolate_shutdown_callback,
1149 std::move(isolate_configuration),
1152 auto root_isolate = weak_isolate.lock();
1154 Dart_Port main_port;
1157 main_port = Dart_GetMainPortId();
1159 ASSERT_TRUE(Dart_GetCurrentThreadOwnsIsolate(main_port));
1162 ASSERT_TRUE(Dart_GetCurrentThreadOwnsIsolate(main_port));
1164 std::thread([main_port]() {
1165 ASSERT_FALSE(Dart_GetCurrentThreadOwnsIsolate(main_port));
1168 ASSERT_TRUE(root_isolate->Shutdown());
1170 ASSERT_FALSE(Dart_GetCurrentThreadOwnsIsolate(main_port));
TEST_F(FlutterDisplayLinkTest, ViewAddedToWindowFirst)
static std::weak_ptr< DartIsolate > CreateRunningRootIsolate(const Settings &settings, const fml::RefPtr< const DartSnapshot > &isolate_snapshot, std::unique_ptr< PlatformConfiguration > platform_configuration, Flags flags, const fml::closure &root_isolate_create_callback, const fml::closure &isolate_create_callback, const fml::closure &isolate_shutdown_callback, std::optional< std::string > dart_entrypoint, std::optional< std::string > dart_entrypoint_library, const std::vector< std::string > &dart_entrypoint_args, std::unique_ptr< IsolateConfiguration > isolate_configuration, const UIDartState::Context &context, const DartIsolate *spawning_isolate=nullptr, std::shared_ptr< NativeAssetsManager > native_assets_manager=nullptr)
Creates an instance of a root isolate and returns a weak pointer to the same. The isolate instance ma...
static DartVMRef Create(const Settings &settings, fml::RefPtr< const DartSnapshot > vm_snapshot=nullptr, fml::RefPtr< const DartSnapshot > isolate_snapshot=nullptr)
static bool IsInstanceRunning()
static std::unique_ptr< IsolateConfiguration > InferFromSettings(const Settings &settings, const std::shared_ptr< AssetManager > &asset_manager=nullptr, const fml::RefPtr< fml::TaskRunner > &io_worker=nullptr, IsolateLaunchType launch_type=IsolateLaunchType::kNewGroup)
Attempts to infer the isolate configuration from the Settings object. If the VM is configured for AOT...
DartSecondaryIsolateTest()
bool RootIsolateIsSignaled()
void RootIsolateShutdownSignal()
void ChildShutdownSignal()
Tests error handling path of Isolate.spawn() in the engine.
IsolateStartupFailureTest()
static void RunNowOrPostTask(const fml::RefPtr< fml::TaskRunner > &runner, const fml::closure &task)
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
G_BEGIN_DECLS GBytes * message
G_BEGIN_DECLS FlutterViewId view_id
#define FML_LOG(severity)
#define FML_UNREACHABLE()
#define FML_DISALLOW_COPY_AND_ASSIGN(TypeName)
std::string GetCurrentTestName()
Gets the name of the currently running test. This is useful in generating logs or assets based on tes...
TEST_F(DisplayListTest, Defaults)
std::string GetDefaultKernelFilePath()
Returns the default path to kernel_blob.bin. This file is within the directory returned by GetFixture...
std::unique_ptr< AutoIsolateShutdown > RunDartCodeInIsolate(DartVMRef &vm_ref, const Settings &settings, const TaskRunners &task_runners, std::string entrypoint, const std::vector< std::string > &args, const std::string &kernel_file_path, fml::WeakPtr< IOManager > io_manager, std::unique_ptr< PlatformConfiguration > platform_configuration)
std::vector< std::unique_ptr< const fml::Mapping > > Mappings
TEST_F(EngineAnimatorTest, AnimatorAcceptsMultipleRenders)
internal::CopyableLambda< T > MakeCopyable(T lambda)
Dart_Handle ToDart(const T &object)
bool CheckAndHandleError(Dart_Handle handle)
The subset of state which is owned by the shell or engine and passed through the RuntimeController in...
std::string advisory_script_uri
std::string advisory_script_entrypoint
#define CREATE_NATIVE_ENTRY(native_entry)