proc: make new interface to change priority 54/212454/7
authorByungSoo Kim <bs1770.kim@samsung.com>
Fri, 11 Aug 2017 13:50:56 +0000 (22:50 +0900)
committerMichal Bloch <m.bloch@partner.samsung.com>
Wed, 27 Nov 2019 08:25:32 +0000 (08:25 +0000)
Systemd can support changing priority of system services
but in case application, no one can change priority.
It adds new interface in order to increase, decrease, reset priority of application
with priviledge.

Change-Id: I268c4ccb4faf8669e200f175691d3bfc8770c947
Signed-off-by: ByungSoo Kim <bs1770.kim@samsung.com>
src/common/dbus-names-local.h
src/proc-stat/proc-monitor.c

index a2baba8..6df39e3 100644 (file)
@@ -52,6 +52,7 @@
 #define SIGNAL_PROC_WATCHDOG            "ProcWatchdog"
 #define SIGNAL_PROC_SYSTEMSERVICE       "SystemService"
 #define SIGNAL_PROC_EXCLUDEAPPID        "ProcExcludeByAppid"
+#define SIGNAL_PROC_SET_PRIORITY        "ProcSetPriority"
 
 #define SIGNAL_OOM_SET_THRESHOLD        "SetThreshold"
 #define SIGNAL_OOM_SET_LEAVE_THRESHOLD  "SetLeaveThreshold"
index b6d6dab..08fcf8d 100644 (file)
@@ -28,6 +28,8 @@
 #include <sys/types.h>
 #include <unistd.h>
 #include <sys/mount.h>
+#include <sys/time.h>
+#include <sys/resource.h>
 
 #include "proc-main.h"
 #include "proc-monitor.h"
@@ -622,6 +624,27 @@ static void proc_dbus_exclude_appid_signal_handler(GVariant *params)
                return;
 }
 
+static void proc_dbus_set_priority_signal_handler(GVariant *params)
+{
+       char *str = NULL;
+       pid_t pid = -1;
+
+       do_expr_unless_g_variant_get_typechecked(return, params, "(&si)", &str, &pid);
+       if (!str || pid < 0) {
+               _D("there is no message");
+               return;
+       }
+
+       _D("pid (%d) requested to change priority (%s)", pid, str);
+       if (!strncmp(str, "high", sizeof "high"))
+               setpriority(PRIO_PGRP, pid, -5);
+       else if (!strncmp(str, "default", sizeof "default"))
+               setpriority(PRIO_PGRP, pid, 0);
+       else if (!strncmp(str, "low", sizeof "low"))
+               setpriority(PRIO_PGRP, pid, 1);
+       else
+               _W("Warning: invalid set priority request (%s)!", str);
+}
 
 static void proc_dbus_prelaunch_signal_handler(GVariant *params)
 {
@@ -1116,6 +1139,8 @@ static const struct d_bus_signal dbus_signals[] = {
            SIGNAL_PROC_SYSTEMSERVICE, proc_dbus_systemservice_handler, NULL},
        {RESOURCED_PATH_PROCESS, RESOURCED_INTERFACE_PROCESS,
            SIGNAL_PROC_EXCLUDEAPPID, proc_dbus_exclude_appid_signal_handler, NULL},
+       {RESOURCED_PATH_PROCESS, RESOURCED_INTERFACE_PROCESS,
+           SIGNAL_PROC_SET_PRIORITY, proc_dbus_set_priority_signal_handler, NULL},
 
        /* DEVICED DBUS */
        {DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY,