Add runtime configuration to dynamically modify single process mode 19/184619/3
authorsurya.kumar7 <surya.kumar7@samsung.com>
Thu, 19 Jul 2018 08:20:00 +0000 (13:50 +0530)
committersurya.kumar7 <surya.kumar7@samsung.com>
Thu, 26 Jul 2018 07:41:35 +0000 (13:11 +0530)
Single process mode can be easily altered with the help of a platform
level environment flag

Change-Id: Ie5b56e0b786f3221b37522ff921a495e17a9347f
Signed-off-by: surya.kumar7 <surya.kumar7@samsung.com>
atom/app/node_main.cc
atom/browser/browser.cc
atom/browser/node_debugger.h
packaging/electron-efl.spec
tizen/pwrt_env.sh [new file with mode: 0644]
tizen/src/wrt_main.cc
vendor/node/src/node.cc
vendor/node/src/node.h
wrt.gyp

index dbfbfae..9e80ef2 100644 (file)
@@ -44,7 +44,7 @@ int NodeMain(int argc, char *argv[]) {
 
     int exec_argc;
     const char** exec_argv;
-    // node::Init(&argc, const_cast<const char**>(argv), &exec_argc, &exec_argv); not called
+    node::Init(&argc, const_cast<const char**>(argv), &exec_argc, &exec_argv);
 
     node::IsolateData isolate_data(gin_env.isolate(), loop);
     node::Environment* env = node::CreateEnvironment(
@@ -52,9 +52,9 @@ int NodeMain(int argc, char *argv[]) {
         exec_argc, exec_argv);
 
     // Start our custom debugger implementation.
-    // NodeDebugger node_debugger(gin_env.isolate()); not called
-    // if (node_debugger.IsRunning())
-    //   env->AssignToContext(v8::Debug::GetDebugContext(gin_env.isolate()));
+    NodeDebugger node_debugger(gin_env.isolate());
+    if (node_debugger.IsRunning())
+      env->AssignToContext(v8::Debug::GetDebugContext(gin_env.isolate()));
 
     mate::Dictionary process(gin_env.isolate(), env->process_object());
 #if defined(OS_WIN)
index dcbe344..24c6c1f 100644 (file)
@@ -121,6 +121,8 @@ void Browser::Shutdown() {
 
   if (base::ThreadTaskRunnerHandle::IsSet()) {
     if (::tizen::is_single_process) {
+      // TODO: If delay is not produced, child thread closure is not happening;
+      //       engine has to be checked
       base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
         FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), base::TimeDelta::FromSeconds(1));
     } else {
index 4889fb2..04a4f62 100644 (file)
@@ -19,7 +19,7 @@ namespace atom {
 // Add support for node's "--debug" switch.
 class NodeDebugger : public net::test_server::StreamListenSocket::Delegate {
  public:
-  explicit NodeDebugger(v8::Isolate* isolate, uv_loop_t* loop_);
+  explicit NodeDebugger(v8::Isolate* isolate, uv_loop_t* loop_ = uv_default_loop());
   virtual ~NodeDebugger();
 
   bool IsRunning() const;
index ba61619..0e1a392 100755 (executable)
@@ -160,6 +160,10 @@ install -p -m 644 %{_out}/gen/widget.json %{buildroot}%{extension_path}
 # Need to remove the below line later
 install -p -m 644 %{_out}/lib/libwidget_plugin.so %{buildroot}%{_libdir}
 
+# pwrt_env file
+mkdir -p %{buildroot}%{_sysconfdir}/profile.d/
+install -p -m 755 %{_out}/gen/pwrt_env.sh %{buildroot}%{_sysconfdir}/profile.d/pwrt_env.sh
+
 # screen_plugin
 install -p -m 644 %{_out}/lib/libsplash_screen_plugin.so %{buildroot}%{extension_path}
 install -p -m 644 %{_out}/gen/splash_screen.json %{buildroot}%{extension_path}
@@ -200,3 +204,4 @@ rm -fr %{buildroot}
 # Need to remove these below lines later
 %attr(644,root,root) %{_libdir}/libwidget_plugin.so
 %attr(644,root,root) %{_libdir}/libsplash_screen_plugin.so
+%attr(755,root,root) %{_sysconfdir}/profile.d/pwrt_env.sh
diff --git a/tizen/pwrt_env.sh b/tizen/pwrt_env.sh
new file mode 100644 (file)
index 0000000..96cb594
--- /dev/null
@@ -0,0 +1 @@
+export PWRT_BLOCK_SINGLE_PROCESS=ON
\ No newline at end of file
index c32c287..f449862 100644 (file)
@@ -9,7 +9,6 @@
 #include "atom/app/atom_main_delegate.h"  // NOLINT
 #include "content/public/app/content_main.h"
 
-#include "atom/app/node_main.h"
 #include "atom/browser/atom_browser_main_parts.h"
 #include "atom/common/atom_command_line.h"
 #include "base/at_exit.h"
@@ -30,7 +29,7 @@
 
 namespace {
 
-bool block_single_process = false; // set to true to disable single process mode altogether
+const char *kBlockSingleProcess = "PWRT_BLOCK_SINGLE_PROCESS"; // set to ON to disable single process mode altogether
 
 // Default command line flags for all profiles and platforms
 const char* kDefaultCommandLineFlags[] = {
@@ -124,7 +123,7 @@ int main(int argc, char* argv[]) {
 
   int args_count = kElectronArgsCount;
   if (IsBrowserProcess()) {
-    if (!block_single_process && !isElectronWebApp()) {
+    if (!getenv(kBlockSingleProcess) && !isElectronWebApp()) {
       LOG(ERROR) << "will run in single process mode";
       tizen::is_single_process = true;
       args_count = kTizenWebappArgsCount;
index 4b54bf8..9fb3463 100644 (file)
@@ -4440,7 +4440,7 @@ void FreeEnvironment(Environment* env) {
 }
 
 
-inline int Start(Isolate* isolate, IsolateData* isolate_data, // not called
+inline int Start(Isolate* isolate, IsolateData* isolate_data,
                  int argc, const char* const* argv,
                  int exec_argc, const char* const* exec_argv) {
   HandleScope handle_scope(isolate);
@@ -4501,7 +4501,7 @@ inline int Start(Isolate* isolate, IsolateData* isolate_data, // not called
   return exit_code;
 }
 
-inline int Start(uv_loop_t* event_loop, // not called
+inline int Start(uv_loop_t* event_loop,
                  int argc, const char* const* argv,
                  int exec_argc, const char* const* exec_argv) {
   Isolate::CreateParams params;
@@ -4563,7 +4563,7 @@ int Start(int argc, char** argv) {
   // optional, in case you're wondering.
   int exec_argc;
   const char** exec_argv;
-  // Init(&argc, const_cast<const char**>(argv), &exec_argc, &exec_argv);
+  Init(&argc, const_cast<const char**>(argv), &exec_argc, &exec_argv);
 
 #if HAVE_OPENSSL
   if (const char* extra = secure_getenv("NODE_EXTRA_CA_CERTS"))
index bac44b0..5890706 100644 (file)
@@ -189,11 +189,11 @@ NODE_EXTERN extern bool g_standalone_mode;
 NODE_EXTERN extern bool g_upstream_node_mode;
 
 NODE_EXTERN int Start(int argc, char *argv[]);
-NODE_EXTERN void Init(int* argc, // apart from NodeBindings::Initialize(), no one seems to call
+NODE_EXTERN void Init(int* argc,
                       const char** argv,
                       int* exec_argc,
                       const char*** exec_argv,
-                      uv_loop_t* uv_loop_);
+                      uv_loop_t* uv_loop_ = uv_default_loop());
 
 class IsolateData;
 class Environment;
diff --git a/wrt.gyp b/wrt.gyp
index 272eb50..7fadfec 100644 (file)
--- a/wrt.gyp
+++ b/wrt.gyp
       ],
       'cflags': [ '-fPIC' ],
       'cflags_cc': [ '-fPIC' ],
+      'copies': [
+        {
+          'destination': '<(SHARED_INTERMEDIATE_DIR)',
+          'files': [
+            'tizen/pwrt_env.sh',
+          ],
+        },
+      ],
     },  # target wrt
     {
       'target_name': 'wrt-service',