Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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/service.h" | 5 #include "vm/service.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "platform/globals.h" | 8 #include "platform/globals.h" |
| 9 | 9 |
| 10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 221 StackZone zone(isolate); | 221 StackZone zone(isolate); |
| 222 HANDLESCOPE(isolate); | 222 HANDLESCOPE(isolate); |
| 223 GET_NON_NULL_NATIVE_ARGUMENT(SendPort, sp, arguments->NativeArgAt(0)); | 223 GET_NON_NULL_NATIVE_ARGUMENT(SendPort, sp, arguments->NativeArgAt(0)); |
| 224 GET_NON_NULL_NATIVE_ARGUMENT(Array, message, arguments->NativeArgAt(1)); | 224 GET_NON_NULL_NATIVE_ARGUMENT(Array, message, arguments->NativeArgAt(1)); |
| 225 | 225 |
| 226 // Set the type of the OOB message. | 226 // Set the type of the OOB message. |
| 227 message.SetAt(0, Smi::Handle(isolate, Smi::New(Message::kServiceOOBMsg))); | 227 message.SetAt(0, Smi::Handle(isolate, Smi::New(Message::kServiceOOBMsg))); |
| 228 | 228 |
| 229 // Serialize message. | 229 // Serialize message. |
| 230 uint8_t* data = NULL; | 230 uint8_t* data = NULL; |
| 231 MessageWriter writer(&data, &allocator); | 231 MessageWriter writer(&data, &allocator, false); |
| 232 writer.WriteMessage(message); | 232 writer.WriteMessage(message); |
| 233 | 233 |
| 234 // TODO(turnidge): Throw an exception when the return value is false? | 234 // TODO(turnidge): Throw an exception when the return value is false? |
| 235 PortMap::PostMessage(new Message(sp.Id(), data, writer.BytesWritten(), | 235 PortMap::PostMessage(new Message(sp.Id(), data, writer.BytesWritten(), |
| 236 Message::kOOBPriority)); | 236 Message::kOOBPriority)); |
| 237 } | 237 } |
| 238 | 238 |
| 239 | 239 |
| 240 static void SendRootServiceMessage(Dart_NativeArguments args) { | 240 static void SendRootServiceMessage(Dart_NativeArguments args) { |
| 241 NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args); | 241 NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 266 #define VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID 1 | 266 #define VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID 1 |
| 267 #define VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID 2 | 267 #define VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID 2 |
| 268 | 268 |
| 269 | 269 |
| 270 static RawArray* MakeServiceControlMessage(Dart_Port port_id, intptr_t code, | 270 static RawArray* MakeServiceControlMessage(Dart_Port port_id, intptr_t code, |
| 271 const String& name) { | 271 const String& name) { |
| 272 const Array& list = Array::Handle(Array::New(4)); | 272 const Array& list = Array::Handle(Array::New(4)); |
| 273 ASSERT(!list.IsNull()); | 273 ASSERT(!list.IsNull()); |
| 274 const Integer& code_int = Integer::Handle(Integer::New(code)); | 274 const Integer& code_int = Integer::Handle(Integer::New(code)); |
| 275 const Integer& port_int = Integer::Handle(Integer::New(port_id)); | 275 const Integer& port_int = Integer::Handle(Integer::New(port_id)); |
| 276 const SendPort& send_port = SendPort::Handle(SendPort::New(port_id)); | 276 const SendPort& send_port = SendPort::Handle(SendPort::New(port_id, false)); |
|
Ivan Posva
2015/01/12 05:50:04
false? Shouldn't the second parameter to a SendPor
siva
2015/01/12 21:41:13
Good point, left over from my previous version,
ch
| |
| 277 list.SetAt(0, code_int); | 277 list.SetAt(0, code_int); |
| 278 list.SetAt(1, port_int); | 278 list.SetAt(1, port_int); |
| 279 list.SetAt(2, send_port); | 279 list.SetAt(2, send_port); |
| 280 list.SetAt(3, name); | 280 list.SetAt(3, name); |
| 281 return list.raw(); | 281 return list.raw(); |
| 282 } | 282 } |
| 283 | 283 |
| 284 | 284 |
| 285 class RegisterRunningIsolatesVisitor : public IsolateVisitor { | 285 class RegisterRunningIsolatesVisitor : public IsolateVisitor { |
| 286 public: | 286 public: |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 307 ASSERT(Isolate::Current() == service_isolate_); | 307 ASSERT(Isolate::Current() == service_isolate_); |
| 308 if ((isolate == service_isolate_) || | 308 if ((isolate == service_isolate_) || |
| 309 (isolate == Dart::vm_isolate())) { | 309 (isolate == Dart::vm_isolate())) { |
| 310 // We do not register the service or vm isolate. | 310 // We do not register the service or vm isolate. |
| 311 return; | 311 return; |
| 312 } | 312 } |
| 313 // Setup arguments for call. | 313 // Setup arguments for call. |
| 314 Dart_Port port_id = isolate->main_port(); | 314 Dart_Port port_id = isolate->main_port(); |
| 315 const Integer& port_int = Integer::Handle(Integer::New(port_id)); | 315 const Integer& port_int = Integer::Handle(Integer::New(port_id)); |
| 316 ASSERT(!port_int.IsNull()); | 316 ASSERT(!port_int.IsNull()); |
| 317 const SendPort& send_port = SendPort::Handle(SendPort::New(port_id)); | 317 const SendPort& send_port = SendPort::Handle(SendPort::New(port_id, false)); |
|
Ivan Posva
2015/01/12 05:50:04
ditto
siva
2015/01/12 21:41:13
ditto.
| |
| 318 const String& name = String::Handle(String::New(isolate->name())); | 318 const String& name = String::Handle(String::New(isolate->name())); |
| 319 ASSERT(!name.IsNull()); | 319 ASSERT(!name.IsNull()); |
| 320 const Array& args = Array::Handle(Array::New(3)); | 320 const Array& args = Array::Handle(Array::New(3)); |
| 321 ASSERT(!args.IsNull()); | 321 ASSERT(!args.IsNull()); |
| 322 args.SetAt(0, port_int); | 322 args.SetAt(0, port_int); |
| 323 args.SetAt(1, send_port); | 323 args.SetAt(1, send_port); |
| 324 args.SetAt(2, name); | 324 args.SetAt(2, name); |
| 325 Object& r = Object::Handle(service_isolate_); | 325 Object& r = Object::Handle(service_isolate_); |
| 326 r = DartEntry::InvokeFunction(register_function_, args); | 326 r = DartEntry::InvokeFunction(register_function_, args); |
| 327 ASSERT(!r.IsError()); | 327 ASSERT(!r.IsError()); |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 490 ASSERT(isolate != NULL); | 490 ASSERT(isolate != NULL); |
| 491 HANDLESCOPE(isolate); | 491 HANDLESCOPE(isolate); |
| 492 const String& name = String::Handle(String::New(isolate->name())); | 492 const String& name = String::Handle(String::New(isolate->name())); |
| 493 ASSERT(!name.IsNull()); | 493 ASSERT(!name.IsNull()); |
| 494 const Array& list = Array::Handle( | 494 const Array& list = Array::Handle( |
| 495 MakeServiceControlMessage(Dart_GetMainPortId(), | 495 MakeServiceControlMessage(Dart_GetMainPortId(), |
| 496 VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID, | 496 VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID, |
| 497 name)); | 497 name)); |
| 498 ASSERT(!list.IsNull()); | 498 ASSERT(!list.IsNull()); |
| 499 uint8_t* data = NULL; | 499 uint8_t* data = NULL; |
| 500 MessageWriter writer(&data, &allocator); | 500 MessageWriter writer(&data, &allocator, false); |
| 501 writer.WriteMessage(list); | 501 writer.WriteMessage(list); |
| 502 intptr_t len = writer.BytesWritten(); | 502 intptr_t len = writer.BytesWritten(); |
| 503 if (FLAG_trace_service) { | 503 if (FLAG_trace_service) { |
| 504 OS::Print("Isolate %s %" Pd64 " registered with service \n", | 504 OS::Print("Isolate %s %" Pd64 " registered with service \n", |
| 505 name.ToCString(), | 505 name.ToCString(), |
| 506 Dart_GetMainPortId()); | 506 Dart_GetMainPortId()); |
| 507 } | 507 } |
| 508 return PortMap::PostMessage( | 508 return PortMap::PostMessage( |
| 509 new Message(port_, data, len, Message::kNormalPriority)); | 509 new Message(port_, data, len, Message::kNormalPriority)); |
| 510 } | 510 } |
| 511 | 511 |
| 512 | 512 |
| 513 bool Service::SendIsolateShutdownMessage() { | 513 bool Service::SendIsolateShutdownMessage() { |
| 514 if (!IsRunning()) { | 514 if (!IsRunning()) { |
| 515 return false; | 515 return false; |
| 516 } | 516 } |
| 517 Isolate* isolate = Isolate::Current(); | 517 Isolate* isolate = Isolate::Current(); |
| 518 ASSERT(isolate != NULL); | 518 ASSERT(isolate != NULL); |
| 519 HANDLESCOPE(isolate); | 519 HANDLESCOPE(isolate); |
| 520 const String& name = String::Handle(String::New(isolate->name())); | 520 const String& name = String::Handle(String::New(isolate->name())); |
| 521 ASSERT(!name.IsNull()); | 521 ASSERT(!name.IsNull()); |
| 522 const Array& list = Array::Handle( | 522 const Array& list = Array::Handle( |
| 523 MakeServiceControlMessage(Dart_GetMainPortId(), | 523 MakeServiceControlMessage(Dart_GetMainPortId(), |
| 524 VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID, | 524 VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID, |
| 525 name)); | 525 name)); |
| 526 ASSERT(!list.IsNull()); | 526 ASSERT(!list.IsNull()); |
| 527 uint8_t* data = NULL; | 527 uint8_t* data = NULL; |
| 528 MessageWriter writer(&data, &allocator); | 528 MessageWriter writer(&data, &allocator, false); |
| 529 writer.WriteMessage(list); | 529 writer.WriteMessage(list); |
| 530 intptr_t len = writer.BytesWritten(); | 530 intptr_t len = writer.BytesWritten(); |
| 531 if (FLAG_trace_service) { | 531 if (FLAG_trace_service) { |
| 532 OS::Print("Isolate %s %" Pd64 " deregistered with service \n", | 532 OS::Print("Isolate %s %" Pd64 " deregistered with service \n", |
| 533 name.ToCString(), | 533 name.ToCString(), |
| 534 Dart_GetMainPortId()); | 534 Dart_GetMainPortId()); |
| 535 } | 535 } |
| 536 return PortMap::PostMessage( | 536 return PortMap::PostMessage( |
| 537 new Message(port_, data, len, Message::kNormalPriority)); | 537 new Message(port_, data, len, Message::kNormalPriority)); |
| 538 } | 538 } |
| (...skipping 2087 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2626 HANDLESCOPE(isolate); | 2626 HANDLESCOPE(isolate); |
| 2627 | 2627 |
| 2628 // Construct a list of the form [eventId, eventMessage]. | 2628 // Construct a list of the form [eventId, eventMessage]. |
| 2629 const Array& list = Array::Handle(Array::New(2)); | 2629 const Array& list = Array::Handle(Array::New(2)); |
| 2630 ASSERT(!list.IsNull()); | 2630 ASSERT(!list.IsNull()); |
| 2631 list.SetAt(0, Integer::Handle(Integer::New(eventId))); | 2631 list.SetAt(0, Integer::Handle(Integer::New(eventId))); |
| 2632 list.SetAt(1, eventMessage); | 2632 list.SetAt(1, eventMessage); |
| 2633 | 2633 |
| 2634 // Push the event to port_. | 2634 // Push the event to port_. |
| 2635 uint8_t* data = NULL; | 2635 uint8_t* data = NULL; |
| 2636 MessageWriter writer(&data, &allocator); | 2636 MessageWriter writer(&data, &allocator, false); |
| 2637 writer.WriteMessage(list); | 2637 writer.WriteMessage(list); |
| 2638 intptr_t len = writer.BytesWritten(); | 2638 intptr_t len = writer.BytesWritten(); |
| 2639 if (FLAG_trace_service) { | 2639 if (FLAG_trace_service) { |
| 2640 OS::Print("Pushing event of type %" Pd ", len %" Pd "\n", eventId, len); | 2640 OS::Print("Pushing event of type %" Pd ", len %" Pd "\n", eventId, len); |
| 2641 } | 2641 } |
| 2642 // TODO(turnidge): For now we ignore failure to send an event. Revisit? | 2642 // TODO(turnidge): For now we ignore failure to send an event. Revisit? |
| 2643 PortMap::PostMessage( | 2643 PortMap::PostMessage( |
| 2644 new Message(port_, data, len, Message::kNormalPriority)); | 2644 new Message(port_, data, len, Message::kNormalPriority)); |
| 2645 } | 2645 } |
| 2646 | 2646 |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2780 while (current != NULL) { | 2780 while (current != NULL) { |
| 2781 if (strcmp(name, current->name()) == 0) { | 2781 if (strcmp(name, current->name()) == 0) { |
| 2782 return current; | 2782 return current; |
| 2783 } | 2783 } |
| 2784 current = current->next(); | 2784 current = current->next(); |
| 2785 } | 2785 } |
| 2786 return NULL; | 2786 return NULL; |
| 2787 } | 2787 } |
| 2788 | 2788 |
| 2789 } // namespace dart | 2789 } // namespace dart |
| OLD | NEW |