Merge "Update get_sched_policy to return TOP_APP correctly." into nyc-dev
This commit is contained in:
commit
15fea7ae1a
1 changed files with 24 additions and 7 deletions
|
|
@ -148,7 +148,7 @@ static void __initialize(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Try to get the scheduler group.
|
* Returns the path under the requested cgroup subsystem (if it exists)
|
||||||
*
|
*
|
||||||
* The data from /proc/<pid>/cgroup looks (something) like:
|
* The data from /proc/<pid>/cgroup looks (something) like:
|
||||||
* 2:cpu:/bg_non_interactive
|
* 2:cpu:/bg_non_interactive
|
||||||
|
|
@ -158,7 +158,7 @@ static void __initialize(void) {
|
||||||
* the default cgroup. If the string is longer than "bufLen", the string
|
* the default cgroup. If the string is longer than "bufLen", the string
|
||||||
* will be truncated.
|
* will be truncated.
|
||||||
*/
|
*/
|
||||||
static int getSchedulerGroup(int tid, char* buf, size_t bufLen)
|
static int getCGroupSubsys(int tid, const char* subsys, char* buf, size_t bufLen)
|
||||||
{
|
{
|
||||||
#if defined(__ANDROID__)
|
#if defined(__ANDROID__)
|
||||||
char pathBuf[32];
|
char pathBuf[32];
|
||||||
|
|
@ -172,7 +172,7 @@ static int getSchedulerGroup(int tid, char* buf, size_t bufLen)
|
||||||
|
|
||||||
while(fgets(lineBuf, sizeof(lineBuf) -1, fp)) {
|
while(fgets(lineBuf, sizeof(lineBuf) -1, fp)) {
|
||||||
char *next = lineBuf;
|
char *next = lineBuf;
|
||||||
char *subsys;
|
char *found_subsys;
|
||||||
char *grp;
|
char *grp;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
|
|
@ -181,11 +181,11 @@ static int getSchedulerGroup(int tid, char* buf, size_t bufLen)
|
||||||
goto out_bad_data;
|
goto out_bad_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(subsys = strsep(&next, ":"))) {
|
if (!(found_subsys = strsep(&next, ":"))) {
|
||||||
goto out_bad_data;
|
goto out_bad_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(subsys, "cpu")) {
|
if (strcmp(found_subsys, subsys)) {
|
||||||
/* Not the subsys we're looking for */
|
/* Not the subsys we're looking for */
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -206,7 +206,7 @@ static int getSchedulerGroup(int tid, char* buf, size_t bufLen)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SLOGE("Failed to find cpu subsys");
|
SLOGE("Failed to find subsys %s", subsys);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return -1;
|
return -1;
|
||||||
out_bad_data:
|
out_bad_data:
|
||||||
|
|
@ -228,7 +228,23 @@ int get_sched_policy(int tid, SchedPolicy *policy)
|
||||||
|
|
||||||
if (__sys_supports_schedgroups) {
|
if (__sys_supports_schedgroups) {
|
||||||
char grpBuf[32];
|
char grpBuf[32];
|
||||||
if (getSchedulerGroup(tid, grpBuf, sizeof(grpBuf)) < 0)
|
#ifdef USE_CPUSETS
|
||||||
|
if (getCGroupSubsys(tid, "cpuset", grpBuf, sizeof(grpBuf)) < 0)
|
||||||
|
return -1;
|
||||||
|
if (grpBuf[0] == '\0') {
|
||||||
|
*policy = SP_FOREGROUND;
|
||||||
|
} else if (!strcmp(grpBuf, "foreground")) {
|
||||||
|
*policy = SP_FOREGROUND;
|
||||||
|
} else if (!strcmp(grpBuf, "background")) {
|
||||||
|
*policy = SP_BACKGROUND;
|
||||||
|
} else if (!strcmp(grpBuf, "top-app")) {
|
||||||
|
*policy = SP_TOP_APP;
|
||||||
|
} else {
|
||||||
|
errno = ERANGE;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (getCGroupSubsys(tid, "cpu", grpBuf, sizeof(grpBuf)) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (grpBuf[0] == '\0') {
|
if (grpBuf[0] == '\0') {
|
||||||
*policy = SP_FOREGROUND;
|
*policy = SP_FOREGROUND;
|
||||||
|
|
@ -238,6 +254,7 @@ int get_sched_policy(int tid, SchedPolicy *policy)
|
||||||
errno = ERANGE;
|
errno = ERANGE;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
int rc = sched_getscheduler(tid);
|
int rc = sched_getscheduler(tid);
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue