Merge "Add C++ thread API androidGetThreadSchedulingGroup"
This commit is contained in:
@@ -143,6 +143,13 @@ extern int androidSetThreadSchedulingGroup(pid_t tid, int grp);
|
|||||||
// in either case errno is set. Thread ID zero means current thread.
|
// in either case errno is set. Thread ID zero means current thread.
|
||||||
extern int androidSetThreadPriority(pid_t tid, int prio);
|
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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -368,6 +368,41 @@ int androidSetThreadPriority(pid_t tid, int pri)
|
|||||||
return rc;
|
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 {
|
namespace android {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user