Merge "Add C++ thread API androidGetThreadSchedulingGroup"

This commit is contained in:
Glenn Kasten 2011-08-29 14:38:52 -07:00 committed by Android (Google) Code Review
commit 940673f92e
2 changed files with 42 additions and 0 deletions

View File

@ -143,6 +143,13 @@ extern int androidSetThreadSchedulingGroup(pid_t tid, int grp);
// in either case errno is set. Thread ID zero means current thread.
extern int androidSetThreadPriority(pid_t tid, int prio);
// Get the current scheduling group of a particular thread. Normally returns
// one of the ANDROID_TGROUP constants other than ANDROID_TGROUP_DEFAULT.
// Returns ANDROID_TGROUP_DEFAULT if no pthread support (e.g. on host) or if
// scheduling groups are disabled. Returns INVALID_OPERATION if unexpected error.
// Thread ID zero means current thread.
extern int androidGetThreadSchedulingGroup(pid_t tid);
#ifdef __cplusplus
}
#endif

View File

@ -368,6 +368,41 @@ int androidSetThreadPriority(pid_t tid, int pri)
return rc;
}
int androidGetThreadSchedulingGroup(pid_t tid)
{
int ret = ANDROID_TGROUP_DEFAULT;
#if defined(HAVE_PTHREADS)
// convention is to not call get/set_sched_policy methods if disabled by property
pthread_once(&gDoSchedulingGroupOnce, checkDoSchedulingGroup);
if (gDoSchedulingGroup) {
SchedPolicy policy;
// get_sched_policy does not support tid == 0
if (tid == 0) {
tid = androidGetTid();
}
if (get_sched_policy(tid, &policy) < 0) {
ret = INVALID_OPERATION;
} else {
switch (policy) {
case SP_BACKGROUND:
ret = ANDROID_TGROUP_BG_NONINTERACT;
break;
case SP_FOREGROUND:
ret = ANDROID_TGROUP_FG_BOOST;
break;
default:
// should not happen, as enum SchedPolicy does not have any other values
ret = INVALID_OPERATION;
break;
}
}
}
#endif
return ret;
}
namespace android {
/*