@@ -52,8 +52,7 @@ Shell::CreateShellOnPlatformThread(
5252 auto shell_holder_future = shell_holder_promise.get_future ();
5353 if (!task_runners.IsValid ()) {
5454 FML_LOG (ERROR) << " Task runners to run the shell were invalid." ;
55- std::unique_ptr<Shell::ShellHolder> empty;
56- shell_holder_promise.set_value (std::move (empty));
55+ shell_holder_promise.set_value (std::move (nullptr ));
5756 return shell_holder_future;
5857 }
5958
@@ -69,8 +68,8 @@ Shell::CreateShellOnPlatformThread(
6968 fml::TaskRunner::RunNowOrPostTask (
7069 task_runners.GetRasterTaskRunner (),
7170 [rasterizer_promise, snapshot_delegate_promise,
72- on_create_rasterizer = std::move (on_create_rasterizer) , //
73- shell = shell.get () //
71+ on_create_rasterizer, //
72+ shell = shell.get () //
7473 ]() mutable {
7574 TRACE_EVENT0 (" flutter" , " ShellSetupGPUSubsystem" );
7675 std::unique_ptr<Rasterizer> rasterizer (on_create_rasterizer (*shell));
@@ -81,17 +80,15 @@ Shell::CreateShellOnPlatformThread(
8180 // Create the platform view on the platform thread (this thread).
8281 auto platform_view = on_create_platform_view (*shell.get ());
8382 if (!platform_view || !platform_view->GetWeakPtr ()) {
84- std::unique_ptr<Shell::ShellHolder> empty;
85- shell_holder_promise.set_value (std::move (empty));
83+ shell_holder_promise.set_value (std::move (nullptr ));
8684 return shell_holder_future;
8785 }
8886
8987 // Ask the platform view for the vsync waiter. This will be used by the engine
9088 // to create the animator.
9189 auto vsync_waiter = platform_view->CreateVSyncWaiter ();
9290 if (!vsync_waiter) {
93- std::unique_ptr<Shell::ShellHolder> empty;
94- shell_holder_promise.set_value (std::move (empty));
91+ shell_holder_promise.set_value (std::move (nullptr ));
9592 return shell_holder_future;
9693 }
9794
@@ -113,9 +110,7 @@ Shell::CreateShellOnPlatformThread(
113110 // https://github.com/flutter/flutter/issues/42948
114111 fml::TaskRunner::RunNowOrPostTask (
115112 io_task_runner,
116- [io_task_runner,
117- io_manager_promise, //
118- weak_io_manager_promise,
113+ [io_task_runner, io_manager_promise, weak_io_manager_promise,
119114 weak_platform_view = platform_view->GetWeakPtr (), //
120115 is_backgrounded_sync_switch = shell->GetIsGpuDisabledSyncSwitch () //
121116 ]() mutable {
@@ -332,8 +327,7 @@ std::future<std::unique_ptr<Shell::ShellHolder>> Shell::initShellEnv(
332327 if (!task_runners.IsValid () || !on_create_platform_view ||
333328 !on_create_rasterizer) {
334329 std::promise<std::unique_ptr<Shell::ShellHolder>> shell_holder_promise;
335- std::unique_ptr<Shell::ShellHolder> empty;
336- shell_holder_promise.set_value (std::move (empty));
330+ shell_holder_promise.set_value (nullptr );
337331 return shell_holder_promise.get_future ();
338332 }
339333
@@ -1562,22 +1556,21 @@ std::unique_ptr<Shell> Shell::ShellHolder::makeShell() {
15621556 return nullptr ;
15631557 }
15641558 is_consumed_ = true ;
1565- fml::AutoResetWaitableEvent latch;
1566- std::unique_ptr<Shell> shell_res;
1559+ std::promise<bool > init_promise;
15671560
15681561 // make sure `shell.setup` executed on platformthread
15691562 fml::TaskRunner::RunNowOrPostTask (
15701563 shell_->GetTaskRunners ().GetPlatformTaskRunner (),
1571- fml::MakeCopyable ([this , &latch, &shell_res ]() mutable {
1564+ fml::MakeCopyable ([this , &init_promise ]() mutable {
15721565 if (this ->shell_ ->Setup (
15731566 std::move (this ->platform_view_ ), std::move (this ->engine_ ),
15741567 std::move (this ->rasterizer_ ), std::move (this ->io_manager_ ))) {
1575- shell_res = std::move ( this -> shell_ );
1568+ init_promise. set_value ( true );
15761569 }
1577- latch. Signal ( );
1570+ init_promise. set_value ( false );
15781571 }));
1579- latch. Wait ();
1580- return shell_res ;
1572+
1573+ return std::move (shell_) ;
15811574}
15821575
15831576} // namespace flutter
0 commit comments