| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/bootstrap_natives.h" | 5 #include "vm/bootstrap_natives.h" |
| 6 #include "vm/dart_api_impl.h" | 6 #include "vm/dart_api_impl.h" |
| 7 #include "vm/datastream.h" | 7 #include "vm/datastream.h" |
| 8 #include "vm/exceptions.h" | 8 #include "vm/exceptions.h" |
| 9 #include "vm/flags.h" | 9 #include "vm/flags.h" |
| 10 #include "vm/growable_array.h" | 10 #include "vm/growable_array.h" |
| 11 #include "vm/message.h" | 11 #include "vm/message.h" |
| 12 #include "vm/native_entry.h" | 12 #include "vm/native_entry.h" |
| 13 #include "vm/object.h" | 13 #include "vm/object.h" |
| 14 #include "vm/port.h" | 14 #include "vm/port.h" |
| 15 #include "vm/service_isolate.h" | 15 #include "vm/service_isolate.h" |
| 16 #include "vm/symbols.h" | 16 #include "vm/symbols.h" |
| 17 | 17 |
| 18 namespace dart { | 18 namespace dart { |
| 19 | 19 |
| 20 DECLARE_FLAG(bool, trace_service); | 20 DECLARE_FLAG(bool, trace_service); |
| 21 | 21 |
| 22 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { | 22 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { |
| 23 void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); | 23 void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); |
| 24 return reinterpret_cast<uint8_t*>(new_ptr); | 24 return reinterpret_cast<uint8_t*>(new_ptr); |
| 25 } | 25 } |
| 26 | 26 |
| 27 | 27 |
| 28 #ifndef PRODUCT |
| 28 class RegisterRunningIsolatesVisitor : public IsolateVisitor { | 29 class RegisterRunningIsolatesVisitor : public IsolateVisitor { |
| 29 public: | 30 public: |
| 30 explicit RegisterRunningIsolatesVisitor(Thread* thread) | 31 explicit RegisterRunningIsolatesVisitor(Thread* thread) |
| 31 : IsolateVisitor(), | 32 : IsolateVisitor(), |
| 32 register_function_(Function::Handle(thread->zone())), | 33 register_function_(Function::Handle(thread->zone())), |
| 33 service_isolate_(thread->isolate()) { | 34 service_isolate_(thread->isolate()) { |
| 34 ASSERT(ServiceIsolate::IsServiceIsolate(Isolate::Current())); | 35 ASSERT(ServiceIsolate::IsServiceIsolate(Isolate::Current())); |
| 35 // Get library. | 36 // Get library. |
| 36 const String& library_url = Symbols::DartVMService(); | 37 const String& library_url = Symbols::DartVMService(); |
| 37 ASSERT(!library_url.IsNull()); | 38 ASSERT(!library_url.IsNull()); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 name.ToCString(), | 73 name.ToCString(), |
| 73 port_id); | 74 port_id); |
| 74 } | 75 } |
| 75 ASSERT(!r.IsError()); | 76 ASSERT(!r.IsError()); |
| 76 } | 77 } |
| 77 | 78 |
| 78 private: | 79 private: |
| 79 Function& register_function_; | 80 Function& register_function_; |
| 80 Isolate* service_isolate_; | 81 Isolate* service_isolate_; |
| 81 }; | 82 }; |
| 82 | 83 #endif // !PRODUCT |
| 83 | 84 |
| 84 DEFINE_NATIVE_ENTRY(VMService_SendIsolateServiceMessage, 2) { | 85 DEFINE_NATIVE_ENTRY(VMService_SendIsolateServiceMessage, 2) { |
| 86 if (!FLAG_support_service) { |
| 87 return Bool::Get(false).raw(); |
| 88 } |
| 85 GET_NON_NULL_NATIVE_ARGUMENT(SendPort, sp, arguments->NativeArgAt(0)); | 89 GET_NON_NULL_NATIVE_ARGUMENT(SendPort, sp, arguments->NativeArgAt(0)); |
| 86 GET_NON_NULL_NATIVE_ARGUMENT(Array, message, arguments->NativeArgAt(1)); | 90 GET_NON_NULL_NATIVE_ARGUMENT(Array, message, arguments->NativeArgAt(1)); |
| 87 | 91 |
| 88 // Set the type of the OOB message. | 92 // Set the type of the OOB message. |
| 89 message.SetAt(0, Smi::Handle(thread->zone(), | 93 message.SetAt(0, Smi::Handle(thread->zone(), |
| 90 Smi::New(Message::kServiceOOBMsg))); | 94 Smi::New(Message::kServiceOOBMsg))); |
| 91 | 95 |
| 92 // Serialize message. | 96 // Serialize message. |
| 93 uint8_t* data = NULL; | 97 uint8_t* data = NULL; |
| 94 MessageWriter writer(&data, &allocator, false); | 98 MessageWriter writer(&data, &allocator, false); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 110 return Object::null(); | 114 return Object::null(); |
| 111 } | 115 } |
| 112 | 116 |
| 113 | 117 |
| 114 DEFINE_NATIVE_ENTRY(VMService_OnStart, 0) { | 118 DEFINE_NATIVE_ENTRY(VMService_OnStart, 0) { |
| 115 if (FLAG_trace_service) { | 119 if (FLAG_trace_service) { |
| 116 OS::Print("vm-service: Booting dart:vmservice library.\n"); | 120 OS::Print("vm-service: Booting dart:vmservice library.\n"); |
| 117 } | 121 } |
| 118 // Boot the dart:vmservice library. | 122 // Boot the dart:vmservice library. |
| 119 ServiceIsolate::BootVmServiceLibrary(); | 123 ServiceIsolate::BootVmServiceLibrary(); |
| 120 | 124 if (!FLAG_support_service) { |
| 125 return Object::null(); |
| 126 } |
| 127 #ifndef PRODUCT |
| 121 // Register running isolates with service. | 128 // Register running isolates with service. |
| 122 RegisterRunningIsolatesVisitor register_isolates(thread); | 129 RegisterRunningIsolatesVisitor register_isolates(thread); |
| 123 if (FLAG_trace_service) { | 130 if (FLAG_trace_service) { |
| 124 OS::Print("vm-service: Registering running isolates.\n"); | 131 OS::Print("vm-service: Registering running isolates.\n"); |
| 125 } | 132 } |
| 126 Isolate::VisitIsolates(®ister_isolates); | 133 Isolate::VisitIsolates(®ister_isolates); |
| 127 | 134 #endif |
| 128 return Object::null(); | 135 return Object::null(); |
| 129 } | 136 } |
| 130 | 137 |
| 131 | 138 |
| 132 DEFINE_NATIVE_ENTRY(VMService_OnExit, 0) { | 139 DEFINE_NATIVE_ENTRY(VMService_OnExit, 0) { |
| 133 if (FLAG_trace_service) { | 140 if (FLAG_trace_service) { |
| 134 OS::Print("vm-service: processed exit message.\n"); | 141 OS::Print("vm-service: processed exit message.\n"); |
| 135 } | 142 } |
| 136 return Object::null(); | 143 return Object::null(); |
| 137 } | 144 } |
| 138 | 145 |
| 139 | 146 |
| 140 DEFINE_NATIVE_ENTRY(VMService_OnServerAddressChange, 1) { | 147 DEFINE_NATIVE_ENTRY(VMService_OnServerAddressChange, 1) { |
| 148 if (!FLAG_support_service) { |
| 149 return Object::null(); |
| 150 } |
| 141 GET_NATIVE_ARGUMENT(String, address, arguments->NativeArgAt(0)); | 151 GET_NATIVE_ARGUMENT(String, address, arguments->NativeArgAt(0)); |
| 142 if (address.IsNull()) { | 152 if (address.IsNull()) { |
| 143 ServiceIsolate::SetServerAddress(NULL); | 153 ServiceIsolate::SetServerAddress(NULL); |
| 144 } else { | 154 } else { |
| 145 ServiceIsolate::SetServerAddress(address.ToCString()); | 155 ServiceIsolate::SetServerAddress(address.ToCString()); |
| 146 } | 156 } |
| 147 return Object::null(); | 157 return Object::null(); |
| 148 } | 158 } |
| 149 | 159 |
| 150 | 160 |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 idx += 2; | 431 idx += 2; |
| 422 } | 432 } |
| 423 | 433 |
| 424 return result_list.raw(); | 434 return result_list.raw(); |
| 425 #else | 435 #else |
| 426 return Object::null(); | 436 return Object::null(); |
| 427 #endif | 437 #endif |
| 428 } | 438 } |
| 429 | 439 |
| 430 } // namespace dart | 440 } // namespace dart |
| OLD | NEW |