Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(257)

Side by Side Diff: runtime/vm/debugger.cc

Issue 1143783003: Add the streamListen and streamCancel rpcs to the vm service. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Cleanups pre-review Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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/debugger.h" 5 #include "vm/debugger.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 8
9 #include "vm/code_generator.h" 9 #include "vm/code_generator.h"
10 #include "vm/code_patcher.h" 10 #include "vm/code_patcher.h"
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 deopt_frame_(Array::ZoneHandle(deopt_frame.raw())), 219 deopt_frame_(Array::ZoneHandle(deopt_frame.raw())),
220 deopt_frame_offset_(deopt_frame_offset), 220 deopt_frame_offset_(deopt_frame_offset),
221 vars_initialized_(false), 221 vars_initialized_(false),
222 var_descriptors_(LocalVarDescriptors::ZoneHandle()), 222 var_descriptors_(LocalVarDescriptors::ZoneHandle()),
223 desc_indices_(8), 223 desc_indices_(8),
224 pc_desc_(PcDescriptors::ZoneHandle()) { 224 pc_desc_(PcDescriptors::ZoneHandle()) {
225 } 225 }
226 226
227 227
228 bool Debugger::HasEventHandler() { 228 bool Debugger::HasEventHandler() {
229 return (event_handler_ != NULL) || Service::NeedsEvents(); 229 return ((event_handler_ != NULL) ||
230 Service::NeedsIsolateEvents() ||
231 Service::NeedsDebugEvents());
230 } 232 }
231 233
232 234
235 static bool ServiceNeedsDebuggerEvent(DebuggerEvent::EventType type) {
236 switch (type) {
237 case DebuggerEvent::kBreakpointResolved:
238 // kBreakpointResolved events are handled differently in the vm
239 // service, so suppress them here.
240 return false;
241
242 case DebuggerEvent::kBreakpointReached:
243 case DebuggerEvent::kExceptionThrown:
244 case DebuggerEvent::kIsolateInterrupted:
245 return Service::NeedsDebugEvents();
246
247 case DebuggerEvent::kIsolateCreated:
248 case DebuggerEvent::kIsolateShutdown:
249 return Service::NeedsIsolateEvents();
250
251 default:
252 UNREACHABLE();
253 return false;
254 }
255 }
256
257
233 void Debugger::InvokeEventHandler(DebuggerEvent* event) { 258 void Debugger::InvokeEventHandler(DebuggerEvent* event) {
234 ASSERT(HasEventHandler()); 259 ASSERT(HasEventHandler());
235 260
236 // Give the event to the Service first, as the debugger event handler 261 // Give the event to the Service first, as the debugger event handler
237 // may go into a message loop and the Service will not. 262 // may go into a message loop and the Service will not.
238 // 263 //
239 // kBreakpointResolved events are handled differently in the vm 264 // kBreakpointResolved events are handled differently in the vm
240 // service, so suppress them here. 265 // service, so suppress them here.
241 if (Service::NeedsEvents() && 266 if (ServiceNeedsDebuggerEvent(event->type())) {
242 (event->type() != DebuggerEvent::kBreakpointResolved)) {
243 ServiceEvent service_event(event); 267 ServiceEvent service_event(event);
244 Service::HandleEvent(&service_event); 268 Service::HandleEvent(&service_event);
245 } 269 }
246 270
247 if (FLAG_steal_breakpoints && event->IsPauseEvent()) { 271 if (FLAG_steal_breakpoints && event->IsPauseEvent()) {
248 // We allow the embedder's default breakpoint handler to be overridden. 272 // We allow the embedder's default breakpoint handler to be overridden.
249 isolate_->PauseEventHandler(); 273 isolate_->PauseEventHandler();
250 } else if (event_handler_ != NULL) { 274 } else if (event_handler_ != NULL) {
251 (*event_handler_)(event); 275 (*event_handler_)(event);
252 } 276 }
253 277
254 if (Service::NeedsEvents() && event->IsPauseEvent()) { 278 if (ServiceNeedsDebuggerEvent(event->type()) && event->IsPauseEvent()) {
255 // If we were paused, notify the service that we have resumed. 279 // If we were paused, notify the service that we have resumed.
256 ServiceEvent service_event(event->isolate(), ServiceEvent::kResume); 280 ServiceEvent service_event(event->isolate(), ServiceEvent::kResume);
257 service_event.set_top_frame(event->top_frame()); 281 service_event.set_top_frame(event->top_frame());
258 Service::HandleEvent(&service_event); 282 Service::HandleEvent(&service_event);
259 } 283 }
260 } 284 }
261 285
262 286
263 void Debugger::SignalIsolateEvent(DebuggerEvent::EventType type) { 287 void Debugger::SignalIsolateEvent(DebuggerEvent::EventType type) {
264 if (HasEventHandler()) { 288 if (HasEventHandler()) {
(...skipping 22 matching lines...) Expand all
287 ASSERT(debugger != NULL); 311 ASSERT(debugger != NULL);
288 debugger->SignalIsolateEvent(DebuggerEvent::kIsolateInterrupted); 312 debugger->SignalIsolateEvent(DebuggerEvent::kIsolateInterrupted);
289 } 313 }
290 } 314 }
291 315
292 316
293 // The vm service handles breakpoint notifications in a different way 317 // The vm service handles breakpoint notifications in a different way
294 // than the regular debugger breakpoint notifications. 318 // than the regular debugger breakpoint notifications.
295 static void SendServiceBreakpointEvent(ServiceEvent::EventType type, 319 static void SendServiceBreakpointEvent(ServiceEvent::EventType type,
296 SourceBreakpoint* bpt) { 320 SourceBreakpoint* bpt) {
297 if (Service::NeedsEvents()) { 321 if (Service::NeedsDebugEvents()) {
298 ServiceEvent service_event(Isolate::Current(), type); 322 ServiceEvent service_event(Isolate::Current(), type);
299 service_event.set_breakpoint(bpt); 323 service_event.set_breakpoint(bpt);
300 Service::HandleEvent(&service_event); 324 Service::HandleEvent(&service_event);
301 } 325 }
302 } 326 }
303 327
304 328
305 const char* Debugger::QualifiedFunctionName(const Function& func) { 329 const char* Debugger::QualifiedFunctionName(const Function& func) {
306 const String& func_name = String::Handle(func.name()); 330 const String& func_name = String::Handle(func.name());
307 Class& func_class = Class::Handle(func.Owner()); 331 Class& func_class = Class::Handle(func.Owner());
(...skipping 2387 matching lines...) Expand 10 before | Expand all | Expand 10 after
2695 } 2719 }
2696 2720
2697 2721
2698 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) { 2722 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) {
2699 ASSERT(bpt->next() == NULL); 2723 ASSERT(bpt->next() == NULL);
2700 bpt->set_next(code_breakpoints_); 2724 bpt->set_next(code_breakpoints_);
2701 code_breakpoints_ = bpt; 2725 code_breakpoints_ = bpt;
2702 } 2726 }
2703 2727
2704 } // namespace dart 2728 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698