diff options
author | Glenn Kasten <gkasten@google.com> | 2011-06-22 16:20:37 -0700 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2011-07-08 10:11:08 -0700 |
commit | 4fb24275919aab88d0ce346f530c9911d6c08422 (patch) | |
tree | 4c59794144a5af73950cfc924ed0fbea3999d835 /libs | |
parent | 555b49d09bfe6ea2fc4bae9461f083cd6f8a1330 (diff) | |
download | frameworks_native-4fb24275919aab88d0ce346f530c9911d6c08422.zip frameworks_native-4fb24275919aab88d0ce346f530c9911d6c08422.tar.gz frameworks_native-4fb24275919aab88d0ce346f530c9911d6c08422.tar.bz2 |
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')
-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 50312e7..6d5067b 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 { /* |