Loading libs/utils/Threads.cpp +29 −8 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <utils/Log.h> #include <cutils/sched_policy.h> #include <cutils/properties.h> #include <stdio.h> #include <stdlib.h> Loading Loading @@ -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. */ Loading Loading @@ -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) { Loading @@ -287,10 +302,13 @@ int androidSetThreadSchedulingGroup(pid_t tid, int grp) } #if defined(HAVE_PTHREADS) pthread_once(&gDoSchedulingGroupOnce, checkDoSchedulingGroup); if (gDoSchedulingGroup) { if (set_sched_policy(tid, (grp == ANDROID_TGROUP_BG_NONINTERACT) ? SP_BACKGROUND : SP_FOREGROUND)) { return PERMISSION_DENIED; } } #endif return NO_ERROR; Loading @@ -303,11 +321,14 @@ int androidSetThreadPriority(pid_t tid, int pri) #if defined(HAVE_PTHREADS) int lasterr = 0; 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) { lasterr = errno; Loading Loading
libs/utils/Threads.cpp +29 −8 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <utils/Log.h> #include <cutils/sched_policy.h> #include <cutils/properties.h> #include <stdio.h> #include <stdlib.h> Loading Loading @@ -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. */ Loading Loading @@ -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) { Loading @@ -287,10 +302,13 @@ int androidSetThreadSchedulingGroup(pid_t tid, int grp) } #if defined(HAVE_PTHREADS) pthread_once(&gDoSchedulingGroupOnce, checkDoSchedulingGroup); if (gDoSchedulingGroup) { if (set_sched_policy(tid, (grp == ANDROID_TGROUP_BG_NONINTERACT) ? SP_BACKGROUND : SP_FOREGROUND)) { return PERMISSION_DENIED; } } #endif return NO_ERROR; Loading @@ -303,11 +321,14 @@ int androidSetThreadPriority(pid_t tid, int pri) #if defined(HAVE_PTHREADS) int lasterr = 0; 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) { lasterr = errno; Loading