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 248 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 |