@@ -99,27 +99,22 @@ class AutoIsolateShutdown {
9999 AutoIsolateShutdown () = default ;
100100
101101 AutoIsolateShutdown (std::shared_ptr<DartIsolate> isolate,
102- fml::RefPtr<fml::TaskRunner> runner,
103- bool confirm_shutdown)
104- : isolate_(std::move(isolate)),
105- runner_ (std::move(runner)),
106- confirm_shutdown_(confirm_shutdown) {}
102+ fml::RefPtr<fml::TaskRunner> runner)
103+ : isolate_(std::move(isolate)), runner_(std::move(runner)) {}
107104
108105 ~AutoIsolateShutdown () {
109106 if (!IsValid ()) {
110107 return ;
111108 }
112109 fml::AutoResetWaitableEvent latch;
113- fml::TaskRunner::RunNowOrPostTask (
114- runner_,
115- [isolate = isolate_, &latch, confirm_shutdown = confirm_shutdown_]() {
116- FML_LOG (INFO) << " Shutting down isolate." ;
117- if (!isolate->Shutdown () && confirm_shutdown) {
118- FML_LOG (ERROR) << " Could not shutdown isolate." ;
119- FML_CHECK (false );
120- }
121- latch.Signal ();
122- });
110+ fml::TaskRunner::RunNowOrPostTask (runner_, [isolate = isolate_, &latch]() {
111+ FML_LOG (INFO) << " Shutting down isolate." ;
112+ if (!isolate->Shutdown ()) {
113+ FML_LOG (ERROR) << " Could not shutdown isolate." ;
114+ FML_CHECK (false );
115+ }
116+ latch.Signal ();
117+ });
123118 latch.Wait ();
124119 }
125120
@@ -154,7 +149,6 @@ class AutoIsolateShutdown {
154149 private:
155150 std::shared_ptr<DartIsolate> isolate_;
156151 fml::RefPtr<fml::TaskRunner> runner_;
157- bool confirm_shutdown_;
158152
159153 FML_DISALLOW_COPY_AND_ASSIGN (AutoIsolateShutdown);
160154};
@@ -164,8 +158,7 @@ static void RunDartCodeInIsolate(DartVMRef& vm_ref,
164158 const Settings& settings,
165159 fml::RefPtr<fml::TaskRunner> task_runner,
166160 std::string entrypoint,
167- const std::vector<std::string>& args,
168- bool confirm_shutdown) {
161+ const std::vector<std::string>& args) {
169162 FML_CHECK (task_runner->RunsTasksOnCurrentThread ());
170163
171164 if (!vm_ref) {
@@ -200,8 +193,8 @@ static void RunDartCodeInIsolate(DartVMRef& vm_ref,
200193 settings.isolate_shutdown_callback // isolate shutdown callback
201194 );
202195
203- auto root_isolate = std::make_unique<AutoIsolateShutdown>(
204- weak_isolate.lock (), task_runner, confirm_shutdown );
196+ auto root_isolate =
197+ std::make_unique<AutoIsolateShutdown>( weak_isolate.lock (), task_runner);
205198
206199 if (!root_isolate->IsValid ()) {
207200 FML_LOG (ERROR) << " Could not create isolate." ;
@@ -274,14 +267,13 @@ static std::unique_ptr<AutoIsolateShutdown> RunDartCodeInIsolate(
274267 const Settings& settings,
275268 fml::RefPtr<fml::TaskRunner> task_runner,
276269 std::string entrypoint,
277- const std::vector<std::string>& args,
278- bool confirm_shutdown) {
270+ const std::vector<std::string>& args) {
279271 std::unique_ptr<AutoIsolateShutdown> result;
280272 fml::AutoResetWaitableEvent latch;
281273 fml::TaskRunner::RunNowOrPostTask (
282274 task_runner, fml::MakeCopyable ([&]() mutable {
283275 RunDartCodeInIsolate (vm_ref, result, settings, task_runner, entrypoint,
284- args, confirm_shutdown );
276+ args);
285277 latch.Signal ();
286278 }));
287279 latch.Wait ();
@@ -293,7 +285,7 @@ TEST_F(DartIsolateTest, IsolateCanLoadAndRunDartCode) {
293285 const auto settings = CreateSettingsForFixture ();
294286 auto vm_ref = DartVMRef::Create (settings);
295287 auto isolate = RunDartCodeInIsolate (vm_ref, settings, GetCurrentTaskRunner (),
296- " main" , {}, true );
288+ " main" , {});
297289 ASSERT_TRUE (isolate);
298290 ASSERT_EQ (isolate->get ()->GetPhase (), DartIsolate::Phase::Running);
299291}
@@ -303,7 +295,7 @@ TEST_F(DartIsolateTest, IsolateCannotLoadAndRunUnknownDartEntrypoint) {
303295 const auto settings = CreateSettingsForFixture ();
304296 auto vm_ref = DartVMRef::Create (settings);
305297 auto isolate = RunDartCodeInIsolate (vm_ref, settings, GetCurrentTaskRunner (),
306- " thisShouldNotExist" , {}, true );
298+ " thisShouldNotExist" , {});
307299 ASSERT_FALSE (isolate);
308300}
309301
@@ -312,7 +304,7 @@ TEST_F(DartIsolateTest, CanRunDartCodeCodeSynchronously) {
312304 const auto settings = CreateSettingsForFixture ();
313305 auto vm_ref = DartVMRef::Create (settings);
314306 auto isolate = RunDartCodeInIsolate (vm_ref, settings, GetCurrentTaskRunner (),
315- " main" , {}, true );
307+ " main" , {});
316308
317309 ASSERT_TRUE (isolate);
318310 ASSERT_EQ (isolate->get ()->GetPhase (), DartIsolate::Phase::Running);
@@ -336,7 +328,7 @@ TEST_F(DartIsolateTest, CanRegisterNativeCallback) {
336328 const auto settings = CreateSettingsForFixture ();
337329 auto vm_ref = DartVMRef::Create (settings);
338330 auto isolate = RunDartCodeInIsolate (vm_ref, settings, CreateNewThread (),
339- " canRegisterNativeCallback" , {}, true );
331+ " canRegisterNativeCallback" , {});
340332 ASSERT_TRUE (isolate);
341333 ASSERT_EQ (isolate->get ()->GetPhase (), DartIsolate::Phase::Running);
342334 latch.Wait ();
@@ -359,7 +351,7 @@ TEST_F(DartIsolateTest, CanSaveCompilationTrace) {
359351 const auto settings = CreateSettingsForFixture ();
360352 auto vm_ref = DartVMRef::Create (settings);
361353 auto isolate = RunDartCodeInIsolate (vm_ref, settings, CreateNewThread (),
362- " testCanSaveCompilationTrace" , {}, true );
354+ " testCanSaveCompilationTrace" , {});
363355 ASSERT_TRUE (isolate);
364356 ASSERT_EQ (isolate->get ()->GetPhase (), DartIsolate::Phase::Running);
365357
@@ -385,9 +377,8 @@ TEST_F(DartIsolateTest, CanLaunchSecondaryIsolates) {
385377 child_shutdown_latch.Signal ();
386378 };
387379 auto vm_ref = DartVMRef::Create (settings);
388- auto isolate =
389- RunDartCodeInIsolate (vm_ref, settings, CreateNewThread (),
390- " testCanLaunchSecondaryIsolate" , {}, true );
380+ auto isolate = RunDartCodeInIsolate (vm_ref, settings, CreateNewThread (),
381+ " testCanLaunchSecondaryIsolate" , {});
391382 ASSERT_TRUE (isolate);
392383 ASSERT_EQ (isolate->get ()->GetPhase (), DartIsolate::Phase::Running);
393384 child_shutdown_latch.Wait (); // wait for child isolate to shutdown first
@@ -406,54 +397,13 @@ TEST_F(DartIsolateTest, CanRecieveArguments) {
406397
407398 const auto settings = CreateSettingsForFixture ();
408399 auto vm_ref = DartVMRef::Create (settings);
409- auto isolate =
410- RunDartCodeInIsolate (vm_ref, settings, CreateNewThread (),
411- " testCanRecieveArguments" , {" arg1" }, true );
400+ auto isolate = RunDartCodeInIsolate (vm_ref, settings, CreateNewThread (),
401+ " testCanRecieveArguments" , {" arg1" });
412402 ASSERT_TRUE (isolate);
413403 ASSERT_EQ (isolate->get ()->GetPhase (), DartIsolate::Phase::Running);
414404
415405 latch.Wait ();
416406}
417407
418- TEST_F (DartIsolateTest, RootIsolateShutdownStopsChildIsolates) {
419- ASSERT_FALSE (DartVMRef::IsInstanceRunning ());
420- fml::CountDownLatch latch (12 );
421- fml::CountDownLatch shutdown_latch (5 );
422- AddNativeCallback (" NotifyNative" ,
423- CREATE_NATIVE_ENTRY (([&latch](Dart_NativeArguments args) {
424- latch.CountDown ();
425- })));
426- AddNativeCallback (
427- " PassMessage" , CREATE_NATIVE_ENTRY (([&latch](Dart_NativeArguments args) {
428- auto message = tonic::DartConverter<std::string>::FromDart (
429- Dart_GetNativeArgument (args, 0 ));
430- ASSERT_EQ (" In child Isolate." , message);
431- latch.CountDown ();
432- })));
433-
434- size_t destruction_callback_count = 0 ;
435- auto settings = CreateSettingsForFixture ();
436- settings.isolate_shutdown_callback = [&shutdown_latch,
437- &destruction_callback_count]() {
438- destruction_callback_count++;
439- shutdown_latch.CountDown ();
440- };
441- auto vm_ref = DartVMRef::Create (settings);
442- auto vm_data = vm_ref.GetVMData ();
443-
444- std::unique_ptr<AutoIsolateShutdown> isolate;
445- fml::RefPtr<fml::TaskRunner> task_runner = CreateNewThread ();
446- fml::TaskRunner::RunNowOrPostTask (
447- task_runner, fml::MakeCopyable ([&]() mutable {
448- RunDartCodeInIsolate (vm_ref, isolate, settings, task_runner,
449- " testSecondaryIsolateShutdown" , {}, false );
450- }));
451- latch.Wait (); // wait for last NotifyNative called by main isolate
452- ASSERT_TRUE (isolate->get ()->Shutdown () || true );
453- shutdown_latch.Wait ();
454- // root isolate will be auto-shutdown
455- ASSERT_EQ (destruction_callback_count, 5u );
456- }
457-
458408} // namespace testing
459409} // namespace flutter
0 commit comments