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

Side by Side Diff: runtime/bin/dbg_connection.cc

Issue 271153002: Add pause/resume for isolates in vmservice/observatory. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: gen js Created 6 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
« no previous file with comments | « runtime/bin/dbg_connection.h ('k') | runtime/bin/main.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "bin/dbg_connection.h" 5 #include "bin/dbg_connection.h"
6 #include "bin/dbg_message.h" 6 #include "bin/dbg_message.h"
7 #include "bin/dartutils.h" 7 #include "bin/dartutils.h"
8 #include "bin/log.h" 8 #include "bin/log.h"
9 #include "bin/socket.h" 9 #include "bin/socket.h"
10 #include "bin/thread.h" 10 #include "bin/thread.h"
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 } 290 }
291 if (msgbuf_ != NULL) { 291 if (msgbuf_ != NULL) {
292 delete msgbuf_; 292 delete msgbuf_;
293 msgbuf_ = NULL; 293 msgbuf_ = NULL;
294 } 294 }
295 // TODO(hausner): Need to tell the VM debugger object to remove all 295 // TODO(hausner): Need to tell the VM debugger object to remove all
296 // breakpoints. 296 // breakpoints.
297 } 297 }
298 298
299 299
300 // The vm service relies on certain debugger functionality.
301 void DebuggerConnectionHandler::InitForVmService() {
302 MonitorLocker ml(handler_lock_);
303 DbgMsgQueueList::Initialize();
304 }
305
306
300 int DebuggerConnectionHandler::StartHandler(const char* address, 307 int DebuggerConnectionHandler::StartHandler(const char* address,
301 int port_number) { 308 int port_number) {
302 ASSERT(handler_lock_ != NULL); 309 ASSERT(handler_lock_ != NULL);
303 MonitorLocker ml(handler_lock_); 310 MonitorLocker ml(handler_lock_);
304 if (listener_fd_ != -1) { 311 if (IsListening()) {
305 // The debugger connection handler was already started. 312 // The debugger connection handler was already started.
306 return Socket::GetPort(listener_fd_); 313 return Socket::GetPort(listener_fd_);
307 } 314 }
308 315
309 // First setup breakpoint, exception and delayed breakpoint handlers. 316 // First setup breakpoint, exception and delayed breakpoint handlers.
310 DbgMsgQueueList::Initialize(); 317 DbgMsgQueueList::Initialize();
311 318
312 // Initialize the socket implementation. 319 // Initialize the socket implementation.
313 if (!Socket::Initialize()) { 320 if (!Socket::Initialize()) {
314 FATAL("Failed initializing socket implementation."); 321 FATAL("Failed initializing socket implementation.");
(...skipping 11 matching lines...) Expand all
326 delete addresses; 333 delete addresses;
327 port_number = Socket::GetPort(listener_fd_); 334 port_number = Socket::GetPort(listener_fd_);
328 DebuggerConnectionImpl::StartHandler(port_number); 335 DebuggerConnectionImpl::StartHandler(port_number);
329 return port_number; 336 return port_number;
330 } 337 }
331 338
332 339
333 void DebuggerConnectionHandler::WaitForConnection() { 340 void DebuggerConnectionHandler::WaitForConnection() {
334 ASSERT(handler_lock_ != NULL); 341 ASSERT(handler_lock_ != NULL);
335 MonitorLocker ml(handler_lock_); 342 MonitorLocker ml(handler_lock_);
343 if (!IsListening()) {
344 // If we are only running the vm service, don't wait for
345 // connections.
346 return;
347 }
336 while (!IsConnected()) { 348 while (!IsConnected()) {
337 dart::Monitor::WaitResult res = ml.Wait(); 349 dart::Monitor::WaitResult res = ml.Wait();
338 ASSERT(res == dart::Monitor::kNotified); 350 ASSERT(res == dart::Monitor::kNotified);
339 } 351 }
340 } 352 }
341 353
342 354
343 void DebuggerConnectionHandler::SendMsg(int debug_fd, dart::TextBuffer* msg) { 355 void DebuggerConnectionHandler::SendMsg(int debug_fd, dart::TextBuffer* msg) {
344 ASSERT(handler_lock_ != NULL); 356 ASSERT(handler_lock_ != NULL);
345 MonitorLocker ml(handler_lock_); 357 MonitorLocker ml(handler_lock_);
346 SendMsgHelper(debug_fd, msg); 358 SendMsgHelper(debug_fd, msg);
347 } 359 }
348 360
349 361
350 void DebuggerConnectionHandler::BroadcastMsg(dart::TextBuffer* msg) { 362 void DebuggerConnectionHandler::BroadcastMsg(dart::TextBuffer* msg) {
351 ASSERT(handler_lock_ != NULL); 363 ASSERT(handler_lock_ != NULL);
352 MonitorLocker ml(handler_lock_); 364 MonitorLocker ml(handler_lock_);
365 if (!IsListening()) {
366 // If we are only running the vm service, don't try to broadcast
367 // to debugger clients.
368 return;
369 }
353 // TODO(asiva): Once we support connection to multiple debuggers 370 // TODO(asiva): Once we support connection to multiple debuggers
354 // we need to send the message to all of them. 371 // we need to send the message to all of them.
355 ASSERT(singleton_handler != NULL); 372 ASSERT(singleton_handler != NULL);
356 SendMsgHelper(singleton_handler->debug_fd(), msg); 373 SendMsgHelper(singleton_handler->debug_fd(), msg);
357 } 374 }
358 375
359 376
360 void DebuggerConnectionHandler::SendMsgHelper(int debug_fd, 377 void DebuggerConnectionHandler::SendMsgHelper(int debug_fd,
361 dart::TextBuffer* msg) { 378 dart::TextBuffer* msg) {
362 ASSERT(debug_fd >= 0); 379 ASSERT(debug_fd >= 0);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 499
483 500
484 bool DebuggerConnectionHandler::IsConnected() { 501 bool DebuggerConnectionHandler::IsConnected() {
485 // TODO(asiva): Support multiple debugger connections. 502 // TODO(asiva): Support multiple debugger connections.
486 // Return true if a connection has been established. 503 // Return true if a connection has been established.
487 return singleton_handler != NULL; 504 return singleton_handler != NULL;
488 } 505 }
489 506
490 } // namespace bin 507 } // namespace bin
491 } // namespace dart 508 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/dbg_connection.h ('k') | runtime/bin/main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698