Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Unified Diff: sky/engine/bindings/builtin_natives.cc

Issue 1107803002: Add Observatory to sky dart_controller (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sky/engine/bindings/builtin_natives.cc
diff --git a/sky/engine/bindings/builtin_natives.cc b/sky/engine/bindings/builtin_natives.cc
index 55584a3d0171a69da9eeecb9eed65ab9f432fc1e..3583bafd4493c293479575ffe28f12e4ee050a66 100644
--- a/sky/engine/bindings/builtin_natives.cc
+++ b/sky/engine/bindings/builtin_natives.cc
@@ -87,7 +87,7 @@ static Dart_Handle GetClosure(Dart_Handle builtin_library, const char* name) {
return closure;
}
-static void InitDartInternal(Dart_Handle builtin_library) {
+static void InitDartInternal(Dart_Handle builtin_library, bool dom_isolate) {
Dart_Handle print = GetClosure(builtin_library, "_getPrintClosure");
Dart_Handle timer = GetClosure(builtin_library, "_getCreateTimerClosure");
@@ -96,35 +96,51 @@ static void InitDartInternal(Dart_Handle builtin_library) {
DART_CHECK_VALID(Dart_SetField(
internal_library, ToDart("_printClosure"), print));
- Dart_Handle vm_hooks_name = ToDart("VMLibraryHooks");
- Dart_Handle vm_hooks = Dart_GetClass(internal_library, vm_hooks_name);
- DART_CHECK_VALID(vm_hooks);
- Dart_Handle timer_name = ToDart("timerFactory");
- DART_CHECK_VALID(Dart_SetField(vm_hooks, timer_name, timer));
+ if (dom_isolate) {
+ Dart_Handle vm_hooks_name = ToDart("VMLibraryHooks");
+ Dart_Handle vm_hooks = Dart_GetClass(internal_library, vm_hooks_name);
+ DART_CHECK_VALID(vm_hooks);
+ Dart_Handle timer_name = ToDart("timerFactory");
+ DART_CHECK_VALID(Dart_SetField(vm_hooks, timer_name, timer));
+ } else {
+ Dart_Handle io_lib = DartBuiltin::LookupLibrary("dart:io");
+ Dart_Handle setup_hooks = Dart_NewStringFromCString("_setupHooks");
+ DART_CHECK_VALID(Dart_Invoke(io_lib, setup_hooks, 0, NULL));
+ Dart_Handle isolate_lib = DartBuiltin::LookupLibrary("dart:isolate");
+ DART_CHECK_VALID(Dart_Invoke(isolate_lib, setup_hooks, 0, NULL));
+ }
}
-static void InitDartCore(Dart_Handle builtin) {
+static void InitDartCore(Dart_Handle builtin, bool dom_isolate) {
Dart_Handle get_base_url = GetClosure(builtin, "_getGetBaseURLClosure");
Dart_Handle core_library = DartBuiltin::LookupLibrary("dart:core");
DART_CHECK_VALID(Dart_SetField(core_library,
ToDart("_uriBaseClosure"), get_base_url));
}
-static void InitDartAsync(Dart_Handle builtin_library) {
- Dart_Handle schedule_microtask =
- GetClosure(builtin_library, "_getScheduleMicrotaskClosure");
+static void InitDartAsync(Dart_Handle builtin_library, bool dom_isolate) {
+ Dart_Handle schedule_microtask;
+ if (dom_isolate) {
+ schedule_microtask =
+ GetClosure(builtin_library, "_getScheduleMicrotaskClosure");
+ } else {
+ Dart_Handle isolate_lib = DartBuiltin::LookupLibrary("dart:isolate");
+ Dart_Handle method_name =
+ Dart_NewStringFromCString("_getIsolateScheduleImmediateClosure");
+ schedule_microtask = Dart_Invoke(isolate_lib, method_name, 0, NULL);
+ }
Dart_Handle async_library = DartBuiltin::LookupLibrary("dart:async");
Dart_Handle set_schedule_microtask = ToDart("_setScheduleImmediateClosure");
DART_CHECK_VALID(Dart_Invoke(async_library, set_schedule_microtask, 1,
&schedule_microtask));
}
-void BuiltinNatives::Init() {
+void BuiltinNatives::Init(bool dom_isolate) {
Dart_Handle builtin = Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
DART_CHECK_VALID(builtin);
- InitDartInternal(builtin);
- InitDartCore(builtin);
- InitDartAsync(builtin);
+ InitDartInternal(builtin, dom_isolate);
+ InitDartCore(builtin, dom_isolate);
+ InitDartAsync(builtin, dom_isolate);
}
// Implementation of native functions which are used for some
@@ -163,6 +179,7 @@ void ScheduleMicrotask(Dart_NativeArguments args) {
if (LogIfError(closure) || !Dart_IsClosure(closure))
return;
DartState* dart_state = DartState::Current();
+ CHECK(dart_state);
Microtask::enqueueMicrotask(base::Bind(&ExecuteMicrotask,
dart_state->GetWeakPtr(), DartValue::Create(dart_state, closure)));
}
@@ -182,6 +199,7 @@ void Timer_create(Dart_NativeArguments args) {
DART_CHECK_VALID(Dart_GetNativeBooleanArgument(args, 2, &repeating));
DOMDartState* state = DOMDartState::Current();
+ CHECK(state);
int timer_id = DOMTimer::install(state->document(),
ScheduledAction::Create(state, closure),
milliseconds,
@@ -194,6 +212,7 @@ void Timer_cancel(Dart_NativeArguments args) {
DART_CHECK_VALID(Dart_GetNativeIntegerArgument(args, 0, &timer_id));
DOMDartState* state = DOMDartState::Current();
+ CHECK(state);
DOMTimer::removeByID(state->document(), timer_id);
}

Powered by Google App Engine
This is Rietveld 408576698