@@ -52,8 +52,7 @@ Shell::CreateShellOnPlatformThread(
52
52
auto shell_holder_future = shell_holder_promise.get_future ();
53
53
if (!task_runners.IsValid ()) {
54
54
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 ));
57
56
return shell_holder_future;
58
57
}
59
58
@@ -69,8 +68,8 @@ Shell::CreateShellOnPlatformThread(
69
68
fml::TaskRunner::RunNowOrPostTask (
70
69
task_runners.GetRasterTaskRunner (),
71
70
[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 () //
74
73
]() mutable {
75
74
TRACE_EVENT0 (" flutter" , " ShellSetupGPUSubsystem" );
76
75
std::unique_ptr<Rasterizer> rasterizer (on_create_rasterizer (*shell));
@@ -81,17 +80,15 @@ Shell::CreateShellOnPlatformThread(
81
80
// Create the platform view on the platform thread (this thread).
82
81
auto platform_view = on_create_platform_view (*shell.get ());
83
82
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 ));
86
84
return shell_holder_future;
87
85
}
88
86
89
87
// Ask the platform view for the vsync waiter. This will be used by the engine
90
88
// to create the animator.
91
89
auto vsync_waiter = platform_view->CreateVSyncWaiter ();
92
90
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 ));
95
92
return shell_holder_future;
96
93
}
97
94
@@ -113,9 +110,7 @@ Shell::CreateShellOnPlatformThread(
113
110
// https://github.com/flutter/flutter/issues/42948
114
111
fml::TaskRunner::RunNowOrPostTask (
115
112
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,
119
114
weak_platform_view = platform_view->GetWeakPtr (), //
120
115
is_backgrounded_sync_switch = shell->GetIsGpuDisabledSyncSwitch () //
121
116
]() mutable {
@@ -332,8 +327,7 @@ std::future<std::unique_ptr<Shell::ShellHolder>> Shell::initShellEnv(
332
327
if (!task_runners.IsValid () || !on_create_platform_view ||
333
328
!on_create_rasterizer) {
334
329
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 );
337
331
return shell_holder_promise.get_future ();
338
332
}
339
333
@@ -1562,22 +1556,21 @@ std::unique_ptr<Shell> Shell::ShellHolder::makeShell() {
1562
1556
return nullptr ;
1563
1557
}
1564
1558
is_consumed_ = true ;
1565
- fml::AutoResetWaitableEvent latch;
1566
- std::unique_ptr<Shell> shell_res;
1559
+ std::promise<bool > init_promise;
1567
1560
1568
1561
// make sure `shell.setup` executed on platformthread
1569
1562
fml::TaskRunner::RunNowOrPostTask (
1570
1563
shell_->GetTaskRunners ().GetPlatformTaskRunner (),
1571
- fml::MakeCopyable ([this , &latch, &shell_res ]() mutable {
1564
+ fml::MakeCopyable ([this , &init_promise ]() mutable {
1572
1565
if (this ->shell_ ->Setup (
1573
1566
std::move (this ->platform_view_ ), std::move (this ->engine_ ),
1574
1567
std::move (this ->rasterizer_ ), std::move (this ->io_manager_ ))) {
1575
- shell_res = std::move ( this -> shell_ );
1568
+ init_promise. set_value ( true );
1576
1569
}
1577
- latch. Signal ( );
1570
+ init_promise. set_value ( false );
1578
1571
}));
1579
- latch. Wait ();
1580
- return shell_res ;
1572
+
1573
+ return std::move (shell_) ;
1581
1574
}
1582
1575
1583
1576
} // namespace flutter
0 commit comments