Loading include/utils/threads.h +7 −0 Original line number Original line Diff line number Diff line Loading @@ -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 Loading libs/utils/Threads.cpp +35 −0 Original line number Original line Diff line number Diff line Loading @@ -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 { /* /* Loading Loading
include/utils/threads.h +7 −0 Original line number Original line Diff line number Diff line Loading @@ -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 Loading
libs/utils/Threads.cpp +35 −0 Original line number Original line Diff line number Diff line Loading @@ -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 { /* /* Loading