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

Unified Diff: runtime/vm/dart_api_impl.cc

Issue 125103004: Move service into VM (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 11 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: runtime/vm/dart_api_impl.cc
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 02cf5125698ae4a8372245e1c68895dff208071e..a0eda6918df779112e6a0a5e99488a8860919138 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -27,6 +27,7 @@
#include "vm/port.h"
#include "vm/resolver.h"
#include "vm/reusable_handles.h"
+#include "vm/service.h"
#include "vm/stack_frame.h"
#include "vm/symbols.h"
#include "vm/timer.h"
@@ -793,10 +794,12 @@ DART_EXPORT bool Dart_Initialize(
Dart_FileReadCallback file_read,
Dart_FileWriteCallback file_write,
Dart_FileCloseCallback file_close,
- Dart_EntropySource entropy_source) {
+ Dart_EntropySource entropy_source,
+ Dart_ServiceIsolateCreateCallback service_create) {
const char* err_msg = Dart::InitOnce(create, interrupt, unhandled, shutdown,
file_open, file_read, file_write,
- file_close, entropy_source);
+ file_close, entropy_source,
+ service_create);
if (err_msg != NULL) {
OS::PrintErr("Dart_Initialize: %s\n", err_msg);
return false;
@@ -1169,6 +1172,33 @@ DART_EXPORT Dart_Port Dart_GetMainPortId() {
}
+DART_EXPORT bool Dart_IsSendPort(Dart_Handle send_port) {
+ Isolate* isolate = Isolate::Current();
+ DARTSCOPE(isolate);
+ Instance& port = Instance::Handle();
+ port ^= Api::UnwrapHandle(send_port);
+ return DartLibraryCalls::IsSendPort(port);
+}
+
+
+DART_EXPORT bool Dart_SendPortSend(Dart_Handle send_port, Dart_Handle object) {
siva 2014/01/10 00:01:54 Dart_Handle Dart_PostMessage(....) This function
+ Isolate* isolate = Isolate::Current();
+ DARTSCOPE(isolate);
+ Instance& port_instance = Instance::Handle();
+ port_instance ^= Api::UnwrapHandle(send_port);
+ const Object& idObj = Object::Handle(
+ DartLibraryCalls::PortGetId(port_instance));
+ if (idObj.IsError()) {
+ // Not a valid port.
+ return false;
+ }
+ Integer& id = Integer::Handle();
+ id ^= idObj.raw();
+ Dart_Port port = static_cast<Dart_Port>(id.AsInt64Value());
+ return Dart_Post(port, object);
+}
+
+
// --- Scopes ----
DART_EXPORT void Dart_EnterScope() {
@@ -4495,4 +4525,23 @@ DART_EXPORT Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer) {
return Api::Success();
}
+
+// --- Service support ---
+
+DART_EXPORT Dart_Isolate Dart_GetServiceIsolate(void* callback_data) {
+ return Api::CastIsolate(Service::GetServiceIsolate(callback_data));
+}
+
+
+DART_EXPORT void Dart_RegisterWithService() {
+ CHECK_ISOLATE(Isolate::Current());
+ Service::SendIsolateStartupMessage();
+}
+
+
+DART_EXPORT void Dart_UnregisterFromService() {
+ CHECK_ISOLATE(Isolate::Current());
+ Service::SendIsolateShutdownMessage();
+}
+
} // namespace dart

Powered by Google App Engine
This is Rietveld 408576698