Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 8506bb5

Browse files
author
peihan.cph
committed
fix
1 parent 8fda5e9 commit 8506bb5

File tree

1 file changed

+13
-20
lines changed

1 file changed

+13
-20
lines changed

shell/common/shell.cc

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)