#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>
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