diff options
| author | Glenn Kasten <gkasten@google.com> | 2012-03-16 09:43:19 -0700 |
|---|---|---|
| committer | Glenn Kasten <gkasten@google.com> | 2012-04-20 10:31:50 -0700 |
| commit | 69bfb1f099164ae7ba44b5d0f7ba7c47cbbafd4d (patch) | |
| tree | 23bd2952b82061be604ddc9d2945b308c47c42a2 | |
| parent | c28cbb2c5abe9e93a75185dc7c9e4925a0f9a87a (diff) | |
| download | system_core-69bfb1f099164ae7ba44b5d0f7ba7c47cbbafd4d.zip system_core-69bfb1f099164ae7ba44b5d0f7ba7c47cbbafd4d.tar.gz system_core-69bfb1f099164ae7ba44b5d0f7ba7c47cbbafd4d.tar.bz2 | |
Scheduling group cleanup - add comment, SP_DEFAULT
Also tid == 0 maps to gettid() on platforms that support it.
This is needed by mediaserver code that was formerly using
the old C++ API.
Change-Id: I8baaa3e42315c9b924cec26b6da01e7cb69e0078
| -rw-r--r-- | include/cutils/sched_policy.h | 5 | ||||
| -rw-r--r-- | libcutils/sched_policy.c | 21 |
2 files changed, 26 insertions, 0 deletions
diff --git a/include/cutils/sched_policy.h b/include/cutils/sched_policy.h index 753a08c..c6e4fc4 100644 --- a/include/cutils/sched_policy.h +++ b/include/cutils/sched_policy.h @@ -21,21 +21,26 @@ extern "C" { #endif +/* Keep in sync with THREAD_GROUP_* in frameworks/base/core/java/android/os/Process.java */ typedef enum { + SP_DEFAULT = -1, SP_BACKGROUND = 0, SP_FOREGROUND = 1, SP_CNT, SP_MAX = SP_CNT - 1, + SP_SYSTEM_DEFAULT = SP_FOREGROUND, } SchedPolicy; /* Assign thread tid to the cgroup associated with the specified policy. * If the thread is a thread group leader, that is it's gettid() == getpid(), * then the other threads in the same thread group are _not_ affected. + * On platforms which support gettid(), zero tid means current thread. * Return value: 0 for success, or -errno for error. */ extern int set_sched_policy(int tid, SchedPolicy policy); /* Return the policy associated with the cgroup of thread tid via policy pointer. + * On platforms which support gettid(), zero tid means current thread. * Return value: 0 for success, or -1 for error and set errno. */ extern int get_sched_policy(int tid, SchedPolicy *policy); diff --git a/libcutils/sched_policy.c b/libcutils/sched_policy.c index 35d362a..345532b 100644 --- a/libcutils/sched_policy.c +++ b/libcutils/sched_policy.c @@ -189,6 +189,11 @@ static int getSchedulerGroup(int tid, char* buf, size_t bufLen) int get_sched_policy(int tid, SchedPolicy *policy) { +#ifdef HAVE_GETTID + if (tid == 0) { + tid = gettid(); + } +#endif pthread_once(&the_once, __initialize); if (__sys_supports_schedgroups) { @@ -219,8 +224,23 @@ int get_sched_policy(int tid, SchedPolicy *policy) return 0; } +/* Re-map SP_DEFAULT to the system default policy, and leave other values unchanged. + * Call this any place a SchedPolicy is used as an input parameter. + * Returns the possibly re-mapped policy. + */ +static inline SchedPolicy _policy(SchedPolicy p) +{ + return p == SP_DEFAULT ? SP_SYSTEM_DEFAULT : p; +} + int set_sched_policy(int tid, SchedPolicy policy) { +#ifdef HAVE_GETTID + if (tid == 0) { + tid = gettid(); + } +#endif + policy = _policy(policy); pthread_once(&the_once, __initialize); #if POLICY_DEBUG @@ -275,6 +295,7 @@ int set_sched_policy(int tid, SchedPolicy policy) const char *get_sched_policy_name(SchedPolicy policy) { + policy = _policy(policy); static const char * const strings[SP_CNT] = { [SP_BACKGROUND] = "bg", [SP_FOREGROUND] = "fg", |
