diff options
Diffstat (limited to 'libutils/Threads.cpp')
-rw-r--r-- | libutils/Threads.cpp | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/libutils/Threads.cpp b/libutils/Threads.cpp index 540dcf49db..55eadb07a6 100644 --- a/libutils/Threads.cpp +++ b/libutils/Threads.cpp @@ -302,8 +302,8 @@ void androidSetCreateThreadFunc(android_create_thread_fn func) } #if defined(__ANDROID__) -int androidSetThreadPriority(pid_t tid, int pri) -{ +namespace { +int androidSetThreadPriorityInternal(pid_t tid, int pri, bool change_policy) { int rc = 0; int lasterr = 0; int curr_pri = getpriority(PRIO_PROCESS, tid); @@ -312,17 +312,19 @@ int androidSetThreadPriority(pid_t tid, int pri) return rc; } - if (pri >= ANDROID_PRIORITY_BACKGROUND) { - rc = SetTaskProfiles(tid, {"SCHED_SP_BACKGROUND"}, true) ? 0 : -1; - } else if (curr_pri >= ANDROID_PRIORITY_BACKGROUND) { - SchedPolicy policy = SP_FOREGROUND; - // Change to the sched policy group of the process. - get_sched_policy(getpid(), &policy); - rc = SetTaskProfiles(tid, {get_sched_policy_profile_name(policy)}, true) ? 0 : -1; - } + if (change_policy) { + if (pri >= ANDROID_PRIORITY_BACKGROUND) { + rc = SetTaskProfiles(tid, {"SCHED_SP_BACKGROUND"}, true) ? 0 : -1; + } else if (curr_pri >= ANDROID_PRIORITY_BACKGROUND) { + SchedPolicy policy = SP_FOREGROUND; + // Change to the sched policy group of the process. + get_sched_policy(getpid(), &policy); + rc = SetTaskProfiles(tid, {get_sched_policy_profile_name(policy)}, true) ? 0 : -1; + } - if (rc) { - lasterr = errno; + if (rc) { + lasterr = errno; + } } if (setpriority(PRIO_PROCESS, tid, pri) < 0) { @@ -333,6 +335,15 @@ int androidSetThreadPriority(pid_t tid, int pri) return rc; } +} // namespace + +int androidSetThreadPriority(pid_t tid, int pri) { + return androidSetThreadPriorityInternal(tid, pri, true); +} + +int androidSetThreadPriorityAndPolicy(pid_t tid, int pri, bool change_policy) { + return androidSetThreadPriorityInternal(tid, pri, change_policy); +} int androidGetThreadPriority(pid_t tid) { return getpriority(PRIO_PROCESS, tid); |