Skip to content

Commit 134ccb5

Browse files
committed
Use libuv to wake up main thread
1 parent 573c959 commit 134ccb5

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

atom/browser/node_debugger.cc

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ NodeDebugger::NodeDebugger(v8::Isolate* isolate)
5959
if (wait_for_connection)
6060
v8::Debug::DebugBreak(isolate_);
6161

62+
uv_async_init(uv_default_loop(), &weak_up_ui_handle_, ProcessMessageInUI);
63+
6264
// Start a new IO thread.
6365
base::Thread::Options options;
6466
options.message_loop_type = base::MessageLoop::TYPE_IO;
@@ -106,9 +108,7 @@ void NodeDebugger::OnMessage(const std::string& message) {
106108
isolate_,
107109
reinterpret_cast<const uint16_t*>(message16.data()), message16.size());
108110

109-
content::BrowserThread::PostTask(
110-
content::BrowserThread::UI, FROM_HERE,
111-
base::Bind(&v8::Debug::ProcessDebugMessages));
111+
uv_async_send(&weak_up_ui_handle_);
112112
}
113113

114114
void NodeDebugger::SendMessage(const std::string& message) {
@@ -130,6 +130,11 @@ void NodeDebugger::SendConnectMessage() {
130130
v8::V8::GetVersion(), ATOM_PRODUCT_NAME, kContentLength), true);
131131
}
132132

133+
// static
134+
void NodeDebugger::ProcessMessageInUI(uv_async_t* handle) {
135+
v8::Debug::ProcessDebugMessages();
136+
}
137+
133138
// static
134139
void NodeDebugger::DebugMessageHandler(const v8::Debug::Message& message) {
135140
NodeDebugger* self = static_cast<NodeDebugger*>(

atom/browser/node_debugger.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "base/threading/thread.h"
1313
#include "net/test/embedded_test_server/stream_listen_socket.h"
1414
#include "v8/include/v8-debug.h"
15+
#include "vendor/node/deps/uv/include/uv.h"
1516

1617
namespace atom {
1718

@@ -30,6 +31,8 @@ class NodeDebugger : public net::test_server::StreamListenSocket::Delegate {
3031
void SendMessage(const std::string& message);
3132
void SendConnectMessage();
3233

34+
static void ProcessMessageInUI(uv_async_t* handle);
35+
3336
static void DebugMessageHandler(const v8::Debug::Message& message);
3437

3538
// net::test_server::StreamListenSocket::Delegate:
@@ -43,6 +46,8 @@ class NodeDebugger : public net::test_server::StreamListenSocket::Delegate {
4346

4447
v8::Isolate* isolate_;
4548

49+
uv_async_t weak_up_ui_handle_;
50+
4651
base::Thread thread_;
4752
scoped_ptr<net::test_server::StreamListenSocket> server_;
4853
scoped_ptr<net::test_server::StreamListenSocket> accepted_socket_;

0 commit comments

Comments
 (0)