| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 | 402 |
| 403 | 403 |
| 404 // Message send by user to v8 debugger or debugger output message. | 404 // Message send by user to v8 debugger or debugger output message. |
| 405 // In addition to command text it may contain a pointer to some user data | 405 // In addition to command text it may contain a pointer to some user data |
| 406 // which are expected to be passed along with the command reponse to message | 406 // which are expected to be passed along with the command reponse to message |
| 407 // handler. | 407 // handler. |
| 408 class Message { | 408 class Message { |
| 409 public: | 409 public: |
| 410 static Message NewCommand(const Vector<uint16_t>& command, | 410 static Message NewCommand(const Vector<uint16_t>& command, |
| 411 v8::Debug::ClientData* data); | 411 v8::Debug::ClientData* data); |
| 412 static Message NewHostDispatch(v8::Debug::ClientData* dispatch); | |
| 413 static Message NewOutput(v8::Handle<v8::String> output, | 412 static Message NewOutput(v8::Handle<v8::String> output, |
| 414 v8::Debug::ClientData* data); | 413 v8::Debug::ClientData* data); |
| 415 static Message NewEmptyMessage(); | 414 static Message NewEmptyMessage(); |
| 416 Message(); | 415 Message(); |
| 417 ~Message(); | 416 ~Message(); |
| 418 | 417 |
| 419 // Deletes user data and disposes of the text. | 418 // Deletes user data and disposes of the text. |
| 420 void Dispose(); | 419 void Dispose(); |
| 421 bool IsHostDispatch() const; | |
| 422 Vector<uint16_t> text() const { return text_; } | 420 Vector<uint16_t> text() const { return text_; } |
| 423 v8::Debug::ClientData* client_data() const { return client_data_; } | 421 v8::Debug::ClientData* client_data() const { return client_data_; } |
| 424 private: | 422 private: |
| 425 Message(const Vector<uint16_t>& text, | 423 Message(const Vector<uint16_t>& text, |
| 426 v8::Debug::ClientData* data, | 424 v8::Debug::ClientData* data); |
| 427 bool is_host_dispatch); | |
| 428 | 425 |
| 429 Vector<uint16_t> text_; | 426 Vector<uint16_t> text_; |
| 430 v8::Debug::ClientData* client_data_; | 427 v8::Debug::ClientData* client_data_; |
| 431 bool is_host_dispatch_; | |
| 432 }; | 428 }; |
| 433 | 429 |
| 434 // A Queue of Vector<uint16_t> objects. A thread-safe version is | 430 // A Queue of Vector<uint16_t> objects. A thread-safe version is |
| 435 // LockingMessageQueue, based on this class. | 431 // LockingMessageQueue, based on this class. |
| 436 class MessageQueue BASE_EMBEDDED { | 432 class MessageQueue BASE_EMBEDDED { |
| 437 public: | 433 public: |
| 438 explicit MessageQueue(int size); | 434 explicit MessageQueue(int size); |
| 439 ~MessageQueue(); | 435 ~MessageQueue(); |
| 440 bool IsEmpty() const { return start_ == end_; } | 436 bool IsEmpty() const { return start_ == end_; } |
| 441 Message Get(); | 437 Message Get(); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 Handle<Object> event_data, | 499 Handle<Object> event_data, |
| 504 bool auto_continue); | 500 bool auto_continue); |
| 505 static void NotifyMessageHandler(v8::DebugEvent event, | 501 static void NotifyMessageHandler(v8::DebugEvent event, |
| 506 Handle<Object> exec_state, | 502 Handle<Object> exec_state, |
| 507 Handle<Object> event_data, | 503 Handle<Object> event_data, |
| 508 bool auto_continue); | 504 bool auto_continue); |
| 509 static void SetEventListener(Handle<Object> callback, Handle<Object> data); | 505 static void SetEventListener(Handle<Object> callback, Handle<Object> data); |
| 510 static void SetMessageHandler(v8::Debug::MessageHandler handler, | 506 static void SetMessageHandler(v8::Debug::MessageHandler handler, |
| 511 bool message_handler_thread); | 507 bool message_handler_thread); |
| 512 static void TearDown(); | 508 static void TearDown(); |
| 513 static void SetHostDispatchHandler(v8::Debug::HostDispatchHandler handler); | 509 static void SetHostDispatchHandler(v8::Debug::HostDispatchHandler handler, |
| 510 int period); |
| 514 | 511 |
| 515 // Invoke the message handler function. | 512 // Invoke the message handler function. |
| 516 static void InvokeMessageHandler(Message message); | 513 static void InvokeMessageHandler(Message message); |
| 517 | 514 |
| 518 // Send a message to the message handler eiher through the message thread or | 515 // Send a message to the message handler eiher through the message thread or |
| 519 // directly. | 516 // directly. |
| 520 static void SendMessage(Message message); | 517 static void SendMessage(Message message); |
| 521 | 518 |
| 522 // Send the JSON message for a debug event. | 519 // Send the JSON message for a debug event. |
| 523 static bool SendEventMessage(Handle<Object> event_data); | 520 static bool SendEventMessage(Handle<Object> event_data); |
| 524 | 521 |
| 525 // Add a debugger command to the command queue. | 522 // Add a debugger command to the command queue. |
| 526 static void ProcessCommand(Vector<const uint16_t> command, | 523 static void ProcessCommand(Vector<const uint16_t> command, |
| 527 v8::Debug::ClientData* client_data = NULL); | 524 v8::Debug::ClientData* client_data = NULL); |
| 528 | 525 |
| 529 // Check whether there are commands in the command queue. | 526 // Check whether there are commands in the command queue. |
| 530 static bool HasCommands(); | 527 static bool HasCommands(); |
| 531 | 528 |
| 532 static void ProcessHostDispatch(v8::Debug::ClientData* dispatch); | |
| 533 static Handle<Object> Call(Handle<JSFunction> fun, | 529 static Handle<Object> Call(Handle<JSFunction> fun, |
| 534 Handle<Object> data, | 530 Handle<Object> data, |
| 535 bool* pending_exception); | 531 bool* pending_exception); |
| 536 | 532 |
| 537 // Start the debugger agent listening on the provided port. | 533 // Start the debugger agent listening on the provided port. |
| 538 static bool StartAgent(const char* name, int port); | 534 static bool StartAgent(const char* name, int port); |
| 539 | 535 |
| 540 // Stop the debugger agent. | 536 // Stop the debugger agent. |
| 541 static void StopAgent(); | 537 static void StopAgent(); |
| 542 | 538 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 569 static Mutex* debugger_access_; // Mutex guarding debugger variables. | 565 static Mutex* debugger_access_; // Mutex guarding debugger variables. |
| 570 static Handle<Object> event_listener_; // Global handle to listener. | 566 static Handle<Object> event_listener_; // Global handle to listener. |
| 571 static Handle<Object> event_listener_data_; | 567 static Handle<Object> event_listener_data_; |
| 572 static bool compiling_natives_; // Are we compiling natives? | 568 static bool compiling_natives_; // Are we compiling natives? |
| 573 static bool is_loading_debugger_; // Are we loading the debugger? | 569 static bool is_loading_debugger_; // Are we loading the debugger? |
| 574 static bool never_unload_debugger_; // Can we unload the debugger? | 570 static bool never_unload_debugger_; // Can we unload the debugger? |
| 575 static DebugMessageThread* message_thread_; | 571 static DebugMessageThread* message_thread_; |
| 576 static v8::Debug::MessageHandler message_handler_; | 572 static v8::Debug::MessageHandler message_handler_; |
| 577 static bool message_handler_cleared_; // Was message handler cleared? | 573 static bool message_handler_cleared_; // Was message handler cleared? |
| 578 static v8::Debug::HostDispatchHandler host_dispatch_handler_; | 574 static v8::Debug::HostDispatchHandler host_dispatch_handler_; |
| 575 static int host_dispatch_micros_; |
| 579 | 576 |
| 580 static DebuggerAgent* agent_; | 577 static DebuggerAgent* agent_; |
| 581 | 578 |
| 582 static const int kQueueInitialSize = 4; | 579 static const int kQueueInitialSize = 4; |
| 583 static LockingMessageQueue command_queue_; | 580 static LockingMessageQueue command_queue_; |
| 584 static LockingMessageQueue message_queue_; | 581 static LockingMessageQueue message_queue_; |
| 585 static Semaphore* command_received_; // Signaled for each command received. | 582 static Semaphore* command_received_; // Signaled for each command received. |
| 586 static Semaphore* message_received_; // Signalled for each message send. | 583 static Semaphore* message_received_; // Signalled for each message send. |
| 587 | 584 |
| 588 friend class EnterDebugger; | 585 friend class EnterDebugger; |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 748 Debug::AddressId id_; | 745 Debug::AddressId id_; |
| 749 int reg_; | 746 int reg_; |
| 750 }; | 747 }; |
| 751 | 748 |
| 752 | 749 |
| 753 } } // namespace v8::internal | 750 } } // namespace v8::internal |
| 754 | 751 |
| 755 #endif // ENABLE_DEBUGGER_SUPPORT | 752 #endif // ENABLE_DEBUGGER_SUPPORT |
| 756 | 753 |
| 757 #endif // V8_V8_DEBUG_H_ | 754 #endif // V8_V8_DEBUG_H_ |
| OLD | NEW |