Add choice for changing sched policy when setting thread priority
If the policy has been changed already, we do not need to change it again. Bug: 139521784 Test: functionality verified Change-Id: I251db1d3f874896ba9be68df87209e7e514b80f9
This commit is contained in:
parent
5133bbfd34
commit
57affbf91d
2 changed files with 16 additions and 13 deletions
|
|
@ -302,8 +302,7 @@ void androidSetCreateThreadFunc(android_create_thread_fn func)
|
|||
}
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
int androidSetThreadPriority(pid_t tid, int pri)
|
||||
{
|
||||
int androidSetThreadPriority(pid_t tid, int pri, bool change_policy) {
|
||||
int rc = 0;
|
||||
int lasterr = 0;
|
||||
int curr_pri = getpriority(PRIO_PROCESS, tid);
|
||||
|
|
@ -312,17 +311,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) {
|
||||
|
|
|
|||
|
|
@ -78,7 +78,9 @@ extern void androidSetCreateThreadFunc(android_create_thread_fn func);
|
|||
// should be one of the ANDROID_PRIORITY constants. Returns INVALID_OPERATION
|
||||
// if the priority set failed, else another value if just the group set failed;
|
||||
// in either case errno is set. Thread ID zero means current thread.
|
||||
extern int androidSetThreadPriority(pid_t tid, int prio);
|
||||
// Parameter "change_policy" indicates if sched policy should be changed. It needs
|
||||
// not be checked again if the change is done elsewhere like activity manager.
|
||||
extern int androidSetThreadPriority(pid_t tid, int prio, bool change_policy = true);
|
||||
|
||||
// Get the current priority of a particular thread. Returns one of the
|
||||
// ANDROID_PRIORITY constants or a negative result in case of error.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue