未验证 提交 2970c099 编写于 作者: J Jason Simmons 提交者: GitHub

Use the default microtask scheduler on all isolates except the UI isolate (#5068)

See https://github.com/flutter/flutter/issues/16846
上级 96af3b29
...@@ -62,8 +62,7 @@ static Dart_Handle GetClosure(Dart_Handle builtin_library, const char* name) { ...@@ -62,8 +62,7 @@ static Dart_Handle GetClosure(Dart_Handle builtin_library, const char* name) {
return closure; return closure;
} }
static void InitDartInternal(Dart_Handle builtin_library, static void InitDartInternal(Dart_Handle builtin_library, bool is_ui_isolate) {
DartRuntimeHooks::IsolateType isolate_type) {
Dart_Handle print = GetClosure(builtin_library, "_getPrintClosure"); Dart_Handle print = GetClosure(builtin_library, "_getPrintClosure");
Dart_Handle internal_library = Dart_LookupLibrary(ToDart("dart:_internal")); Dart_Handle internal_library = Dart_LookupLibrary(ToDart("dart:_internal"));
...@@ -71,7 +70,7 @@ static void InitDartInternal(Dart_Handle builtin_library, ...@@ -71,7 +70,7 @@ static void InitDartInternal(Dart_Handle builtin_library,
DART_CHECK_VALID( DART_CHECK_VALID(
Dart_SetField(internal_library, ToDart("_printClosure"), print)); Dart_SetField(internal_library, ToDart("_printClosure"), print));
if (isolate_type == DartRuntimeHooks::MainIsolate) { if (is_ui_isolate) {
// Call |_setupHooks| to configure |VMLibraryHooks|. // Call |_setupHooks| to configure |VMLibraryHooks|.
Dart_Handle method_name = Dart_NewStringFromCString("_setupHooks"); Dart_Handle method_name = Dart_NewStringFromCString("_setupHooks");
DART_CHECK_VALID(Dart_Invoke(builtin_library, method_name, 0, NULL)) DART_CHECK_VALID(Dart_Invoke(builtin_library, method_name, 0, NULL))
...@@ -97,14 +96,12 @@ static void InitDartCore(Dart_Handle builtin, const std::string& script_uri) { ...@@ -97,14 +96,12 @@ static void InitDartCore(Dart_Handle builtin, const std::string& script_uri) {
Dart_SetField(core_library, ToDart("_uriBaseClosure"), get_base_url)); Dart_SetField(core_library, ToDart("_uriBaseClosure"), get_base_url));
} }
static void InitDartAsync(Dart_Handle builtin_library, static void InitDartAsync(Dart_Handle builtin_library, bool is_ui_isolate) {
DartRuntimeHooks::IsolateType isolate_type) {
Dart_Handle schedule_microtask; Dart_Handle schedule_microtask;
if (isolate_type == DartRuntimeHooks::MainIsolate) { if (is_ui_isolate) {
schedule_microtask = schedule_microtask =
GetClosure(builtin_library, "_getScheduleMicrotaskClosure"); GetClosure(builtin_library, "_getScheduleMicrotaskClosure");
} else { } else {
FXL_CHECK(isolate_type == DartRuntimeHooks::SecondaryIsolate);
Dart_Handle isolate_lib = Dart_LookupLibrary(ToDart("dart:isolate")); Dart_Handle isolate_lib = Dart_LookupLibrary(ToDart("dart:isolate"));
Dart_Handle method_name = Dart_Handle method_name =
Dart_NewStringFromCString("_getIsolateScheduleImmediateClosure"); Dart_NewStringFromCString("_getIsolateScheduleImmediateClosure");
...@@ -132,13 +129,13 @@ static void InitDartIO(Dart_Handle builtin_library, ...@@ -132,13 +129,13 @@ static void InitDartIO(Dart_Handle builtin_library,
Dart_SetField(platform_type, ToDart("_localeClosure"), locale_closure)); Dart_SetField(platform_type, ToDart("_localeClosure"), locale_closure));
} }
void DartRuntimeHooks::Install(IsolateType isolate_type, void DartRuntimeHooks::Install(bool is_ui_isolate,
const std::string& script_uri) { const std::string& script_uri) {
Dart_Handle builtin = Dart_LookupLibrary(ToDart("dart:ui")); Dart_Handle builtin = Dart_LookupLibrary(ToDart("dart:ui"));
DART_CHECK_VALID(builtin); DART_CHECK_VALID(builtin);
InitDartInternal(builtin, isolate_type); InitDartInternal(builtin, is_ui_isolate);
InitDartCore(builtin, script_uri); InitDartCore(builtin, script_uri);
InitDartAsync(builtin, isolate_type); InitDartAsync(builtin, is_ui_isolate);
InitDartIO(builtin, script_uri); InitDartIO(builtin, script_uri);
} }
......
...@@ -13,12 +13,7 @@ namespace blink { ...@@ -13,12 +13,7 @@ namespace blink {
class DartRuntimeHooks { class DartRuntimeHooks {
public: public:
enum IsolateType { static void Install(bool is_ui_isolate, const std::string& script_uri);
MainIsolate,
SecondaryIsolate,
};
static void Install(IsolateType isolate_type, const std::string& script_uri);
static void RegisterNatives(tonic::DartLibraryNatives* natives); static void RegisterNatives(tonic::DartLibraryNatives* natives);
private: private:
......
...@@ -220,7 +220,7 @@ bool DartIsolate::UpdateThreadPoolNames() const { ...@@ -220,7 +220,7 @@ bool DartIsolate::UpdateThreadPoolNames() const {
return true; return true;
} }
bool DartIsolate::LoadLibraries() { bool DartIsolate::LoadLibraries(bool is_root_isolate) {
TRACE_EVENT0("flutter", "DartIsolate::LoadLibraries"); TRACE_EVENT0("flutter", "DartIsolate::LoadLibraries");
if (phase_ != Phase::Initialized) { if (phase_ != Phase::Initialized) {
return false; return false;
...@@ -234,9 +234,7 @@ bool DartIsolate::LoadLibraries() { ...@@ -234,9 +234,7 @@ bool DartIsolate::LoadLibraries() {
const bool is_service_isolate = Dart_IsServiceIsolate(isolate()); const bool is_service_isolate = Dart_IsServiceIsolate(isolate());
DartRuntimeHooks::Install(is_service_isolate DartRuntimeHooks::Install(is_root_isolate && !is_service_isolate,
? DartRuntimeHooks::SecondaryIsolate
: DartRuntimeHooks::MainIsolate,
GetAdvisoryScriptURI()); GetAdvisoryScriptURI());
if (!is_service_isolate) { if (!is_service_isolate) {
...@@ -675,7 +673,7 @@ DartIsolate::CreateDartVMAndEmbedderObjectPair( ...@@ -675,7 +673,7 @@ DartIsolate::CreateDartVMAndEmbedderObjectPair(
return {nullptr, {}}; return {nullptr, {}};
} }
if (!embedder_isolate->LoadLibraries()) { if (!embedder_isolate->LoadLibraries(is_root_isolate)) {
*error = *error =
strdup("Embedder could not load libraries in the new Dart isolate."); strdup("Embedder could not load libraries in the new Dart isolate.");
FXL_DLOG(ERROR) << *error; FXL_DLOG(ERROR) << *error;
......
...@@ -114,7 +114,7 @@ class DartIsolate : public UIDartState { ...@@ -114,7 +114,7 @@ class DartIsolate : public UIDartState {
bool Initialize(Dart_Isolate isolate, bool is_root_isolate); bool Initialize(Dart_Isolate isolate, bool is_root_isolate);
FXL_WARN_UNUSED_RESULT FXL_WARN_UNUSED_RESULT
bool LoadLibraries(); bool LoadLibraries(bool is_root_isolate);
bool UpdateThreadPoolNames() const; bool UpdateThreadPoolNames() const;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册