am 510951e9: am a8512a71: Always set the scheduling group when starting a new thread.
Merge commit '510951e98bdb861130f38c087956cd05e0b41dcd' * commit '510951e98bdb861130f38c087956cd05e0b41dcd': Always set the scheduling group when starting a new thread.
This commit is contained in:
commit
4181bd66fc
@ -65,6 +65,20 @@ using namespace android;
|
||||
|
||||
typedef void* (*android_pthread_entry)(void*);
|
||||
|
||||
static pthread_once_t gDoSchedulingGroupOnce = PTHREAD_ONCE_INIT;
|
||||
static bool gDoSchedulingGroup = true;
|
||||
|
||||
static void checkDoSchedulingGroup(void) {
|
||||
char buf[PROPERTY_VALUE_MAX];
|
||||
int len = property_get("debug.sys.noschedgroups", buf, "");
|
||||
if (len > 0) {
|
||||
int temp;
|
||||
if (sscanf(buf, "%d", &temp) == 1) {
|
||||
gDoSchedulingGroup = temp == 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct thread_data_t {
|
||||
thread_func_t entryFunction;
|
||||
void* userData;
|
||||
@ -80,6 +94,15 @@ struct thread_data_t {
|
||||
char * name = t->threadName;
|
||||
delete t;
|
||||
setpriority(PRIO_PROCESS, 0, prio);
|
||||
pthread_once(&gDoSchedulingGroupOnce, checkDoSchedulingGroup);
|
||||
if (gDoSchedulingGroup) {
|
||||
if (prio >= ANDROID_PRIORITY_BACKGROUND) {
|
||||
set_sched_policy(androidGetTid(), SP_BACKGROUND);
|
||||
} else {
|
||||
set_sched_policy(androidGetTid(), SP_FOREGROUND);
|
||||
}
|
||||
}
|
||||
|
||||
if (name) {
|
||||
#if defined(HAVE_PRCTL)
|
||||
// Mac OS doesn't have this, and we build libutil for the host too
|
||||
@ -281,22 +304,6 @@ pid_t androidGetTid()
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(HAVE_PTHREADS)
|
||||
static pthread_once_t gDoSchedulingGroupOnce = PTHREAD_ONCE_INIT;
|
||||
static bool gDoSchedulingGroup = true;
|
||||
|
||||
static void checkDoSchedulingGroup(void) {
|
||||
char buf[PROPERTY_VALUE_MAX];
|
||||
int len = property_get("debug.sys.noschedgroups", buf, "");
|
||||
if (len > 0) {
|
||||
int temp;
|
||||
if (sscanf(buf, "%d", &temp) == 1) {
|
||||
gDoSchedulingGroup = temp == 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
int androidSetThreadSchedulingGroup(pid_t tid, int grp)
|
||||
{
|
||||
if (grp > ANDROID_TGROUP_MAX || grp < 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user