diff --git a/shell/platform/linux/BUILD.gn b/shell/platform/linux/BUILD.gn index 3449cd442b1bbe9ff7ef86707bc7806df948f3be..ef17c89364b1e3e949a60f5774caeef2df343836 100644 --- a/shell/platform/linux/BUILD.gn +++ b/shell/platform/linux/BUILD.gn @@ -10,11 +10,10 @@ executable("linux") { ] deps = [ - "//base", "//dart/runtime/bin:embedded_dart_io", "//flutter/common", + "//flutter/fml", "//flutter/shell/common", - "//flutter/shell/gpu", "//flutter/shell/testing", "//lib/ftl", "//lib/tonic", diff --git a/shell/platform/linux/main_linux.cc b/shell/platform/linux/main_linux.cc index 73f306d90cdb19c77fafba9dda9e81e99e39c565..68b2539812143da3d9722bd59f4a419cf6730bd1 100644 --- a/shell/platform/linux/main_linux.cc +++ b/shell/platform/linux/main_linux.cc @@ -2,12 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/at_exit.h" -#include "base/basictypes.h" -#include "base/bind.h" -#include "base/message_loop/message_loop.h" #include "dart/runtime/bin/embedded_dart_io.h" #include "flutter/common/threads.h" +#include "flutter/fml/message_loop.h" #include "flutter/shell/common/platform_view.h" #include "flutter/shell/common/shell.h" #include "flutter/shell/common/switches.h" @@ -26,31 +23,29 @@ const int kErrorExitCode = 255; // Checks whether the engine's main Dart isolate has no pending work. If so, // then exit the given message loop. -class ScriptCompletionTaskObserver : public base::MessageLoop::TaskObserver { +class ScriptCompletionTaskObserver : public fml::TaskObserver { public: - ScriptCompletionTaskObserver(base::MessageLoop& main_message_loop) - : main_message_loop_(main_message_loop), + ScriptCompletionTaskObserver(ftl::RefPtr task_runner) + : main_task_runner_(std::move(task_runner)), prev_live_(false), last_error_(tonic::kNoError) {} - void WillProcessTask(const base::PendingTask& pending_task) override {} - - void DidProcessTask(const base::PendingTask& pending_task) override { + void DidProcessTask() override { shell::TestRunner& test_runner = shell::TestRunner::Shared(); shell::Engine& engine = test_runner.platform_view().engine(); if (engine.GetLoadScriptError() != tonic::kNoError) { last_error_ = engine.GetLoadScriptError(); - main_message_loop_.PostTask(FROM_HERE, - main_message_loop_.QuitWhenIdleClosure()); + main_task_runner_->PostTask( + []() { fml::MessageLoop::GetCurrent().Terminate(); }); return; } bool live = engine.UIIsolateHasLivePorts(); if (prev_live_ && !live) { last_error_ = engine.GetUIIsolateLastError(); - main_message_loop_.PostTask(FROM_HERE, - main_message_loop_.QuitWhenIdleClosure()); + main_task_runner_->PostTask( + []() { fml::MessageLoop::GetCurrent().Terminate(); }); } prev_live_ = live; } @@ -58,7 +53,7 @@ class ScriptCompletionTaskObserver : public base::MessageLoop::TaskObserver { tonic::DartErrorHandleType last_error() { return last_error_; } private: - base::MessageLoop& main_message_loop_; + ftl::RefPtr main_task_runner_; bool prev_live_; tonic::DartErrorHandleType last_error_; }; @@ -78,25 +73,29 @@ int ConvertErrorTypeToExitCode(tonic::DartErrorHandleType error) { void RunNonInteractive(ftl::CommandLine initial_command_line, bool run_forever) { - base::MessageLoop message_loop; + // This is a platform thread (i.e not one created by fml::Thread), so perform + // one time initialization. + fml::MessageLoop::EnsureInitializedForCurrentThread(); shell::Shell::InitStandalone(initial_command_line); // Note that this task observer must be added after the observer that drains // the microtask queue. - ScriptCompletionTaskObserver task_observer(message_loop); + ScriptCompletionTaskObserver task_observer( + fml::MessageLoop::GetCurrent().GetTaskRunner()); if (!run_forever) { blink::Threads::UI()->PostTask([&task_observer] { - base::MessageLoop::current()->AddTaskObserver(&task_observer); + fml::MessageLoop::GetCurrent().AddTaskObserver(&task_observer); }); } - if (!shell::InitForTesting(std::move(initial_command_line))) { + if (!shell::InitForTesting(initial_command_line)) { shell::PrintUsage("sky_shell"); - exit(1); + exit(EXIT_FAILURE); + return; } - message_loop.Run(); + fml::MessageLoop::GetCurrent().Run(); shell::TestRunner& test_runner = shell::TestRunner::Shared(); tonic::DartErrorHandleType error = @@ -117,8 +116,6 @@ int main(int argc, char* argv[]) { dart::bin::SetExecutableName(argv[0]); dart::bin::SetExecutableArguments(argc - 1, argv); - base::AtExitManager exit_manager; - auto command_line = ftl::CommandLineFromArgcArgv(argc, argv); if (command_line.HasOption(shell::FlagForSwitch(shell::Switch::Help))) {