diff --git a/runtime/dart_isolate_unittests.cc b/runtime/dart_isolate_unittests.cc index 1753e3c25251f4c93f0f71883ce1a8633daf0720..83a140737324bc3922aac454b0dfa38997fb7bb1 100644 --- a/runtime/dart_isolate_unittests.cc +++ b/runtime/dart_isolate_unittests.cc @@ -99,27 +99,22 @@ class AutoIsolateShutdown { AutoIsolateShutdown() = default; AutoIsolateShutdown(std::shared_ptr isolate, - fml::RefPtr runner, - bool confirm_shutdown) - : isolate_(std::move(isolate)), - runner_(std::move(runner)), - confirm_shutdown_(confirm_shutdown) {} + fml::RefPtr runner) + : isolate_(std::move(isolate)), runner_(std::move(runner)) {} ~AutoIsolateShutdown() { if (!IsValid()) { return; } fml::AutoResetWaitableEvent latch; - fml::TaskRunner::RunNowOrPostTask( - runner_, - [isolate = isolate_, &latch, confirm_shutdown = confirm_shutdown_]() { - FML_LOG(INFO) << "Shutting down isolate."; - if (!isolate->Shutdown() && confirm_shutdown) { - FML_LOG(ERROR) << "Could not shutdown isolate."; - FML_CHECK(false); - } - latch.Signal(); - }); + fml::TaskRunner::RunNowOrPostTask(runner_, [isolate = isolate_, &latch]() { + FML_LOG(INFO) << "Shutting down isolate."; + if (!isolate->Shutdown()) { + FML_LOG(ERROR) << "Could not shutdown isolate."; + FML_CHECK(false); + } + latch.Signal(); + }); latch.Wait(); } @@ -154,7 +149,6 @@ class AutoIsolateShutdown { private: std::shared_ptr isolate_; fml::RefPtr runner_; - bool confirm_shutdown_; FML_DISALLOW_COPY_AND_ASSIGN(AutoIsolateShutdown); }; @@ -164,8 +158,7 @@ static void RunDartCodeInIsolate(DartVMRef& vm_ref, const Settings& settings, fml::RefPtr task_runner, std::string entrypoint, - const std::vector& args, - bool confirm_shutdown) { + const std::vector& args) { FML_CHECK(task_runner->RunsTasksOnCurrentThread()); if (!vm_ref) { @@ -200,8 +193,8 @@ static void RunDartCodeInIsolate(DartVMRef& vm_ref, settings.isolate_shutdown_callback // isolate shutdown callback ); - auto root_isolate = std::make_unique( - weak_isolate.lock(), task_runner, confirm_shutdown); + auto root_isolate = + std::make_unique(weak_isolate.lock(), task_runner); if (!root_isolate->IsValid()) { FML_LOG(ERROR) << "Could not create isolate."; @@ -274,14 +267,13 @@ static std::unique_ptr RunDartCodeInIsolate( const Settings& settings, fml::RefPtr task_runner, std::string entrypoint, - const std::vector& args, - bool confirm_shutdown) { + const std::vector& args) { std::unique_ptr result; fml::AutoResetWaitableEvent latch; fml::TaskRunner::RunNowOrPostTask( task_runner, fml::MakeCopyable([&]() mutable { RunDartCodeInIsolate(vm_ref, result, settings, task_runner, entrypoint, - args, confirm_shutdown); + args); latch.Signal(); })); latch.Wait(); @@ -293,7 +285,7 @@ TEST_F(DartIsolateTest, IsolateCanLoadAndRunDartCode) { const auto settings = CreateSettingsForFixture(); auto vm_ref = DartVMRef::Create(settings); auto isolate = RunDartCodeInIsolate(vm_ref, settings, GetCurrentTaskRunner(), - "main", {}, true); + "main", {}); ASSERT_TRUE(isolate); ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running); } @@ -303,7 +295,7 @@ TEST_F(DartIsolateTest, IsolateCannotLoadAndRunUnknownDartEntrypoint) { const auto settings = CreateSettingsForFixture(); auto vm_ref = DartVMRef::Create(settings); auto isolate = RunDartCodeInIsolate(vm_ref, settings, GetCurrentTaskRunner(), - "thisShouldNotExist", {}, true); + "thisShouldNotExist", {}); ASSERT_FALSE(isolate); } @@ -312,7 +304,7 @@ TEST_F(DartIsolateTest, CanRunDartCodeCodeSynchronously) { const auto settings = CreateSettingsForFixture(); auto vm_ref = DartVMRef::Create(settings); auto isolate = RunDartCodeInIsolate(vm_ref, settings, GetCurrentTaskRunner(), - "main", {}, true); + "main", {}); ASSERT_TRUE(isolate); ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running); @@ -336,7 +328,7 @@ TEST_F(DartIsolateTest, CanRegisterNativeCallback) { const auto settings = CreateSettingsForFixture(); auto vm_ref = DartVMRef::Create(settings); auto isolate = RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(), - "canRegisterNativeCallback", {}, true); + "canRegisterNativeCallback", {}); ASSERT_TRUE(isolate); ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running); latch.Wait(); @@ -359,7 +351,7 @@ TEST_F(DartIsolateTest, CanSaveCompilationTrace) { const auto settings = CreateSettingsForFixture(); auto vm_ref = DartVMRef::Create(settings); auto isolate = RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(), - "testCanSaveCompilationTrace", {}, true); + "testCanSaveCompilationTrace", {}); ASSERT_TRUE(isolate); ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running); @@ -385,9 +377,8 @@ TEST_F(DartIsolateTest, CanLaunchSecondaryIsolates) { child_shutdown_latch.Signal(); }; auto vm_ref = DartVMRef::Create(settings); - auto isolate = - RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(), - "testCanLaunchSecondaryIsolate", {}, true); + auto isolate = RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(), + "testCanLaunchSecondaryIsolate", {}); ASSERT_TRUE(isolate); ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running); child_shutdown_latch.Wait(); // wait for child isolate to shutdown first @@ -406,54 +397,13 @@ TEST_F(DartIsolateTest, CanRecieveArguments) { const auto settings = CreateSettingsForFixture(); auto vm_ref = DartVMRef::Create(settings); - auto isolate = - RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(), - "testCanRecieveArguments", {"arg1"}, true); + auto isolate = RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(), + "testCanRecieveArguments", {"arg1"}); ASSERT_TRUE(isolate); ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running); latch.Wait(); } -TEST_F(DartIsolateTest, RootIsolateShutdownStopsChildIsolates) { - ASSERT_FALSE(DartVMRef::IsInstanceRunning()); - fml::CountDownLatch latch(12); - fml::CountDownLatch shutdown_latch(5); - AddNativeCallback("NotifyNative", - CREATE_NATIVE_ENTRY(([&latch](Dart_NativeArguments args) { - latch.CountDown(); - }))); - AddNativeCallback( - "PassMessage", CREATE_NATIVE_ENTRY(([&latch](Dart_NativeArguments args) { - auto message = tonic::DartConverter::FromDart( - Dart_GetNativeArgument(args, 0)); - ASSERT_EQ("In child Isolate.", message); - latch.CountDown(); - }))); - - size_t destruction_callback_count = 0; - auto settings = CreateSettingsForFixture(); - settings.isolate_shutdown_callback = [&shutdown_latch, - &destruction_callback_count]() { - destruction_callback_count++; - shutdown_latch.CountDown(); - }; - auto vm_ref = DartVMRef::Create(settings); - auto vm_data = vm_ref.GetVMData(); - - std::unique_ptr isolate; - fml::RefPtr task_runner = CreateNewThread(); - fml::TaskRunner::RunNowOrPostTask( - task_runner, fml::MakeCopyable([&]() mutable { - RunDartCodeInIsolate(vm_ref, isolate, settings, task_runner, - "testSecondaryIsolateShutdown", {}, false); - })); - latch.Wait(); // wait for last NotifyNative called by main isolate - ASSERT_TRUE(isolate->get()->Shutdown() || true); - shutdown_latch.Wait(); - // root isolate will be auto-shutdown - ASSERT_EQ(destruction_callback_count, 5u); -} - } // namespace testing } // namespace flutter diff --git a/runtime/fixtures/runtime_test.dart b/runtime/fixtures/runtime_test.dart index e0225756cb66b1f2ea3d9ae3e7a2ff5f76490dcb..821e01e8fa433804e2bebe7118c0be5ee796c6fc 100644 --- a/runtime/fixtures/runtime_test.dart +++ b/runtime/fixtures/runtime_test.dart @@ -60,18 +60,3 @@ void testCanLaunchSecondaryIsolate() { void testCanRecieveArguments(List args) { notifyResult(args != null && args.length == 1 && args[0] == 'arg1'); } - -@pragma('vm:entry-point') -void testSecondaryIsolateShutdown() { - final onExit = RawReceivePort((_) { notifyNative(); }); - Isolate.spawn(shutdownIsolateMain, 'You are isolate number 1', onExit: onExit.sendPort); - Isolate.spawn(shutdownIsolateMain, 'You are isolate number 2', onExit: onExit.sendPort); - Isolate.spawn(shutdownIsolateMain, 'You are isolate number 3', onExit: onExit.sendPort); - Isolate.spawn(shutdownIsolateMain, 'You are isolate number 4', onExit: onExit.sendPort); -} - -void shutdownIsolateMain(String message) { - print('Secondary isolate got message: ' + message); - passMessage('In child Isolate.'); - notifyNative(); -}