diff options
author | Dianne Hackborn <hackbod@google.com> | 2010-09-07 11:27:26 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-09-07 11:27:26 -0700 |
commit | bd89ff87d21461700f0e8ae37ba11c9a4070113f (patch) | |
tree | f078dbc62e561374600d078dd872d153c354958d /libs | |
parent | 5ad6c91cef1c0f3094ec8dcf3220a948d1c34e71 (diff) | |
parent | 7b0d45c3465304ccdd29ad20f43270ffd5a6aec0 (diff) | |
download | frameworks_native-bd89ff87d21461700f0e8ae37ba11c9a4070113f.zip frameworks_native-bd89ff87d21461700f0e8ae37ba11c9a4070113f.tar.gz frameworks_native-bd89ff87d21461700f0e8ae37ba11c9a4070113f.tar.bz2 |
Merge "Add system property to turn off scheduling groups." into gingerbread
Diffstat (limited to 'libs')
-rw-r--r-- | libs/utils/Threads.cpp | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp index 2b1f490..c8de1f5 100644 --- a/libs/utils/Threads.cpp +++ b/libs/utils/Threads.cpp @@ -21,6 +21,7 @@ #include <utils/Log.h> #include <cutils/sched_policy.h> +#include <cutils/properties.h> #include <stdio.h> #include <stdlib.h> @@ -57,7 +58,7 @@ using namespace android; // ---------------------------------------------------------------------------- /* - * Create and run a new thead. + * Create and run a new thread. * * We create it "detached", so it cleans up after itself. */ @@ -280,6 +281,20 @@ pid_t androidGetTid() #endif } +static pthread_once_t gDoSchedulingGroupOnce = PTHREAD_ONCE_INIT; +static bool gDoSchedulingGroup = true; + +static void checkDoSchedulingGroup(void) { + char buf[PROPERTY_VALUE_MAX]; + int len = property_get("debug.sys.noschedgroups", buf, ""); + if (len > 0) { + int temp; + if (sscanf(buf, "%d", &temp) == 1) { + gDoSchedulingGroup = temp == 0; + } + } +} + int androidSetThreadSchedulingGroup(pid_t tid, int grp) { if (grp > ANDROID_TGROUP_MAX || grp < 0) { @@ -287,9 +302,12 @@ int androidSetThreadSchedulingGroup(pid_t tid, int grp) } #if defined(HAVE_PTHREADS) - if (set_sched_policy(tid, (grp == ANDROID_TGROUP_BG_NONINTERACT) ? - SP_BACKGROUND : SP_FOREGROUND)) { - return PERMISSION_DENIED; + pthread_once(&gDoSchedulingGroupOnce, checkDoSchedulingGroup); + if (gDoSchedulingGroup) { + if (set_sched_policy(tid, (grp == ANDROID_TGROUP_BG_NONINTERACT) ? + SP_BACKGROUND : SP_FOREGROUND)) { + return PERMISSION_DENIED; + } } #endif @@ -303,10 +321,13 @@ int androidSetThreadPriority(pid_t tid, int pri) #if defined(HAVE_PTHREADS) int lasterr = 0; - if (pri >= ANDROID_PRIORITY_BACKGROUND) { - rc = set_sched_policy(tid, SP_BACKGROUND); - } else if (getpriority(PRIO_PROCESS, tid) >= ANDROID_PRIORITY_BACKGROUND) { - rc = set_sched_policy(tid, SP_FOREGROUND); + pthread_once(&gDoSchedulingGroupOnce, checkDoSchedulingGroup); + if (gDoSchedulingGroup) { + if (pri >= ANDROID_PRIORITY_BACKGROUND) { + rc = set_sched_policy(tid, SP_BACKGROUND); + } else if (getpriority(PRIO_PROCESS, tid) >= ANDROID_PRIORITY_BACKGROUND) { + rc = set_sched_policy(tid, SP_FOREGROUND); + } } if (rc) { |