return cgroup_write_node(path, CGROUP_FILE_NAME, pid);
}
+static int cpu_move_cgroup_foreach(pid_t pid, struct proc_app_info *pai, char *path)
+{
+ GSList *iter = NULL;
+ pid_t child_pid;
+
+ if (!pai)
+ return cgroup_write_node(path, CGROUP_FILE_NAME, pid);
+
+ cgroup_write_node(path, CGROUP_FILE_NAME, pai->main_pid);
+ if (pai->childs) {
+ gslist_for_each_item(iter, pai->childs) {
+ child_pid = GPOINTER_TO_PID(iter->data);
+ cgroup_write_node(path, CGROUP_FILE_NAME, child_pid);
+ }
+ }
+ return RESOURCED_ERROR_NONE;
+}
+
static bool cpu_quota_enabled(void)
{
return bCPUQuota;
if (pri == -1 || pri > CPU_DEFAULT_PRI)
setpriority(PRIO_PGRP, ps->pid, CPU_DEFAULT_PRI);
if (check_predefined(ps->pid) != SET_DEFAUT)
- cpu_move_cgroup(ps->pid, CPU_DEFAULT_CGROUP);
+ cpu_move_cgroup_foreach(ps->pid, ps->pai, CPU_DEFAULT_CGROUP);
return RESOURCED_ERROR_NONE;
}
_D("app background: pid = %d", ps->pid);
setpriority(PRIO_PGRP, ps->pid, CPU_BACKGROUND_PRI);
- cpu_move_cgroup(ps->pid, CPU_BACKGROUND_GROUP);
+ cpu_move_cgroup_foreach(ps->pid, ps->pai, CPU_BACKGROUND_GROUP);
return RESOURCED_ERROR_NONE;
}
if (CHECK_BIT(ps->pai->categories, PROC_BG_MEDIA))
return RESOURCED_ERROR_NONE;
_D("app suspend: pid = %d, appname = %s", ps->pid, ps->pai->appid);
- cpu_move_cgroup(ps->pid, CPU_CPUQUOTA_GROUP);
+ cpu_move_cgroup_foreach(ps->pid, ps->pai, CPU_CPUQUOTA_GROUP);
return RESOURCED_ERROR_NONE;
}
ret = proc_get_oom_score_adj(ps->pid, &oom_score_adj);
if (ret || oom_score_adj < OOMADJ_PREVIOUS_DEFAULT)
return RESOURCED_ERROR_NONE;
- cpu_move_cgroup(ps->pid, CPU_DEFAULT_CGROUP);
+ cpu_move_cgroup_foreach(ps->pid, ps->pai, CPU_DEFAULT_CGROUP);
return RESOURCED_ERROR_NONE;
}
struct proc_status *ps = (struct proc_status *)data;
assert(ps);
- cpu_move_cgroup(ps->pid, CPU_DEFAULT_CGROUP);
+ cpu_move_cgroup_foreach(ps->pid, ps->pai, CPU_DEFAULT_CGROUP);
return RESOURCED_ERROR_NONE;
}