summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2011-06-22 16:20:37 -0700
committerGlenn Kasten <gkasten@google.com>2011-07-08 10:11:08 -0700
commit4fb24275919aab88d0ce346f530c9911d6c08422 (patch)
tree4c59794144a5af73950cfc924ed0fbea3999d835 /libs
parent555b49d09bfe6ea2fc4bae9461f083cd6f8a1330 (diff)
downloadframeworks_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.cpp35
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 {
/*