Add functions for setting VIP process on the product TV binary 89/93489/2 accepted/tizen/common/20161025.155132 submit/tizen/20161025.104308 submit/tizen_3.0_common/20161104.104000
authorYong Yeon Kim <yy9875.kim@samsung.com>
Mon, 24 Oct 2016 12:29:23 +0000 (21:29 +0900)
committerYong Yeon Kim <yy9875.kim@samsung.com>
Mon, 24 Oct 2016 12:35:57 +0000 (21:35 +0900)
Change-Id: I38dbb8729104b12ce02f216128d38a0b8490eef1

lib/media-util-register.c
packaging/media-server.spec
src/common/include/media-common-utils.h
src/common/media-common-utils.c
src/scanner-v2/media-scanner-v2.c
src/server/media-server-main.c

index 54de79f..2fa50ec 100755 (executable)
@@ -247,7 +247,6 @@ gboolean _read_socket(GIOChannel *src, GIOCondition condition, gpointer data)
        MSAPI_DBG("result :%d", req_result.result);
        MSAPI_DBG("request_type :%d", req_result.request_type);
 
-ERROR:
        source = ((media_callback_data *)data)->source;
        user_callback = ((media_callback_data *)data)->user_callback;
        user_data = ((media_callback_data *)data)->user_data;
index 70eaf81..3539972 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       media-server
 Summary:    A server for media content management
-Version:    0.3.4
+Version:    0.3.5
 Release:    0
 Group:      Multimedia/Service
 License:    Apache-2.0
@@ -73,7 +73,7 @@ cp po/* .
 %restore_fcommon
 %endif
 %if 0%{?product_tv}
-export CFLAGS="$CFLAGS -D_USE_SENIOR_MODE -D_USE_RECORDED_CONTENT -D_USE_SUSPEND_MODE"
+export CFLAGS="$CFLAGS -D_USE_SENIOR_MODE -D_USE_RECORDED_CONTENT -D_USE_SUSPEND_MODE -D_SET_VIP_PROCESS"
 %else
 %if "%{?profile}" == "mobile"
 export CFLAGS="$CFLAGS -D_USE_MULTI_USER -D_USE_META_UPDATE -D_USE_DEVICED_DBUS -D_USE_SDCARD"
index 754580b..1ccbcf7 100755 (executable)
@@ -59,7 +59,9 @@ int ms_set_power_mode(ms_db_status_type_t status);
 void ms_trim_dir_path(char *dir_path);
 bool ms_check_folder_path(const char *folder_path);
 int ms_check_size_mediadb(uid_t uid, double *db_size);
-
+#ifdef _SET_VIP_PROCESS
+int ms_set_vip_process(void);
+#endif
 
 #endif/*_MEDIA_SERVER_UTILS_H__*/
 
index 461640a..5462a75 100755 (executable)
@@ -32,6 +32,9 @@
 #include <dbus/dbus-glib-lowlevel.h>
 #include <sys/statvfs.h>
 #include <sys/stat.h>
+#ifdef _SET_VIP_PROCESS
+#include <sys/prctl.h>
+#endif
 #include <system_info.h>
 #include <dd-display.h>
 
@@ -811,4 +814,75 @@ int ms_check_size_mediadb(uid_t uid, double *db_size)
        return ret;
 }
 
+#ifdef _SET_VIP_PROCESS
+#define PROC_OOM_SCORE_ADJ_PATH                "/proc/%d/oom_score_adj"
+#define VIP_OOM_SCORE_ADJ                      (-1000)
+#define PROC_NAME_MAX 1024
+#define PROC_BUF_MAX 64
+
+static int ms_get_cmdline_from_proc(pid_t pid, char *cmdline)
+{
+       char buf[PROC_BUF_MAX];
+       char cmdline_buf[PROC_NAME_MAX];
+       char *filename;
+       FILE *fp;
+
+       snprintf(buf, sizeof(buf), "/proc/%d/cmdline", pid);
+       fp = fopen(buf, "r");
+       if (fp == NULL)
+               return MS_MEDIA_ERR_INTERNAL;
+
+       if (fgets(cmdline_buf, PROC_NAME_MAX-1, fp) == NULL) {
+               fclose(fp);
+               return MS_MEDIA_ERR_INTERNAL;
+       }
+       fclose(fp);
+
+       filename = strrchr(cmdline_buf, '/');
+       if (filename == NULL)
+               filename = cmdline_buf;
+       else
+               filename = filename + 1;
+
+       strncpy(cmdline, filename, PROC_NAME_MAX-1);
+
+       return MS_MEDIA_ERR_NONE;
+}
+
+int ms_set_vip_process(void)
+{
+       char buf[100] = {0};
+       int id = 0;
+       static pid_t pid = 0;
+       static char process_name[PROC_NAME_MAX] = {0};
+       static char *appid = NULL;
+
+       /* Get Pid */
+       pid = getpid();
+       if (ms_get_cmdline_from_proc(pid, process_name)) {
+               MS_DBG_ERR("%s: Read process name failed pid[%d]\n", __func__, pid);
+               return MS_MEDIA_ERR_INTERNAL;
+       }
+       appid = process_name;
 
+       MS_DBG("Process name[%s]:Pid[%d]", appid, pid);
+
+       if (prctl(PR_GET_DUMPABLE) == 0)
+               prctl(PR_SET_DUMPABLE, 1);
+
+       snprintf(buf, sizeof(buf), PROC_OOM_SCORE_ADJ_PATH, pid);
+       id = open(buf, O_WRONLY, 0777);
+       if (id < 0) {
+               MS_DBG_ERR("fopen %s failed errno:%d", buf, errno);
+               return MS_MEDIA_ERR_INTERNAL;
+       }
+       snprintf(buf, sizeof(buf), "%d", VIP_OOM_SCORE_ADJ);
+       if (write(id, buf, strlen(buf)) < 0) {
+               MS_DBG_ERR("write() failed errno=%d", errno);
+               close(id);
+               return MS_MEDIA_ERR_INTERNAL;
+       }
+       close(id);
+       return MS_MEDIA_ERR_NONE;
+}
+#endif
index 5384e4b..10358ec 100755 (executable)
@@ -231,6 +231,11 @@ int main(int argc, char **argv)
 
        MS_DBG_ERR("[No-Error] ========== Scanner is running  ========");
 
+#ifdef _SET_VIP_PROCESS
+       /*Set VIP Process*/
+       ms_set_vip_process();
+#endif
+
        g_main_loop_run(scanner_mainloop2);
 
        __msc_remove_event_receiver();
index c0482eb..b9e26b4 100644 (file)
@@ -405,6 +405,11 @@ int main(int argc, char **argv)
        if (!ms_config_set_int(MS_SERVER_STATUS, 1))
                MS_DBG_ERR("Fail to change sever status");
 
+#ifdef _SET_VIP_PROCESS
+       /*Set VIP Process*/
+       ms_set_vip_process();
+#endif
+
        g_main_loop_run(mainloop);
 
        g_thread_join(db_thread);