| Index: runtime/vm/debugger.cc
|
| diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
|
| index 30ba2d992153e33fbcb6f84bfa1c9c2eef257bca..141d82c9c0a9878bf43a5f605dc85ada80b1f51b 100644
|
| --- a/runtime/vm/debugger.cc
|
| +++ b/runtime/vm/debugger.cc
|
| @@ -227,7 +227,32 @@ ActivationFrame::ActivationFrame(
|
|
|
|
|
| bool Debugger::HasEventHandler() {
|
| - return (event_handler_ != NULL) || Service::NeedsEvents();
|
| + return ((event_handler_ != NULL) ||
|
| + Service::NeedsIsolateEvents() ||
|
| + Service::NeedsDebugEvents());
|
| +}
|
| +
|
| +
|
| +static bool ServiceNeedsDebuggerEvent(DebuggerEvent::EventType type) {
|
| + switch (type) {
|
| + case DebuggerEvent::kBreakpointResolved:
|
| + // kBreakpointResolved events are handled differently in the vm
|
| + // service, so suppress them here.
|
| + return false;
|
| +
|
| + case DebuggerEvent::kBreakpointReached:
|
| + case DebuggerEvent::kExceptionThrown:
|
| + case DebuggerEvent::kIsolateInterrupted:
|
| + return Service::NeedsDebugEvents();
|
| +
|
| + case DebuggerEvent::kIsolateCreated:
|
| + case DebuggerEvent::kIsolateShutdown:
|
| + return Service::NeedsIsolateEvents();
|
| +
|
| + default:
|
| + UNREACHABLE();
|
| + return false;
|
| + }
|
| }
|
|
|
|
|
| @@ -239,8 +264,7 @@ void Debugger::InvokeEventHandler(DebuggerEvent* event) {
|
| //
|
| // kBreakpointResolved events are handled differently in the vm
|
| // service, so suppress them here.
|
| - if (Service::NeedsEvents() &&
|
| - (event->type() != DebuggerEvent::kBreakpointResolved)) {
|
| + if (ServiceNeedsDebuggerEvent(event->type())) {
|
| ServiceEvent service_event(event);
|
| Service::HandleEvent(&service_event);
|
| }
|
| @@ -252,7 +276,7 @@ void Debugger::InvokeEventHandler(DebuggerEvent* event) {
|
| (*event_handler_)(event);
|
| }
|
|
|
| - if (Service::NeedsEvents() && event->IsPauseEvent()) {
|
| + if (ServiceNeedsDebuggerEvent(event->type()) && event->IsPauseEvent()) {
|
| // If we were paused, notify the service that we have resumed.
|
| ServiceEvent service_event(event->isolate(), ServiceEvent::kResume);
|
| service_event.set_top_frame(event->top_frame());
|
| @@ -295,7 +319,7 @@ void Debugger::SignalIsolateInterrupted() {
|
| // than the regular debugger breakpoint notifications.
|
| static void SendServiceBreakpointEvent(ServiceEvent::EventType type,
|
| SourceBreakpoint* bpt) {
|
| - if (Service::NeedsEvents()) {
|
| + if (Service::NeedsDebugEvents()) {
|
| ServiceEvent service_event(Isolate::Current(), type);
|
| service_event.set_breakpoint(bpt);
|
| Service::HandleEvent(&service_event);
|
|
|