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 | 8 |
| 9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
| 10 #include "vm/coverage.h" | 10 #include "vm/coverage.h" |
| 11 #include "vm/cpu.h" | 11 #include "vm/cpu.h" |
| 12 #include "vm/dart_api_impl.h" | 12 #include "vm/dart_api_impl.h" |
| 13 #include "vm/dart_entry.h" | 13 #include "vm/dart_entry.h" |
| 14 #include "vm/debugger.h" | 14 #include "vm/debugger.h" |
| 15 #include "vm/isolate.h" | 15 #include "vm/isolate.h" |
| 16 #include "vm/message.h" | 16 #include "vm/message.h" |
| 17 #include "vm/message_handler.h" | |
| 17 #include "vm/native_entry.h" | 18 #include "vm/native_entry.h" |
| 18 #include "vm/native_arguments.h" | 19 #include "vm/native_arguments.h" |
| 19 #include "vm/object.h" | 20 #include "vm/object.h" |
| 20 #include "vm/object_id_ring.h" | 21 #include "vm/object_id_ring.h" |
| 21 #include "vm/object_store.h" | 22 #include "vm/object_store.h" |
| 22 #include "vm/port.h" | 23 #include "vm/port.h" |
| 23 #include "vm/profiler.h" | 24 #include "vm/profiler.h" |
| 24 #include "vm/stack_frame.h" | 25 #include "vm/stack_frame.h" |
| 25 #include "vm/symbols.h" | 26 #include "vm/symbols.h" |
| 26 | 27 |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 255 Isolate::ServiceCreateCallback(); | 256 Isolate::ServiceCreateCallback(); |
| 256 if (create_callback == NULL) { | 257 if (create_callback == NULL) { |
| 257 return NULL; | 258 return NULL; |
| 258 } | 259 } |
| 259 Isolate::SetCurrent(NULL); | 260 Isolate::SetCurrent(NULL); |
| 260 char* error = NULL; | 261 char* error = NULL; |
| 261 Isolate* isolate = reinterpret_cast<Isolate*>( | 262 Isolate* isolate = reinterpret_cast<Isolate*>( |
| 262 create_callback(callback_data, &error)); | 263 create_callback(callback_data, &error)); |
| 263 if (isolate == NULL) { | 264 if (isolate == NULL) { |
| 264 return NULL; | 265 return NULL; |
| 265 } | 266 } |
|
turnidge
2014/03/18 21:45:37
Add comment here.
Cutch
2014/03/18 23:32:33
Done.
| |
| 267 isolate->message_handler()->set_wedge_on_start(false); | |
| 268 isolate->message_handler()->set_wedge_on_exit(false); | |
| 266 Isolate::SetCurrent(isolate); | 269 Isolate::SetCurrent(isolate); |
| 267 { | 270 { |
| 268 // Install the dart:vmservice library. | 271 // Install the dart:vmservice library. |
| 269 StackZone zone(isolate); | 272 StackZone zone(isolate); |
| 270 HANDLESCOPE(isolate); | 273 HANDLESCOPE(isolate); |
| 271 Library& library = | 274 Library& library = |
| 272 Library::Handle(isolate, isolate->object_store()->root_library()); | 275 Library::Handle(isolate, isolate->object_store()->root_library()); |
| 273 // Isolate is empty. | 276 // Isolate is empty. |
| 274 ASSERT(library.IsNull()); | 277 ASSERT(library.IsNull()); |
| 275 // Grab embedder tag handler. | 278 // Grab embedder tag handler. |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 359 ASSERT(!name.IsNull()); | 362 ASSERT(!name.IsNull()); |
| 360 const Array& list = Array::Handle( | 363 const Array& list = Array::Handle( |
| 361 MakeServiceControlMessage(Dart_GetMainPortId(), | 364 MakeServiceControlMessage(Dart_GetMainPortId(), |
| 362 VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID, | 365 VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID, |
| 363 name)); | 366 name)); |
| 364 ASSERT(!list.IsNull()); | 367 ASSERT(!list.IsNull()); |
| 365 uint8_t* data = NULL; | 368 uint8_t* data = NULL; |
| 366 MessageWriter writer(&data, &allocator); | 369 MessageWriter writer(&data, &allocator); |
| 367 writer.WriteMessage(list); | 370 writer.WriteMessage(list); |
| 368 intptr_t len = writer.BytesWritten(); | 371 intptr_t len = writer.BytesWritten(); |
| 372 if (FLAG_trace_service) { | |
| 373 OS::Print("Isolate %s %" Pd64 " registered with service \n", | |
| 374 name.ToCString(), | |
| 375 Dart_GetMainPortId()); | |
| 376 } | |
| 369 return PortMap::PostMessage( | 377 return PortMap::PostMessage( |
| 370 new Message(port_, data, len, Message::kNormalPriority)); | 378 new Message(port_, data, len, Message::kNormalPriority)); |
| 371 } | 379 } |
| 372 | 380 |
| 373 | 381 |
| 374 bool Service::SendIsolateShutdownMessage() { | 382 bool Service::SendIsolateShutdownMessage() { |
| 375 if (!IsRunning()) { | 383 if (!IsRunning()) { |
| 376 return false; | 384 return false; |
| 377 } | 385 } |
| 378 Isolate* isolate = Isolate::Current(); | 386 Isolate* isolate = Isolate::Current(); |
| 379 ASSERT(isolate != NULL); | 387 ASSERT(isolate != NULL); |
| 380 HANDLESCOPE(isolate); | 388 HANDLESCOPE(isolate); |
| 389 const String& name = String::Handle(String::New(isolate->name())); | |
| 390 ASSERT(!name.IsNull()); | |
| 381 const Array& list = Array::Handle( | 391 const Array& list = Array::Handle( |
| 382 MakeServiceControlMessage(Dart_GetMainPortId(), | 392 MakeServiceControlMessage(Dart_GetMainPortId(), |
| 383 VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID, | 393 VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID, |
| 384 String::Handle(String::null()))); | 394 name)); |
| 385 ASSERT(!list.IsNull()); | 395 ASSERT(!list.IsNull()); |
| 386 uint8_t* data = NULL; | 396 uint8_t* data = NULL; |
| 387 MessageWriter writer(&data, &allocator); | 397 MessageWriter writer(&data, &allocator); |
| 388 writer.WriteMessage(list); | 398 writer.WriteMessage(list); |
| 389 intptr_t len = writer.BytesWritten(); | 399 intptr_t len = writer.BytesWritten(); |
| 400 if (FLAG_trace_service) { | |
| 401 OS::Print("Isolate %s %" Pd64 " deregistered with service \n", | |
| 402 name.ToCString(), | |
| 403 Dart_GetMainPortId()); | |
| 404 } | |
| 390 return PortMap::PostMessage( | 405 return PortMap::PostMessage( |
| 391 new Message(port_, data, len, Message::kNormalPriority)); | 406 new Message(port_, data, len, Message::kNormalPriority)); |
| 392 } | 407 } |
| 393 | 408 |
| 394 | 409 |
| 395 bool Service::IsRunning() { | 410 bool Service::IsRunning() { |
| 396 return port_ != ILLEGAL_PORT; | 411 return port_ != ILLEGAL_PORT; |
| 397 } | 412 } |
| 398 | 413 |
| 399 | 414 |
| (...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1407 } | 1422 } |
| 1408 if (js->num_arguments() != 1) { | 1423 if (js->num_arguments() != 1) { |
| 1409 PrintError(js, "Command too long"); | 1424 PrintError(js, "Command too long"); |
| 1410 return true; | 1425 return true; |
| 1411 } | 1426 } |
| 1412 isolate->class_table()->AllocationProfilePrintToJSONStream(js); | 1427 isolate->class_table()->AllocationProfilePrintToJSONStream(js); |
| 1413 return true; | 1428 return true; |
| 1414 } | 1429 } |
| 1415 | 1430 |
| 1416 | 1431 |
| 1417 static bool HandleUnpin(Isolate* isolate, JSONStream* js) { | 1432 static bool HandleUnpin(Isolate* isolate, JSONStream* js) { |
|
turnidge
2014/03/18 21:45:37
Can we call this resume instead of unpin? That wa
Cutch
2014/03/18 23:32:33
Done.
| |
| 1418 // TODO(johnmccutchan): What do I respond with?? | 1433 // TODO(johnmccutchan): What do I respond with?? |
| 1419 isolate->ClosePinPort(); | 1434 if (isolate->message_handler()->wedge_on_start()) { |
| 1435 isolate->message_handler()->set_wedge_on_start(false); | |
| 1436 return true; | |
| 1437 } | |
| 1438 if (isolate->message_handler()->wedge_on_exit()) { | |
| 1439 isolate->message_handler()->set_wedge_on_exit(false); | |
| 1440 return true; | |
| 1441 } | |
| 1420 return true; | 1442 return true; |
| 1421 } | 1443 } |
| 1422 | 1444 |
| 1423 | 1445 |
| 1424 static bool HandleHeapMap(Isolate* isolate, JSONStream* js) { | 1446 static bool HandleHeapMap(Isolate* isolate, JSONStream* js) { |
| 1425 isolate->heap()->PrintHeapMapToJSONStream(js); | 1447 isolate->heap()->PrintHeapMapToJSONStream(js); |
| 1426 return true; | 1448 return true; |
| 1427 } | 1449 } |
| 1428 | 1450 |
| 1429 | 1451 |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1655 while (current != NULL) { | 1677 while (current != NULL) { |
| 1656 if (strcmp(name, current->name()) == 0) { | 1678 if (strcmp(name, current->name()) == 0) { |
| 1657 return current; | 1679 return current; |
| 1658 } | 1680 } |
| 1659 current = current->next(); | 1681 current = current->next(); |
| 1660 } | 1682 } |
| 1661 return NULL; | 1683 return NULL; |
| 1662 } | 1684 } |
| 1663 | 1685 |
| 1664 } // namespace dart | 1686 } // namespace dart |
| OLD | NEW |