diff options
author | 2011-06-22 16:20:37 -0700 | |
---|---|---|
committer | 2011-07-08 10:11:08 -0700 | |
commit | 33eafef1a9ef508f7b1ae1edf4caf29b81a80255 (patch) | |
tree | 04dc8a4d34e5aeb78b35bf0ae3ae13e3146487f7 /libs/utils/Threads.cpp | |
parent | b75a798471342da5e4624048c5516773dfecf4ca (diff) |
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
Diffstat (limited to 'libs/utils/Threads.cpp')
-rw-r--r-- | libs/utils/Threads.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp index 50312e7bb7d3..6d5067b5145c 100644 --- a/libs/utils/Threads.cpp +++ b/libs/utils/Threads.cpp @@ -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 { /* |