| Index: runtime/vm/isolate.cc
|
| diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
|
| index 5b262075a150036f7d5fa015d820b21a9ff963ec..a4b987fc680af0ff7cfced5525b2f05a1ad0118b 100644
|
| --- a/runtime/vm/isolate.cc
|
| +++ b/runtime/vm/isolate.cc
|
| @@ -27,6 +27,7 @@
|
| #include "vm/profiler.h"
|
| #include "vm/reusable_handles.h"
|
| #include "vm/service.h"
|
| +#include "vm/service_event.h"
|
| #include "vm/service_isolate.h"
|
| #include "vm/simulator.h"
|
| #include "vm/stack_frame.h"
|
| @@ -114,6 +115,8 @@ class IsolateMessageHandler : public MessageHandler {
|
| const char* name() const;
|
| void MessageNotify(Message::Priority priority);
|
| bool HandleMessage(Message* message);
|
| + void NotifyPauseOnStart();
|
| + void NotifyPauseOnExit();
|
|
|
| #if defined(DEBUG)
|
| // Check that it is safe to access this handler.
|
| @@ -384,6 +387,24 @@ bool IsolateMessageHandler::HandleMessage(Message* message) {
|
| }
|
|
|
|
|
| +void IsolateMessageHandler::NotifyPauseOnStart() {
|
| + StartIsolateScope start_isolate(isolate());
|
| + StackZone zone(I);
|
| + HandleScope handle_scope(I);
|
| + ServiceEvent pause_event(isolate(), ServiceEvent::kPauseStart);
|
| + Service::HandleEvent(&pause_event);
|
| +}
|
| +
|
| +
|
| +void IsolateMessageHandler::NotifyPauseOnExit() {
|
| + StartIsolateScope start_isolate(isolate());
|
| + StackZone zone(I);
|
| + HandleScope handle_scope(I);
|
| + ServiceEvent pause_event(isolate(), ServiceEvent::kPauseExit);
|
| + Service::HandleEvent(&pause_event);
|
| +}
|
| +
|
| +
|
| #if defined(DEBUG)
|
| void IsolateMessageHandler::CheckAccess() {
|
| ASSERT(IsCurrentIsolate());
|
| @@ -1318,32 +1339,29 @@ void Isolate::PrintJSON(JSONStream* stream, bool ref) {
|
| heap()->PrintToJSONObject(Heap::kOld, &jsheap);
|
| }
|
|
|
| - // TODO(turnidge): Don't compute a full stack trace every time we
|
| - // request an isolate's info.
|
| - DebuggerStackTrace* stack = debugger()->StackTrace();
|
| - if (stack->Length() > 0) {
|
| - JSONObject jsframe(&jsobj, "topFrame");
|
| -
|
| - ActivationFrame* frame = stack->FrameAt(0);
|
| - frame->PrintToJSONObject(&jsobj);
|
| - // TODO(turnidge): Implement depth differently -- differentiate
|
| - // inlined frames.
|
| - jsobj.AddProperty("depth", (intptr_t)0);
|
| - }
|
| jsobj.AddProperty("livePorts", message_handler()->live_ports());
|
| jsobj.AddProperty("pauseOnExit", message_handler()->pause_on_exit());
|
|
|
| - // TODO(turnidge): Make the debugger support paused_on_start/exit.
|
| if (message_handler()->paused_on_start()) {
|
| ASSERT(debugger()->PauseEvent() == NULL);
|
| - DebuggerEvent pauseEvent(this, DebuggerEvent::kIsolateCreated);
|
| - jsobj.AddProperty("pauseEvent", &pauseEvent);
|
| + ServiceEvent pause_event(this, ServiceEvent::kPauseStart);
|
| + jsobj.AddProperty("pauseEvent", &pause_event);
|
| } else if (message_handler()->paused_on_exit()) {
|
| ASSERT(debugger()->PauseEvent() == NULL);
|
| - DebuggerEvent pauseEvent(this, DebuggerEvent::kIsolateShutdown);
|
| - jsobj.AddProperty("pauseEvent", &pauseEvent);
|
| + ServiceEvent pause_event(this, ServiceEvent::kPauseExit);
|
| + jsobj.AddProperty("pauseEvent", &pause_event);
|
| } else if (debugger()->PauseEvent() != NULL) {
|
| - jsobj.AddProperty("pauseEvent", debugger()->PauseEvent());
|
| + ServiceEvent pause_event(debugger()->PauseEvent());
|
| + jsobj.AddProperty("pauseEvent", &pause_event);
|
| + } else {
|
| + ServiceEvent pause_event(this, ServiceEvent::kResume);
|
| +
|
| + // TODO(turnidge): Don't compute a full stack trace.
|
| + DebuggerStackTrace* stack = debugger()->StackTrace();
|
| + if (stack->Length() > 0) {
|
| + pause_event.set_top_frame(stack->FrameAt(0));
|
| + }
|
| + jsobj.AddProperty("pauseEvent", &pause_event);
|
| }
|
|
|
| const Library& lib =
|
| @@ -1387,6 +1405,10 @@ void Isolate::PrintJSON(JSONStream* stream, bool ref) {
|
| }
|
| }
|
| {
|
| + JSONArray breakpoints(&jsobj, "breakpoints");
|
| + debugger()->PrintBreakpointsToJSONArray(&breakpoints);
|
| + }
|
| + {
|
| JSONArray features_array(&jsobj, "features");
|
| if (is_io_enabled) {
|
| features_array.AddValue("io");
|
|
|