| Index: src/debug.h
|
| ===================================================================
|
| --- src/debug.h (revision 1787)
|
| +++ src/debug.h (working copy)
|
| @@ -405,70 +405,65 @@
|
| // In addition to command text it may contain a pointer to some user data
|
| // which are expected to be passed along with the command reponse to message
|
| // handler.
|
| -class Message {
|
| +class CommandMessage {
|
| public:
|
| - static Message NewCommand(const Vector<uint16_t>& command,
|
| + static CommandMessage New(const Vector<uint16_t>& command,
|
| v8::Debug::ClientData* data);
|
| - static Message NewOutput(v8::Handle<v8::String> output,
|
| - v8::Debug::ClientData* data);
|
| - static Message NewEmptyMessage();
|
| - Message();
|
| - ~Message();
|
| + CommandMessage();
|
| + ~CommandMessage();
|
|
|
| // Deletes user data and disposes of the text.
|
| void Dispose();
|
| Vector<uint16_t> text() const { return text_; }
|
| v8::Debug::ClientData* client_data() const { return client_data_; }
|
| private:
|
| - Message(const Vector<uint16_t>& text,
|
| - v8::Debug::ClientData* data);
|
| + CommandMessage(const Vector<uint16_t>& text,
|
| + v8::Debug::ClientData* data);
|
|
|
| Vector<uint16_t> text_;
|
| v8::Debug::ClientData* client_data_;
|
| };
|
|
|
| -// A Queue of Vector<uint16_t> objects. A thread-safe version is
|
| -// LockingMessageQueue, based on this class.
|
| -class MessageQueue BASE_EMBEDDED {
|
| +// A Queue of CommandMessage objects. A thread-safe version is
|
| +// LockingCommandMessageQueue, based on this class.
|
| +class CommandMessageQueue BASE_EMBEDDED {
|
| public:
|
| - explicit MessageQueue(int size);
|
| - ~MessageQueue();
|
| + explicit CommandMessageQueue(int size);
|
| + ~CommandMessageQueue();
|
| bool IsEmpty() const { return start_ == end_; }
|
| - Message Get();
|
| - void Put(const Message& message);
|
| + CommandMessage Get();
|
| + void Put(const CommandMessage& message);
|
| void Clear() { start_ = end_ = 0; } // Queue is empty after Clear().
|
| private:
|
| // Doubles the size of the message queue, and copies the messages.
|
| void Expand();
|
|
|
| - Message* messages_;
|
| + CommandMessage* messages_;
|
| int start_;
|
| int end_;
|
| int size_; // The size of the queue buffer. Queue can hold size-1 messages.
|
| };
|
|
|
|
|
| -// LockingMessageQueue is a thread-safe circular buffer of Vector<uint16_t>
|
| -// messages. The message data is not managed by LockingMessageQueue.
|
| +// LockingCommandMessageQueue is a thread-safe circular buffer of CommandMessage
|
| +// messages. The message data is not managed by LockingCommandMessageQueue.
|
| // Pointers to the data are passed in and out. Implemented by adding a
|
| -// Mutex to MessageQueue. Includes logging of all puts and gets.
|
| -class LockingMessageQueue BASE_EMBEDDED {
|
| +// Mutex to CommandMessageQueue. Includes logging of all puts and gets.
|
| +class LockingCommandMessageQueue BASE_EMBEDDED {
|
| public:
|
| - explicit LockingMessageQueue(int size);
|
| - ~LockingMessageQueue();
|
| + explicit LockingCommandMessageQueue(int size);
|
| + ~LockingCommandMessageQueue();
|
| bool IsEmpty() const;
|
| - Message Get();
|
| - void Put(const Message& message);
|
| + CommandMessage Get();
|
| + void Put(const CommandMessage& message);
|
| void Clear();
|
| private:
|
| - MessageQueue queue_;
|
| + CommandMessageQueue queue_;
|
| Mutex* lock_;
|
| - DISALLOW_COPY_AND_ASSIGN(LockingMessageQueue);
|
| + DISALLOW_COPY_AND_ASSIGN(LockingCommandMessageQueue);
|
| };
|
|
|
|
|
| -class DebugMessageThread;
|
| -
|
| class Debugger {
|
| public:
|
| static void DebugRequest(const uint16_t* json_request, int length);
|
| @@ -503,21 +498,16 @@
|
| Handle<Object> event_data,
|
| bool auto_continue);
|
| static void SetEventListener(Handle<Object> callback, Handle<Object> data);
|
| - static void SetMessageHandler(v8::Debug::MessageHandler handler,
|
| - bool message_handler_thread);
|
| - static void TearDown();
|
| + static void SetMessageHandler(v8::Debug::MessageHandler handler);
|
| static void SetHostDispatchHandler(v8::Debug::HostDispatchHandler handler,
|
| int period);
|
|
|
| // Invoke the message handler function.
|
| - static void InvokeMessageHandler(Message message);
|
| + static void InvokeMessageHandler(v8::Handle<v8::String> output,
|
| + v8::Debug::ClientData* data);
|
|
|
| - // Send a message to the message handler eiher through the message thread or
|
| - // directly.
|
| - static void SendMessage(Message message);
|
| -
|
| // Send the JSON message for a debug event.
|
| - static bool SendEventMessage(Handle<Object> event_data);
|
| + static bool InvokeMessageHandlerWithEvent(Handle<Object> event_data);
|
|
|
| // Add a debugger command to the command queue.
|
| static void ProcessCommand(Vector<const uint16_t> command,
|
| @@ -568,7 +558,6 @@
|
| static bool compiling_natives_; // Are we compiling natives?
|
| static bool is_loading_debugger_; // Are we loading the debugger?
|
| static bool never_unload_debugger_; // Can we unload the debugger?
|
| - static DebugMessageThread* message_thread_;
|
| static v8::Debug::MessageHandler message_handler_;
|
| static bool message_handler_cleared_; // Was message handler cleared?
|
| static v8::Debug::HostDispatchHandler host_dispatch_handler_;
|
| @@ -577,35 +566,13 @@
|
| static DebuggerAgent* agent_;
|
|
|
| static const int kQueueInitialSize = 4;
|
| - static LockingMessageQueue command_queue_;
|
| - static LockingMessageQueue message_queue_;
|
| + static LockingCommandMessageQueue command_queue_;
|
| static Semaphore* command_received_; // Signaled for each command received.
|
| - static Semaphore* message_received_; // Signalled for each message send.
|
|
|
| friend class EnterDebugger;
|
| - friend class DebugMessageThread;
|
| };
|
|
|
|
|
| -// Thread to read messages from the message queue and invoke the debug message
|
| -// handler in another thread as the V8 thread. This thread is started if the
|
| -// registration of the debug message handler requested to be called in a thread
|
| -// seperate from the V8 thread.
|
| -class DebugMessageThread: public Thread {
|
| - public:
|
| - DebugMessageThread() : keep_running_(true) {}
|
| - virtual ~DebugMessageThread() {}
|
| -
|
| - // Main function of DebugMessageThread thread.
|
| - void Run();
|
| - void Stop();
|
| -
|
| - private:
|
| - bool keep_running_;
|
| - DISALLOW_COPY_AND_ASSIGN(DebugMessageThread);
|
| -};
|
| -
|
| -
|
| // This class is used for entering the debugger. Create an instance in the stack
|
| // to enter the debugger. This will set the current break state, make sure the
|
| // debugger is loaded and switch to the debugger context. If the debugger for
|
|
|