forked from enlightenment/enlightenment
also adjust child process nice levels too.
SVN revision: 60942
This commit is contained in:
parent
cbd40a06ba
commit
9b540f77ca
|
@ -976,38 +976,78 @@ e_border_hide(E_Border *bd,
|
||||||
bd->post_show = 0;
|
bd->post_show = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_pri_adj(int pid, int set, int adj, Eina_Bool use_adj, Eina_Bool adj_children, Eina_Bool do_children)
|
||||||
|
{
|
||||||
|
int newpri = set;
|
||||||
|
|
||||||
|
if (use_adj) newpri = getpriority(PRIO_PROCESS, pid) + adj;
|
||||||
|
setpriority(PRIO_PROCESS, pid, newpri);
|
||||||
|
// shouldnt need to do this as default ionice class is "none" (0), and
|
||||||
|
// this inherits io priority FROM nice level
|
||||||
|
// ioprio_set(IOPRIO_WHO_PROCESS, pid,
|
||||||
|
// IOPRIO_PRIO_VALUE(2, 5));
|
||||||
|
if (do_children)
|
||||||
|
{
|
||||||
|
Eina_List *files;
|
||||||
|
char *file, buf[PATH_MAX];
|
||||||
|
FILE *f;
|
||||||
|
int pid2, ppid;
|
||||||
|
|
||||||
|
// yes - this is /proc specific... so this may not work on some
|
||||||
|
// os's - works on linux. too bad for others.
|
||||||
|
files = ecore_file_ls("/proc");
|
||||||
|
EINA_LIST_FREE(files, file)
|
||||||
|
{
|
||||||
|
if (isdigit(file[0]))
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "/proc/%s/stat", file);
|
||||||
|
f = fopen(buf, "r");
|
||||||
|
if (f)
|
||||||
|
{
|
||||||
|
pid2 = -1;
|
||||||
|
ppid = -1;
|
||||||
|
if (fscanf(f, "%i %*s %*s %i %*s", &pid2, &ppid) == 2)
|
||||||
|
{
|
||||||
|
fclose(f);
|
||||||
|
if (ppid == pid)
|
||||||
|
{
|
||||||
|
if (adj_children)
|
||||||
|
_pri_adj(pid2, set, adj, EINA_TRUE,
|
||||||
|
adj_children, do_children);
|
||||||
|
else
|
||||||
|
_pri_adj(pid2, set, adj, use_adj,
|
||||||
|
adj_children, do_children);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else fclose(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_border_pri_raise(E_Border *bd)
|
_e_border_pri_raise(E_Border *bd)
|
||||||
{
|
{
|
||||||
if (bd->client.netwm.pid > 0)
|
if (bd->client.netwm.pid <= 0) return;
|
||||||
{
|
_pri_adj(bd->client.netwm.pid,
|
||||||
int newpri;
|
e_config->priority - 1, -1, EINA_FALSE,
|
||||||
|
EINA_TRUE, EINA_TRUE);
|
||||||
// newpri = getpriority(PRIO_PROCESS, bd->client.netwm.pid) - 1;
|
// printf("WIN: pid %i, title %s (HI!!!!!!!!!!!!!!!!!!)\n",
|
||||||
newpri = e_config->priority - 1;
|
// bd->client.netwm.pid, e_border_name_get(bd));
|
||||||
setpriority(PRIO_PROCESS, bd->client.netwm.pid, newpri);
|
|
||||||
printf("WIN: pid %i, title %s TO: %i (HI!!!)\n",
|
|
||||||
bd->client.netwm.pid,
|
|
||||||
e_border_name_get(bd),
|
|
||||||
newpri);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_border_pri_norm(E_Border *bd)
|
_e_border_pri_norm(E_Border *bd)
|
||||||
{
|
{
|
||||||
if (bd->client.netwm.pid > 0)
|
if (bd->client.netwm.pid <= 0) return;
|
||||||
{
|
_pri_adj(bd->client.netwm.pid,
|
||||||
int newpri;
|
e_config->priority, 1, EINA_FALSE,
|
||||||
|
EINA_TRUE, EINA_TRUE);
|
||||||
// newpri = getpriority(PRIO_PROCESS, bd->client.netwm.pid) + 1;
|
// printf("WIN: pid %i, title %s (NORMAL)\n",
|
||||||
newpri = e_config->priority;
|
// bd->client.netwm.pid, e_border_name_get(bd));
|
||||||
setpriority(PRIO_PROCESS, bd->client.netwm.pid, newpri);
|
|
||||||
printf("WIN: pid %i, title %s TO: %i\n",
|
|
||||||
bd->client.netwm.pid,
|
|
||||||
e_border_name_get(bd),
|
|
||||||
newpri);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue