Enable idle GC for both browser and renderer.
authorCheng Zhao <zcbenz@gmail.com>
Mon, 29 Jul 2013 12:50:03 +0000 (20:50 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Mon, 29 Jul 2013 12:50:03 +0000 (20:50 +0800)
common/node_bindings.cc
common/node_bindings.h

index 2605d26..1676c5f 100644 (file)
@@ -42,6 +42,7 @@ NodeBindings::~NodeBindings() {
   WakeupEmbedThread();
   uv_thread_join(&embed_thread_);
   uv_sem_destroy(&embed_sem_);
+  uv_timer_stop(&idle_timer_);
 }
 
 void NodeBindings::Initialize() {
@@ -63,6 +64,10 @@ void NodeBindings::Initialize() {
 #endif
   }
 
+  // Init idle GC.
+  uv_timer_init(uv_default_loop(), &idle_timer_);
+  uv_timer_start(&idle_timer_, IdleCallback, 5000, 5000);
+
   // Open node's error reporting system for browser process.
   node::g_standalone_mode = is_browser_;
 
@@ -180,4 +185,9 @@ void NodeBindings::EmbedThreadRunner(void *arg) {
   }
 }
 
+// static
+void NodeBindings::IdleCallback(uv_timer_t*, int) {
+  v8::V8::IdleNotification();
+}
+
 }  // namespace atom
index ef03424..cadf168 100644 (file)
@@ -67,12 +67,18 @@ class NodeBindings {
   // Thread to poll uv events.
   static void EmbedThreadRunner(void *arg);
 
+  // Do idle GC.
+  static void IdleCallback(uv_timer_t*, int);
+
   // Whether the libuv loop has ended.
   bool embed_closed_;
 
   // Dummy handle to make uv's loop not quit.
   uv_async_t dummy_uv_handle_;
 
+  // Timer to do idle GC.
+  uv_timer_t idle_timer_;
+
   // Thread for polling events.
   uv_thread_t embed_thread_;