[Service] Apply node worker for standalone model 38/244938/3
authorDongHyun Song <dh81.song@samsung.com>
Mon, 28 Sep 2020 06:32:06 +0000 (15:32 +0900)
committerjaekuk lee <juku1999@samsung.com>
Mon, 5 Oct 2020 10:09:39 +0000 (10:09 +0000)
This change is implemented for

 1) unify source code with global model
 2) isolate v8 variable scope from main thread
   - standalone service application cannot get main global variable
     of service_manaer / service_runner

There is no noticeable memory increase with node worker.

Change-Id: I7bb4576026ce326a3903987c537810093db028b4
Signed-off-by: DongHyun Song <dh81.song@samsung.com>
wrt_app/common/service_manager.ts
wrt_app/service/main.ts

index 3038364..c4b2940 100644 (file)
@@ -5,16 +5,11 @@ interface WorkerMap {
   [id: string]: any;
 }
 let workers: WorkerMap = {};
-let runner: any;
 
 global.serviceType = wrt.getServiceModel();
 
-function isStandalone() {
-  return global.serviceType === 'STANDALONE';
-}
-
-function isGlobalService() {
-  return global.serviceType === 'DAEMON';
+function isServiceApplication() {
+  return global.serviceType !== 'UI';
 }
 
 function createWorker(id: string, startService: string, filename: string) {
@@ -37,7 +32,7 @@ function terminateWorker(id: string, delay: number) {
     delete workers[id];
     let runningServices = Object.keys(workers).length;
     console.log('Running services : ' + runningServices);
-    if (runningServices === 0 && isGlobalService()) {
+    if (runningServices === 0 && isServiceApplication()) {
       process.exit();
     }
   }
@@ -46,29 +41,15 @@ function terminateWorker(id: string, delay: number) {
 
 export function startService(id: string, filename: string) {
   console.log(`startService - ${id}`);
-  if (isStandalone()) {
-    runner = require('../common/service_runner');
-    runner.start(id, filename);
-  } else {
-    if (isMainThread) {
-      let startService = `${__dirname}/service_runner.js`;
-      createWorker(id, startService, filename);
-    }
+  if (isMainThread) {
+    let startService = `${__dirname}/service_runner.js`;
+    createWorker(id, startService, filename);
   }
 }
 
 export function stopService(id: string) {
   console.log(`stopService - ${id}`);
-  if (isStandalone()) {
-    if (!runner) {
-      console.log('runner instance is null in standalone mode');
-      return;
-    }
-    runner.stop(id);
-    setTimeout(() => process.exit(), 500);
-  } else {
-    terminateWorker(id, 500);
-  }
+  terminateWorker(id, 500);
 }
 
 export function handleBuiltinService(serviceId: string, serviceName: string) {
index b0c371a..c64591e 100755 (executable)
@@ -27,9 +27,6 @@ wrt.on('start-service', (event: any, internal_id: string) => {
 
 wrt.on('stop-service', (event: any, internal_id: string) => {
   ServiceManager.stopService(internal_id);
-  if (wrt.getServiceModel() === 'STANDALONE') {
-    setTimeout(() => {process.exit()}, 10);
-  }
 });
 
 wrt.on('builtin-service', (event: any, internal_id: string, service_name: string) => {