提交 f8d80c46 编写于 作者: A Adam Barth 提交者: GitHub

Finish removing //flutter/tonic (#2917)

This pulled a refactoring of how we keep track of the primary threads.
上级 855e471c
......@@ -13,7 +13,7 @@ group("flutter") {
"//flutter/glue",
"//flutter/lib/ui",
"//flutter/snapshotter",
"//flutter/tonic",
"//lib/tonic",
]
} else {
deps = [
......
......@@ -2,20 +2,15 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
source_set("tonic") {
source_set("common") {
sources = [
"dart_state.cc",
"dart_state.h",
"settings.cc",
"settings.h",
"threads.cc",
"threads.h",
]
deps = [
"//dart/runtime/bin:embedded_dart_io",
"//lib/ftl",
]
public_deps = [
"//dart/runtime:libdart",
"//dart/runtime/vm:libdart_platform",
"//lib/tonic",
]
}
Flutter Common
==============
The bottom of the dependency graph for Flutter. Useful for static constants.
Please don't put too much in here.
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/sky/engine/public/platform/sky_settings.h"
#include "flutter/common/settings.h"
#include <memory>
......@@ -11,19 +11,19 @@
namespace blink {
namespace {
SkySettings* g_settings = nullptr;
Settings* g_settings = nullptr;
} // namespace
const SkySettings& SkySettings::Get() {
const Settings& Settings::Get() {
FTL_CHECK(g_settings);
return *g_settings;
}
void SkySettings::Set(const SkySettings& settings) {
void Settings::Set(const Settings& settings) {
FTL_CHECK(!g_settings);
g_settings = new SkySettings();
g_settings = new Settings();
*g_settings = settings;
}
} // namespace blink
} // namespace blink
......@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SKY_ENGINE_PUBLIC_PLATFORM_SKY_SETTINGS_H_
#define SKY_ENGINE_PUBLIC_PLATFORM_SKY_SETTINGS_H_
#ifndef FLUTTER_COMMON_SETTINGS_H_
#define FLUTTER_COMMON_SETTINGS_H_
#include <stdint.h>
......@@ -12,7 +12,7 @@
namespace blink {
struct SkySettings {
struct Settings {
bool enable_observatory = false;
// Port on target will be auto selected by the OS. A message will be printed
// on the target with the port after it has been selected.
......@@ -24,10 +24,10 @@ struct SkySettings {
std::string temp_directory_path;
std::vector<std::string> dart_flags;
static const SkySettings& Get();
static void Set(const SkySettings& settings);
static const Settings& Get();
static void Set(const Settings& settings);
};
} // namespace blink
#endif // SKY_ENGINE_PUBLIC_PLATFORM_SKY_SETTINGS_H_
#endif // FLUTTER_COMMON_SETTINGS_H_
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/common/threads.h"
#include <utility>
namespace blink {
namespace {
Threads* g_threads = nullptr;
} // namespace
Threads::Threads() {}
Threads::Threads(ftl::RefPtr<ftl::TaskRunner> gpu,
ftl::RefPtr<ftl::TaskRunner> ui,
ftl::RefPtr<ftl::TaskRunner> io)
: gpu_(std::move(gpu)), ui_(std::move(ui)), io_(std::move(io)) {}
Threads::~Threads() {}
const ftl::RefPtr<ftl::TaskRunner>& Threads::Gpu() {
return Get().gpu_;
}
const ftl::RefPtr<ftl::TaskRunner>& Threads::UI() {
return Get().ui_;
}
const ftl::RefPtr<ftl::TaskRunner>& Threads::IO() {
return Get().io_;
}
const Threads& Threads::Get() {
FTL_CHECK(g_threads);
return *g_threads;
}
void Threads::Set(const Threads& threads) {
FTL_CHECK(!g_threads);
g_threads = new Threads();
*g_threads = threads;
}
} // namespace blink
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_COMMON_THREADS_H_
#define FLUTTER_COMMON_THREADS_H_
#include "lib/ftl/tasks/task_runner.h"
namespace blink {
class Threads {
public:
Threads();
Threads(ftl::RefPtr<ftl::TaskRunner> gpu,
ftl::RefPtr<ftl::TaskRunner> ui,
ftl::RefPtr<ftl::TaskRunner> io);
~Threads();
static const ftl::RefPtr<ftl::TaskRunner>& Gpu();
static const ftl::RefPtr<ftl::TaskRunner>& UI();
static const ftl::RefPtr<ftl::TaskRunner>& IO();
static void Set(const Threads& settings);
private:
static const Threads& Get();
ftl::RefPtr<ftl::TaskRunner> gpu_;
ftl::RefPtr<ftl::TaskRunner> ui_;
ftl::RefPtr<ftl::TaskRunner> io_;
};
} // namespace blink
#endif // FLUTTER_COMMON_THREADS_H_
......@@ -20,6 +20,6 @@ source_set("jni") {
deps = [
"//base",
"//flutter/tonic",
"//lib/tonic",
]
}
......@@ -41,10 +41,10 @@ source_set("ui") {
]
deps = [
"//flutter/common",
"//flutter/flow",
"//flutter/glue",
"//flutter/skia",
"//flutter/tonic",
"//lib/tonic",
"//lib/tonic/mojo",
]
......
......@@ -4,15 +4,15 @@
#include "flutter/lib/ui/painting/image_decoding.h"
#include "flutter/common/threads.h"
#include "flutter/flow/texture_image.h"
#include "flutter/glue/drain_data_pipe_job.h"
#include "flutter/glue/movable_wrapper.h"
#include "flutter/glue/trace_event.h"
#include "flutter/lib/ui/painting/image.h"
#include "flutter/lib/ui/painting/resource_context.h"
#include "flutter/tonic/dart_state.h"
#include "lib/ftl/tasks/task_runner.h"
#include "lib/tonic/dart_persistent_value.h"
#include "lib/tonic/dart_state.h"
#include "lib/tonic/logging/dart_invoke.h"
#include "lib/tonic/mojo/mojo_converter.h"
#include "lib/tonic/typed_data/uint8_list.h"
......@@ -73,11 +73,10 @@ void InvokeImageCallback(sk_sp<SkImage> image,
}
void DecodeImageAndInvokeImageCallback(
ftl::RefPtr<ftl::TaskRunner> task_runner,
glue::MovableWrapper<std::unique_ptr<DartPersistentValue>> callback,
std::vector<char> buffer) {
sk_sp<SkImage> image = DecodeImage(std::move(buffer));
task_runner->PostTask([callback, image]() mutable {
Threads::UI()->PostTask([callback, image]() mutable {
InvokeImageCallback(image, callback.Unwrap());
});
}
......@@ -99,23 +98,17 @@ void DecodeImageFromDataPipe(Dart_NativeArguments args) {
return;
}
DartState* dart_state = DartState::Current();
ftl::RefPtr<ftl::TaskRunner> task_runner = dart_state->ui_task_runner();
auto callback = glue::WrapMovable(std::unique_ptr<DartPersistentValue>(
new DartPersistentValue(dart_state, callback_handle)));
dart_state->io_task_runner()->PostTask(
[task_runner, callback, consumer]() mutable {
glue::DrainDataPipeJob* job = nullptr;
job = new glue::DrainDataPipeJob(
consumer.Unwrap(),
[task_runner, callback, job](std::vector<char> buffer) {
delete job;
DecodeImageAndInvokeImageCallback(task_runner, callback,
std::move(buffer));
});
});
new DartPersistentValue(tonic::DartState::Current(), callback_handle)));
Threads::IO()->PostTask([callback, consumer]() mutable {
glue::DrainDataPipeJob* job = nullptr;
job = new glue::DrainDataPipeJob(
consumer.Unwrap(), [callback, job](std::vector<char> buffer) {
delete job;
DecodeImageAndInvokeImageCallback(callback, std::move(buffer));
});
});
}
void DecodeImageFromList(Dart_NativeArguments args) {
......@@ -134,21 +127,16 @@ void DecodeImageFromList(Dart_NativeArguments args) {
return;
}
DartState* dart_state = DartState::Current();
ftl::RefPtr<ftl::TaskRunner> task_runner = dart_state->ui_task_runner();
auto callback = glue::WrapMovable(std::unique_ptr<DartPersistentValue>(
new DartPersistentValue(dart_state, callback_handle)));
new DartPersistentValue(tonic::DartState::Current(), callback_handle)));
const char* bytes = reinterpret_cast<const char*>(list.data());
auto buffer = glue::WrapMovable(std::unique_ptr<std::vector<char>>(
new std::vector<char>(bytes, bytes + list.num_elements())));
dart_state->io_task_runner()->PostTask(
[task_runner, callback, buffer]() mutable {
DecodeImageAndInvokeImageCallback(task_runner, callback,
std::move(*buffer.Unwrap()));
});
Threads::IO()->PostTask([callback, buffer]() mutable {
DecodeImageAndInvokeImageCallback(callback, std::move(*buffer.Unwrap()));
});
}
} // namespace
......
......@@ -24,7 +24,6 @@ source_set("bindings") {
"//dart/runtime/bin:embedded_dart_io",
"//flutter/assets",
"//flutter/lib/ui",
"//flutter/tonic",
"//lib/tonic",
"//mojo/public/c/system",
"//mojo/public/cpp/application",
......
......@@ -11,17 +11,17 @@
#include "dart/runtime/bin/embedded_dart_io.h"
#include "dart/runtime/include/dart_api.h"
#include "dart/runtime/include/dart_tools_api.h"
#include "lib/tonic/dart_library_natives.h"
#include "flutter/tonic/dart_state.h"
#include "flutter/sky/engine/core/script/ui_dart_state.h"
#include "flutter/sky/engine/wtf/text/WTFString.h"
#include "lib/ftl/logging.h"
#include "lib/tonic/converter/dart_converter.h"
#include "lib/tonic/dart_library_natives.h"
#include "lib/tonic/dart_microtask_queue.h"
#include "lib/tonic/dart_state.h"
#include "lib/tonic/logging/dart_error.h"
#include "lib/tonic/logging/dart_invoke.h"
#include "lib/tonic/scopes/dart_api_scope.h"
#include "lib/tonic/scopes/dart_isolate_scope.h"
#include "flutter/sky/engine/core/script/ui_dart_state.h"
#include "flutter/sky/engine/wtf/text/WTFString.h"
#if defined(OS_ANDROID)
#include <android/log.h>
......
......@@ -8,9 +8,9 @@
#include <string>
#include "dart/runtime/include/dart_api.h"
#include "flutter/tonic/dart_state.h"
#include "lib/ftl/build_config.h"
#include "lib/tonic/dart_persistent_value.h"
#include "lib/tonic/dart_state.h"
namespace blink {
......@@ -25,7 +25,7 @@ class IsolateClient {
virtual ~IsolateClient();
};
class FlutterDartState : public DartState {
class FlutterDartState : public tonic::DartState {
public:
FlutterDartState* CreateForChildIsolate();
~FlutterDartState() override;
......@@ -37,9 +37,7 @@ class FlutterDartState : public DartState {
static FlutterDartState* Current();
Dart_Port main_port() const {
return main_port_;
}
Dart_Port main_port() const { return main_port_; }
void set_mojo_services(std::unique_ptr<MojoServices> mojo_services);
MojoServices* mojo_services();
......
......@@ -4,13 +4,15 @@
#include "flutter/sky/engine/bindings/mojo_services.h"
#include "flutter/sky/engine/bindings/flutter_dart_state.h"
#include "lib/tonic/converter/dart_converter.h"
#include "lib/tonic/logging/dart_error.h"
#include "lib/tonic/dart_library_natives.h"
#include "flutter/tonic/dart_state.h"
#include "lib/tonic/dart_state.h"
#include "lib/tonic/logging/dart_error.h"
#include "mojo/public/cpp/application/connect.h"
#include "mojo/public/cpp/bindings/array.h"
#include "flutter/sky/engine/bindings/flutter_dart_state.h"
using tonic::DartState;
namespace blink {
namespace {
......
......@@ -10,11 +10,11 @@ visibility = [ "//flutter/sky/engine/*", "//flutter/sky/shell/*" ]
source_set("libraries") {
public_deps = [
"//base",
"//flutter/common",
"//flutter/flow",
"//flutter/glue",
"//flutter/lib/io",
"//flutter/lib/ui",
"//flutter/tonic",
"//lib/ftl",
"//lib/tonic",
"//lib/tonic/debugger",
......
......@@ -7,6 +7,8 @@
#include <utility>
#include "dart/runtime/include/dart_tools_api.h"
#include "flutter/common/settings.h"
#include "flutter/common/threads.h"
#include "flutter/glue/trace_event.h"
#include "flutter/lib/io/dart_io.h"
#include "flutter/sky/engine/bindings/dart_mojo_internal.h"
......@@ -16,13 +18,12 @@
#include "flutter/sky/engine/core/script/dart_service_isolate.h"
#include "flutter/sky/engine/core/script/ui_dart_state.h"
#include "flutter/sky/engine/public/platform/Platform.h"
#include "flutter/sky/engine/public/platform/sky_settings.h"
#include "flutter/sky/engine/wtf/MakeUnique.h"
#include "flutter/tonic/dart_state.h"
#include "lib/ftl/files/directory.h"
#include "lib/ftl/files/path.h"
#include "lib/tonic/dart_class_library.h"
#include "lib/tonic/dart_message_handler.h"
#include "lib/tonic/dart_state.h"
#include "lib/tonic/dart_wrappable.h"
#include "lib/tonic/debugger/dart_debugger.h"
#include "lib/tonic/file_loader/file_loader.h"
......@@ -139,14 +140,13 @@ void DartController::CreateIsolateFor(std::unique_ptr<UIDartState> state) {
Dart_Isolate isolate = Dart_CreateIsolate(
state->url().c_str(), "main",
reinterpret_cast<uint8_t*>(DART_SYMBOL(kDartIsolateSnapshotBuffer)),
nullptr, static_cast<DartState*>(state.get()), &error);
nullptr, static_cast<tonic::DartState*>(state.get()), &error);
FTL_CHECK(isolate) << error;
ui_dart_state_ = state.release();
FTL_DCHECK(Platform::current());
dart_state()->message_handler().Initialize(
ftl::RefPtr<ftl::TaskRunner>(Platform::current()->GetUITaskRunner()));
dart_state()->message_handler().Initialize(blink::Threads::UI());
Dart_SetShouldPauseOnStart(SkySettings::Get().start_paused);
Dart_SetShouldPauseOnStart(Settings::Get().start_paused);
ui_dart_state_->SetIsolate(isolate);
FTL_CHECK(!LogIfError(
......
......@@ -15,6 +15,7 @@
#include "dart/runtime/bin/embedded_dart_io.h"
#include "dart/runtime/include/dart_mirrors_api.h"
#include "flutter/assets/zip_asset_store.h"
#include "flutter/common/settings.h"
#include "flutter/glue/trace_event.h"
#include "flutter/lib/io/dart_io.h"
#include "flutter/sky/engine/bindings/dart_mojo_internal.h"
......@@ -23,14 +24,13 @@
#include "flutter/sky/engine/core/script/dart_service_isolate.h"
#include "flutter/sky/engine/core/script/ui_dart_state.h"
#include "flutter/sky/engine/core/start_up.h"
#include "flutter/sky/engine/public/platform/sky_settings.h"
#include "flutter/sky/engine/wtf/MakeUnique.h"
#include "flutter/tonic/dart_state.h"
#include "lib/ftl/files/eintr_wrapper.h"
#include "lib/ftl/files/unique_fd.h"
#include "lib/ftl/logging.h"
#include "lib/ftl/time/time_delta.h"
#include "lib/tonic/dart_class_library.h"
#include "lib/tonic/dart_state.h"
#include "lib/tonic/dart_wrappable.h"
#include "lib/tonic/debugger/dart_debugger.h"
#include "lib/tonic/logging/dart_error.h"
......@@ -120,7 +120,7 @@ RegisterNativeServiceProtocolExtensionHook
g_register_native_service_protocol_extensions_hook = nullptr;
void IsolateShutdownCallback(void* callback_data) {
DartState* dart_state = static_cast<DartState*>(callback_data);
tonic::DartState* dart_state = static_cast<tonic::DartState*>(callback_data);
delete dart_state;
}
......@@ -175,7 +175,7 @@ Dart_Isolate ServiceIsolateCreateCallback(const char* script_uri,
Dart_Isolate ServiceIsolateCreateCallback(const char* script_uri,
char** error) {
DartState* dart_state = new DartState();
tonic::DartState* dart_state = new tonic::DartState();
Dart_Isolate isolate = Dart_CreateIsolate(
script_uri, "main",
reinterpret_cast<const uint8_t*>(DART_SYMBOL(kDartIsolateSnapshotBuffer)),
......@@ -191,7 +191,7 @@ Dart_Isolate ServiceIsolateCreateCallback(const char* script_uri,
DartUI::InitForIsolate();
DartMojoInternal::InitForIsolate();
DartRuntimeHooks::Install(DartRuntimeHooks::SecondaryIsolate, "");
const SkySettings& settings = SkySettings::Get();
const Settings& settings = Settings::Get();
if (settings.enable_observatory) {
std::string ip = "127.0.0.1";
const intptr_t port = settings.observatory_port;
......@@ -402,7 +402,7 @@ void* _DartSymbolLookup(const char* symbol_name) {
return symbol_asset.mapping;
}
const std::string& aot_snapshot_path = SkySettings::Get().aot_snapshot_path;
const std::string& aot_snapshot_path = Settings::Get().aot_snapshot_path;
FTL_CHECK(!aot_snapshot_path.empty());
std::string asset_path = aot_snapshot_path + "/" + symbol_asset.file_name;
......@@ -506,14 +506,14 @@ static bool ShouldEnableCheckedMode() {
#if ENABLE(DART_STRICT)
return true;
#else
return SkySettings::Get().enable_dart_checked_mode;
return Settings::Get().enable_dart_checked_mode;
#endif
}
void InitDartVM() {
TRACE_EVENT0("flutter", __func__);
const SkySettings& settings = SkySettings::Get();
const Settings& settings = Settings::Get();
{
TRACE_EVENT0("flutter", "dart::bin::BootstrapDartIo");
......
......@@ -12,12 +12,7 @@ namespace blink {
UIDartState::UIDartState(IsolateClient* isolate_client,
const std::string& url,
std::unique_ptr<Window> window)
: FlutterDartState(isolate_client, url), window_(std::move(window)) {
ui_task_runner_ =
ftl::RefPtr<ftl::TaskRunner>(Platform::current()->GetUITaskRunner());
io_task_runner_ =
ftl::RefPtr<ftl::TaskRunner>(Platform::current()->GetIOTaskRunner());
}
: FlutterDartState(isolate_client, url), window_(std::move(window)) {}
UIDartState::~UIDartState() {}
......
......@@ -4,11 +4,7 @@
#include "flutter/sky/engine/core/text/ParagraphBuilder.h"
#include "lib/tonic/dart_args.h"
#include "lib/tonic/dart_binding_macros.h"
#include "lib/tonic/dart_library_natives.h"
#include "lib/ftl/tasks/task_runner.h"
#include "lib/tonic/converter/dart_converter.h"
#include "flutter/common/threads.h"
#include "flutter/sky/engine/core/rendering/PaintInfo.h"
#include "flutter/sky/engine/core/rendering/RenderText.h"
#include "flutter/sky/engine/core/rendering/style/RenderStyle.h"
......@@ -16,6 +12,11 @@
#include "flutter/sky/engine/platform/graphics/GraphicsContext.h"
#include "flutter/sky/engine/platform/text/TextBoundaries.h"
#include "flutter/sky/engine/public/platform/Platform.h"
#include "lib/ftl/tasks/task_runner.h"
#include "lib/tonic/converter/dart_converter.h"
#include "lib/tonic/dart_args.h"
#include "lib/tonic/dart_binding_macros.h"
#include "lib/tonic/dart_library_natives.h"
using tonic::ToDart;
......@@ -43,7 +44,7 @@ Paragraph::Paragraph(PassOwnPtr<RenderView> renderView)
Paragraph::~Paragraph() {
PassOwnPtr<RenderView> renderView = m_renderView.release();
Platform::current()->GetUITaskRunner()->PostTask(
Threads::UI()->PostTask(
[renderView]() { /* renderView's destructor runs. */ });
}
......
......@@ -4,11 +4,7 @@
#include "flutter/sky/engine/core/text/ParagraphBuilder.h"
#include "lib/tonic/dart_args.h"
#include "lib/tonic/dart_binding_macros.h"
#include "lib/tonic/dart_library_natives.h"
#include "lib/ftl/tasks/task_runner.h"
#include "lib/tonic/converter/dart_converter.h"
#include "flutter/common/threads.h"
#include "flutter/sky/engine/core/rendering/RenderInline.h"
#include "flutter/sky/engine/core/rendering/RenderParagraph.h"
#include "flutter/sky/engine/core/rendering/RenderText.h"
......@@ -16,6 +12,11 @@
#include "flutter/sky/engine/core/script/ui_dart_state.h"
#include "flutter/sky/engine/platform/text/LocaleToScriptMapping.h"
#include "flutter/sky/engine/public/platform/Platform.h"
#include "lib/ftl/tasks/task_runner.h"
#include "lib/tonic/converter/dart_converter.h"
#include "lib/tonic/dart_args.h"
#include "lib/tonic/dart_binding_macros.h"
#include "lib/tonic/dart_library_natives.h"
namespace blink {
namespace {
......@@ -137,7 +138,7 @@ ParagraphBuilder::ParagraphBuilder() {
ParagraphBuilder::~ParagraphBuilder() {
PassOwnPtr<RenderView> renderView = m_renderView.release();
Platform::current()->GetUITaskRunner()->PostTask(
Threads::UI()->PostTask(
[renderView]() { /* renderView's destructor runs. */ });
}
......
......@@ -11,6 +11,7 @@
#include "flutter/sky/engine/core/script/ui_dart_state.h"
using tonic::DartInvokeField;
using tonic::DartState;
using tonic::StdStringToDart;
using tonic::ToDart;
......
......@@ -39,7 +39,6 @@ source_set("platform") {
"animation/TimingFunction.h",
"animation/UnitBezier.h",
"exported/Platform.cpp",
"exported/sky_settings.cc",
"exported/WebCommon.cpp",
"fonts/AlternateFontFamily.h",
"fonts/Character.cpp",
......
......@@ -26,9 +26,10 @@
#include "flutter/sky/engine/platform/SharedBuffer.h"
#include "flutter/common/threads.h"
#include "flutter/sky/engine/public/platform/Platform.h"
#include "flutter/sky/engine/wtf/unicode/UTF8.h"
#include "flutter/sky/engine/wtf/unicode/Unicode.h"
#include "flutter/sky/engine/wtf/unicode/UTF8.h"
#undef SHARED_BUFFER_STATS
......@@ -116,7 +117,7 @@ static void didCreateSharedBuffer(SharedBuffer* buffer) {
MutexLocker locker(statsMutex());
liveBuffers().add(buffer);
Platform::current()->GetUITaskRunner()->PostTask(printStats);
Threads::UI()->PostTask(printStats);
}
static void willDestroySharedBuffer(SharedBuffer* buffer) {
......
......@@ -35,10 +35,6 @@
#include "flutter/sky/engine/public/platform/WebCommon.h"
namespace ftl {
class TaskRunner;
}
namespace blink {
class WebDiscardableMemory;
......@@ -65,9 +61,6 @@ class Platform {
// Returns a value such as "en-US".
virtual std::string defaultLocale() { return std::string(); }
virtual ftl::TaskRunner* GetUITaskRunner() { return nullptr; }
virtual ftl::TaskRunner* GetIOTaskRunner() { return nullptr; }
protected:
virtual ~Platform() {}
};
......
......@@ -12,6 +12,8 @@
#include "flutter/sky/engine/public/sky/sky_view_client.h"
#include "flutter/sky/engine/wtf/MakeUnique.h"
using tonic::DartState;
namespace blink {
std::unique_ptr<SkyView> SkyView::Create(SkyViewClient* client) {
......
......@@ -51,10 +51,10 @@ source_set("common") {
"//base",
"//build/config/sanitizers:deps",
"//dart/runtime:libdart",
"//flutter/common",
"//flutter/flow",
"//flutter/assets",
"//flutter/lib/ui",
"//flutter/tonic",
"//flutter/glue",
"//lib/ftl",
"//lib/tonic",
......
......@@ -6,16 +6,17 @@
#include "dart/runtime/include/dart_api.h"
#include "dart/runtime/include/dart_native_api.h"
#include "flutter/common/threads.h"
#include "flutter/flow/compositor_context.h"
#include "lib/ftl/logging.h"
#include "lib/tonic/dart_binding_macros.h"
#include "lib/tonic/dart_library_natives.h"
#include "lib/tonic/logging/dart_invoke.h"
#include "flutter/sky/engine/core/script/embedder_resources.h"
#include "flutter/sky/shell/gpu/picture_serializer.h"
#include "flutter/sky/shell/rasterizer.h"
#include "flutter/sky/shell/shell.h"
#include "flutter/sky/shell/ui/engine.h"
#include "lib/ftl/logging.h"
#include "lib/tonic/dart_binding_macros.h"
#include "lib/tonic/dart_library_natives.h"
#include "lib/tonic/logging/dart_invoke.h"
#include "third_party/skia/include/core/SkStream.h"
namespace mojo {
......@@ -98,8 +99,7 @@ void DiagnosticServer::HandleSkiaPictureRequest(Dart_Handle send_port) {
Dart_Port port_id;
FTL_CHECK(!LogIfError(Dart_SendPortGetId(send_port, &port_id)));
Shell::Shared().gpu_ftl_task_runner()->PostTask(
[port_id]() { SkiaPictureTask(port_id); });
blink::Threads::Gpu()->PostTask([port_id]() { SkiaPictureTask(port_id); });
}
void DiagnosticServer::SkiaPictureTask(Dart_Port port_id) {
......
......@@ -23,7 +23,14 @@ mojo_native_application("mojo") {
]
deps = [
"//flutter/tonic",
"//flutter/common",
"//flutter/services/icu",
"//flutter/services/raw_keyboard:interfaces",
"//flutter/skia",
"//flutter/sky/engine/public/sky",
"//flutter/sky/engine/web",
"//flutter/sky/shell:common",
"//flutter/sky/shell:gpu_mojo",
"//mojo/application",
"//mojo/common:tracing_impl",
"//mojo/common",
......@@ -36,13 +43,6 @@ mojo_native_application("mojo") {
"//mojo/services/input_events/interfaces",
"//mojo/services/ui/input/interfaces",
"//mojo/services/ui/views/interfaces",
"//flutter/services/icu",
"//flutter/skia",
"//flutter/sky/engine/public/sky",
"//flutter/sky/engine/web",
"//flutter/services/raw_keyboard:interfaces",
"//flutter/sky/shell:common",
"//flutter/sky/shell:gpu_mojo",
"//third_party/icu",
]
......
......@@ -5,6 +5,10 @@
#include "base/files/file_path.h"
#include "base/message_loop/message_loop.h"
#include "base/threading/thread.h"
#include "flutter/common/settings.h"
#include "flutter/services/icu/icu.h"
#include "flutter/sky/shell/platform/mojo/content_handler_impl.h"
#include "flutter/sky/shell/shell.h"
#include "mojo/common/tracing_impl.h"
#include "mojo/environment/scoped_chromium_init.h"
#include "mojo/public/c/system/main.h"
......@@ -13,10 +17,6 @@
#include "mojo/public/cpp/application/run_application.h"
#include "mojo/public/cpp/application/service_provider_impl.h"
#include "mojo/services/content_handler/interfaces/content_handler.mojom.h"
#include "flutter/services/icu/icu.h"
#include "flutter/sky/engine/public/platform/sky_settings.h"
#include "flutter/sky/shell/platform/mojo/content_handler_impl.h"
#include "flutter/sky/shell/shell.h"
namespace sky {
namespace shell {
......@@ -30,7 +30,7 @@ const char kPauseIsolatesOnStart[] = "--pause-isolates-on-start";
class MojoApp : public mojo::ApplicationImplBase {
public:
MojoApp() {}
~MojoApp() override { }
~MojoApp() override {}
private:
// Overridden from ApplicationDelegate:
......@@ -41,11 +41,11 @@ class MojoApp : public mojo::ApplicationImplBase {
mojo::icu::Initialize(application_connector.get());
tracing_.Initialize(shell(), &args());
blink::SkySettings settings;
blink::Settings settings;
settings.enable_observatory = true;
settings.enable_dart_checked_mode = HasArg(kEnableCheckedMode);
settings.start_paused = HasArg(kPauseIsolatesOnStart);
blink::SkySettings::Set(settings);
blink::Settings::Set(settings);
Shell::Init();
}
......@@ -53,10 +53,10 @@ class MojoApp : public mojo::ApplicationImplBase {
bool OnAcceptConnection(
mojo::ServiceProviderImpl* service_provider_impl) override {
service_provider_impl->AddService<mojo::ContentHandler>(
[](const mojo::ConnectionContext& connection_context,
mojo::InterfaceRequest<mojo::ContentHandler> request) {
new ContentHandlerImpl(request.Pass());
});
[](const mojo::ConnectionContext& connection_context,
mojo::InterfaceRequest<mojo::ContentHandler> request) {
new ContentHandlerImpl(request.Pass());
});
return true;
}
......
......@@ -6,8 +6,9 @@
#include <utility>
#include "flutter/lib/ui/painting/resource_context.h"
#include "flutter/common/threads.h"
#include "flutter/glue/movable_wrapper.h"
#include "flutter/lib/ui/painting/resource_context.h"
#include "flutter/sky/shell/rasterizer.h"
#include "third_party/skia/include/gpu/gl/GrGLInterface.h"
......@@ -20,19 +21,15 @@ PlatformView::Config::~Config() = default;
PlatformView::PlatformView()
: rasterizer_(Rasterizer::Create()), size_(SkISize::Make(0, 0)) {
Shell& shell = Shell::Shared();
// Create the engine for this platform view.
Engine::Config engine_config;
engine_config.gpu_task_runner =
ftl::RefPtr<ftl::TaskRunner>(shell.gpu_ftl_task_runner());
ftl::WeakPtr<Rasterizer> rasterizer_impl =
rasterizer_->GetWeakRasterizerPtr();
rasterizer::RasterizerPtr rasterizer;
auto request = glue::WrapMovable(mojo::GetProxy(&rasterizer));
shell.gpu_ftl_task_runner()->PostTask([rasterizer_impl, request]() mutable {
blink::Threads::Gpu()->PostTask([rasterizer_impl, request]() mutable {
if (rasterizer_impl)
rasterizer_impl->ConnectToRasterizer(request.Unwrap());
});
......@@ -40,34 +37,30 @@ PlatformView::PlatformView()
engine_.reset(new Engine(engine_config, rasterizer.Pass()));
// Setup the platform config.
config_.ui_task_runner =
ftl::RefPtr<ftl::TaskRunner>(shell.ui_ftl_task_runner());
config_.ui_delegate = engine_->GetWeakPtr();
config_.rasterizer = rasterizer_.get();
}
PlatformView::~PlatformView() {
Shell& shell = Shell::Shared();
shell.ui_ftl_task_runner()->PostTask(
blink::Threads::UI()->PostTask(
[]() { Shell::Shared().PurgePlatformViews(); });
Rasterizer* rasterizer = rasterizer_.release();
shell.gpu_ftl_task_runner()->PostTask([rasterizer]() { delete rasterizer; });
blink::Threads::Gpu()->PostTask([rasterizer]() { delete rasterizer; });
Engine* engine = engine_.release();
shell.ui_ftl_task_runner()->PostTask([engine]() { delete engine; });
blink::Threads::UI()->PostTask([engine]() { delete engine; });
}
void PlatformView::ConnectToEngine(mojo::InterfaceRequest<SkyEngine> request) {
ftl::WeakPtr<UIDelegate> ui_delegate = config_.ui_delegate;
auto wrapped_request = glue::WrapMovable(std::move(request));
config_.ui_task_runner->PostTask([ui_delegate, wrapped_request]() mutable {
blink::Threads::UI()->PostTask([ui_delegate, wrapped_request]() mutable {
if (ui_delegate)
ui_delegate->ConnectToEngine(wrapped_request.Unwrap());
});
ftl::WeakPtr<PlatformView> view = GetWeakViewPtr();
config_.ui_task_runner->PostTask(
blink::Threads::UI()->PostTask(
[view]() { Shell::Shared().AddPlatformView(view); });
}
......@@ -89,7 +82,7 @@ void PlatformView::NotifyCreated(ftl::Closure rasterizer_continuation) {
};
auto delegate = config_.ui_delegate;
config_.ui_task_runner->PostTask([delegate, delegate_continuation]() {
blink::Threads::UI()->PostTask([delegate, delegate_continuation]() {
if (delegate)
delegate->OnOutputSurfaceCreated(delegate_continuation);
// TODO(abarth): We should signal the latch if the delegate is gone.
......@@ -112,7 +105,7 @@ void PlatformView::NotifyDestroyed() {
// TODO(abarth): We should signal the latch if the rasterizer is gone.
};
config_.ui_task_runner->PostTask([delegate, delegate_continuation]() {
blink::Threads::UI()->PostTask([delegate, delegate_continuation]() {
if (delegate)
delegate->OnOutputSurfaceDestroyed(delegate_continuation);
// TODO(abarth): We should signal the latch if the delegate is gone.
......@@ -132,7 +125,7 @@ void PlatformView::Resize(const SkISize& size) {
void PlatformView::SetupResourceContextOnIOThread() {
ftl::AutoResetWaitableEvent latch;
Shell::Shared().io_ftl_task_runner()->PostTask(
blink::Threads::IO()->PostTask(
[this, &latch]() { SetupResourceContextOnIOThreadPerform(&latch); });
latch.Wait();
......
......@@ -30,7 +30,6 @@ class PlatformView {
ftl::WeakPtr<UIDelegate> ui_delegate;
Rasterizer* rasterizer;
ftl::RefPtr<ftl::TaskRunner> ui_task_runner;
};
struct SurfaceConfig {
......
......@@ -18,16 +18,17 @@
#include "base/single_thread_task_runner.h"
#include "base/trace_event/trace_event.h"
#include "dart/runtime/include/dart_tools_api.h"
#include "flutter/common/settings.h"
#include "flutter/common/threads.h"
#include "flutter/glue/task_runner_adaptor.h"
#include "lib/ftl/files/unique_fd.h"
#include "mojo/message_pump/message_pump_mojo.h"
#include "flutter/skia/ext/event_tracer_impl.h"
#include "flutter/sky/engine/core/script/dart_init.h"
#include "flutter/sky/engine/public/platform/sky_settings.h"
#include "flutter/sky/shell/diagnostic/diagnostic_server.h"
#include "flutter/sky/shell/platform_view_service_protocol.h"
#include "flutter/sky/shell/switches.h"
#include "flutter/sky/shell/ui/engine.h"
#include "lib/ftl/files/unique_fd.h"
#include "mojo/message_pump/message_pump_mojo.h"
namespace sky {
namespace shell {
......@@ -70,7 +71,7 @@ base::LazyInstance<NonDiscardableMemoryAllocator> g_discardable;
void ServiceIsolateHook(bool running_precompiled) {
if (!running_precompiled) {
const blink::SkySettings& settings = blink::SkySettings::Get();
const blink::Settings& settings = blink::Settings::Get();
if (settings.enable_observatory)
DiagnosticServer::Start();
}
......@@ -86,20 +87,23 @@ Shell::Shell() {
gpu_thread_.reset(new base::Thread("gpu_thread"));
gpu_thread_->StartWithOptions(options);
gpu_ftl_task_runner_ = ftl::MakeRefCounted<glue::TaskRunnerAdaptor>(
gpu_thread_->message_loop()->task_runner());
gpu_ftl_task_runner_->PostTask([this]() { InitGpuThread(); });
ui_thread_.reset(new base::Thread("ui_thread"));
ui_thread_->StartWithOptions(options);
ui_ftl_task_runner_ = ftl::MakeRefCounted<glue::TaskRunnerAdaptor>(
ui_thread_->message_loop()->task_runner());
ui_ftl_task_runner_->PostTask([this]() { InitUIThread(); });
io_thread_.reset(new base::Thread("io_thread"));
io_thread_->StartWithOptions(options);
io_ftl_task_runner_ = ftl::MakeRefCounted<glue::TaskRunnerAdaptor>(
io_thread_->message_loop()->task_runner());
blink::Threads threads(ftl::MakeRefCounted<glue::TaskRunnerAdaptor>(
gpu_thread_->message_loop()->task_runner()),
ftl::MakeRefCounted<glue::TaskRunnerAdaptor>(
ui_thread_->message_loop()->task_runner()),
ftl::MakeRefCounted<glue::TaskRunnerAdaptor>(
io_thread_->message_loop()->task_runner()));
blink::Threads::Set(threads);
blink::Threads::Gpu()->PostTask([this]() { InitGpuThread(); });
blink::Threads::UI()->PostTask([this]() { InitUIThread(); });
blink::SetServiceIsolateHook(ServiceIsolateHook);
blink::SetRegisterNativeServiceProtocolExtensionHook(
......@@ -126,7 +130,7 @@ void Shell::InitStandalone(std::string icu_data_path) {
base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess();
blink::SkySettings settings;
blink::Settings settings;
// Enable Observatory
settings.enable_observatory =
!command_line.HasSwitch(switches::kNonInteractive);
......@@ -163,7 +167,7 @@ void Shell::InitStandalone(std::string icu_data_path) {
settings.dart_flags.push_back(*it);
}
blink::SkySettings::Set(settings);
blink::Settings::Set(settings);
Init();
}
......@@ -177,7 +181,7 @@ void Shell::Init() {
FTL_DCHECK(!g_shell);
g_shell = new Shell();
g_shell->ui_ftl_task_runner()->PostTask(Engine::Init);
blink::Threads::UI()->PostTask(Engine::Init);
}
Shell& Shell::Shared() {
......@@ -238,7 +242,7 @@ void Shell::WaitForPlatformViewIds(
std::vector<PlatformViewInfo>* platform_view_ids) {
ftl::AutoResetWaitableEvent latch;
ui_ftl_task_runner()->PostTask([this, platform_view_ids, &latch]() {
blink::Threads::UI()->PostTask([this, platform_view_ids, &latch]() {
WaitForPlatformViewsIdsUIThread(platform_view_ids, &latch);
});
......@@ -277,7 +281,7 @@ void Shell::RunInPlatformView(uintptr_t view_id,
FTL_DCHECK(asset_directory);
FTL_DCHECK(view_existed);
ui_ftl_task_runner()->PostTask([this, view_id, main_script, packages_file,
blink::Threads::UI()->PostTask([this, view_id, main_script, packages_file,
asset_directory, view_existed,
dart_isolate_id, &latch]() {
RunInPlatformViewUIThread(view_id, main_script, packages_file,
......
......@@ -31,18 +31,6 @@ class Shell {
static Shell& Shared();
ftl::TaskRunner* gpu_ftl_task_runner() const {
return gpu_ftl_task_runner_.get();
}
ftl::TaskRunner* ui_ftl_task_runner() const {
return ui_ftl_task_runner_.get();
}
ftl::TaskRunner* io_ftl_task_runner() const {
return io_ftl_task_runner_.get();
}
TracingController& tracing_controller();
// Maintain a list of rasterizers.
......@@ -99,10 +87,6 @@ class Shell {
std::unique_ptr<base::Thread> ui_thread_;
std::unique_ptr<base::Thread> io_thread_;
ftl::RefPtr<ftl::TaskRunner> gpu_ftl_task_runner_;
ftl::RefPtr<ftl::TaskRunner> ui_ftl_task_runner_;
ftl::RefPtr<ftl::TaskRunner> io_ftl_task_runner_;
std::unique_ptr<base::ThreadChecker> gpu_thread_checker_;
std::unique_ptr<base::ThreadChecker> ui_thread_checker_;
......
......@@ -6,10 +6,11 @@
#include "base/trace_event/trace_event.h"
#include "dart/runtime/include/dart_tools_api.h"
#include "lib/ftl/logging.h"
#include "flutter/common/threads.h"
#include "flutter/sky/engine/core/script/dart_init.h"
#include "flutter/sky/engine/wtf/MakeUnique.h"
#include "flutter/sky/shell/shell.h"
#include "lib/ftl/logging.h"
#include <string>
......@@ -144,12 +145,9 @@ static void BaseTraceEventCallback(base::TraceTicks timestamp,
}
static void AddTraceMetadata() {
Shell::Shared().gpu_ftl_task_runner()->PostTask(
[]() { Dart_SetThreadName("gpu_thread"); });
Shell::Shared().ui_ftl_task_runner()->PostTask(
[]() { Dart_SetThreadName("ui_thread"); });
Shell::Shared().io_ftl_task_runner()->PostTask(
[]() { Dart_SetThreadName("io_thread"); });
blink::Threads::Gpu()->PostTask([]() { Dart_SetThreadName("gpu_thread"); });
blink::Threads::UI()->PostTask([]() { Dart_SetThreadName("ui_thread"); });
blink::Threads::IO()->PostTask([]() { Dart_SetThreadName("io_thread"); });
}
void TracingController::StartTracing() {
......
......@@ -10,10 +10,9 @@
#include "flutter/assets/directory_asset_bundle.h"
#include "flutter/assets/zip_asset_bundle.h"
#include "flutter/common/threads.h"
#include "flutter/glue/movable_wrapper.h"
#include "flutter/glue/trace_event.h"
#include "lib/ftl/files/path.h"
#include "mojo/public/cpp/application/connect.h"
#include "flutter/sky/engine/bindings/mojo_services.h"
#include "flutter/sky/engine/core/script/dart_controller.h"
#include "flutter/sky/engine/core/script/dart_init.h"
......@@ -23,6 +22,8 @@
#include "flutter/sky/shell/ui/animator.h"
#include "flutter/sky/shell/ui/flutter_font_selector.h"
#include "flutter/sky/shell/ui/platform_impl.h"
#include "lib/ftl/files/path.h"
#include "mojo/public/cpp/application/connect.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkPictureRecorder.h"
......@@ -106,7 +107,7 @@ void Engine::ConnectToEngine(mojo::InterfaceRequest<SkyEngine> request) {
}
void Engine::OnOutputSurfaceCreated(const ftl::Closure& gpu_continuation) {
config_.gpu_task_runner->PostTask(gpu_continuation);
blink::Threads::Gpu()->PostTask(gpu_continuation);
have_surface_ = true;
StartAnimatorIfPossible();
if (sky_view_)
......@@ -116,7 +117,7 @@ void Engine::OnOutputSurfaceCreated(const ftl::Closure& gpu_continuation) {
void Engine::OnOutputSurfaceDestroyed(const ftl::Closure& gpu_continuation) {
have_surface_ = false;
StopAnimator();
config_.gpu_task_runner->PostTask(gpu_continuation);
blink::Threads::Gpu()->PostTask(gpu_continuation);
}
void Engine::SetServices(ServicesDataPtr services) {
......@@ -194,17 +195,14 @@ void Engine::RunFromSnapshotStream(
}
void Engine::ConfigureZipAssetBundle(const std::string& path) {
asset_store_ = ftl::MakeRefCounted<blink::ZipAssetStore>(
path, ftl::RefPtr<ftl::TaskRunner>(
blink::Platform::current()->GetIOTaskRunner()));
asset_store_ =
ftl::MakeRefCounted<blink::ZipAssetStore>(path, blink::Threads::IO());
new blink::ZipAssetBundle(mojo::GetProxy(&root_bundle_), asset_store_);
}
void Engine::ConfigureDirectoryAssetBundle(const std::string& path) {
new blink::DirectoryAssetBundle(
mojo::GetProxy(&root_bundle_), path,
ftl::RefPtr<ftl::TaskRunner>(
blink::Platform::current()->GetIOTaskRunner()));
new blink::DirectoryAssetBundle(mojo::GetProxy(&root_bundle_), path,
blink::Threads::IO());
}
void Engine::ConfigureView(const std::string& script_uri) {
......@@ -300,11 +298,10 @@ void Engine::DidCreateSecondaryIsolate(Dart_Isolate isolate) {
mojo::ServiceProviderPtr services_from_embedder;
auto request = glue::WrapMovable(mojo::GetProxy(&services_from_embedder));
ftl::WeakPtr<Engine> engine = weak_factory_.GetWeakPtr();
blink::Platform::current()->GetUITaskRunner()->PostTask(
[engine, request]() mutable {
if (engine)
engine->BindToServiceProvider(request.Unwrap());
});
blink::Threads::UI()->PostTask([engine, request]() mutable {
if (engine)
engine->BindToServiceProvider(request.Unwrap());
});
blink::MojoServices::Create(isolate, nullptr,
std::move(services_from_embedder), nullptr);
}
......
......@@ -14,7 +14,6 @@
#include "flutter/sky/shell/ui_delegate.h"
#include "lib/ftl/macros.h"
#include "lib/ftl/memory/weak_ptr.h"
#include "lib/ftl/tasks/task_runner.h"
#include "mojo/public/cpp/application/service_provider_impl.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/binding.h"
......@@ -36,8 +35,6 @@ class Engine : public UIDelegate,
struct Config {
Config();
~Config();
ftl::RefPtr<ftl::TaskRunner> gpu_task_runner;
};
explicit Engine(const Config& config, rasterizer::RasterizerPtr rasterizer);
......
......@@ -17,13 +17,5 @@ std::string PlatformImpl::defaultLocale() {
return "en-US";
}
ftl::TaskRunner* PlatformImpl::GetUITaskRunner() {
return Shell::Shared().ui_ftl_task_runner();
}
ftl::TaskRunner* PlatformImpl::GetIOTaskRunner() {
return Shell::Shared().io_ftl_task_runner();
}
} // namespace shell
} // namespace sky
......@@ -19,9 +19,6 @@ class PlatformImpl : public blink::Platform {
// blink::Platform methods:
std::string defaultLocale() override;
ftl::TaskRunner* GetUITaskRunner() override;
ftl::TaskRunner* GetIOTaskRunner() override;
private:
FTL_DISALLOW_COPY_AND_ASSIGN(PlatformImpl);
};
......
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/tonic/dart_state.h"
namespace blink {
DartState::DartState() {}
DartState::~DartState() {}
DartState* DartState::From(Dart_Isolate isolate) {
return static_cast<DartState*>(tonic::DartState::From(isolate));
}
DartState* DartState::Current() {
return static_cast<DartState*>(tonic::DartState::Current());
}
} // namespace blink
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_TONIC_DART_STATE_H_
#define FLUTTER_TONIC_DART_STATE_H_
#include <utility>
#include "dart/runtime/include/dart_api.h"
#include "lib/ftl/tasks/task_runner.h"
#include "lib/tonic/dart_persistent_value.h"
#include "lib/tonic/dart_state.h"
#include "lib/tonic/scopes/dart_api_scope.h"
#include "lib/tonic/scopes/dart_isolate_scope.h"
namespace blink {
class DartState : public tonic::DartState {
public:
DartState();
virtual ~DartState();
static DartState* From(Dart_Isolate isolate);
static DartState* Current();
const ftl::RefPtr<ftl::TaskRunner>& ui_task_runner() {
return ui_task_runner_;
}
const ftl::RefPtr<ftl::TaskRunner>& io_task_runner() {
return io_task_runner_;
}
protected:
ftl::RefPtr<ftl::TaskRunner> ui_task_runner_;
ftl::RefPtr<ftl::TaskRunner> io_task_runner_;
FTL_DISALLOW_COPY_AND_ASSIGN(DartState);
};
} // namespace blink
#endif // FLUTTER_TONIC_DART_STATE_H_
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册