Add C++ thread API androidGetThreadSchedulingGroup

This API is intended for applications that need to read a thread's
scheduling group, while using the higher-level (C++) family of thread APIs.

Change-Id: I5e58017f74c3989b20b5b1cc2bc4483c95720520
This commit is contained in:
Glenn Kasten 2011-06-22 16:20:37 -07:00
parent 555b49d09b
commit 4fb2427591
2 changed files with 42 additions and 0 deletions

View File

@ -142,6 +142,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

@ -367,6 +367,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 {
/*