Adjust Java Language thread priority in new processes.

Previously init started the Zygote with -20 nice value and then
immediately switched it to 0 in ZygoteInit.main so that new applications
forked from the Zygote have the correct Java Language thread priority.
This patch delays this priority change so that it only affects the new
processes and not the priority of the Zygote.

Test: m & flash & check ps
Bug: 146614089
Change-Id: Id00d0cfd642f02640c40b6e7b2aa8933a320b60c
Merged-In: Id00d0cfd642f02640c40b6e7b2aa8933a320b60c
This commit is contained in:
Chris Wailes
2019-05-21 16:23:50 -07:00
parent 0b2fbfcf6f
commit 80993a6e60
3 changed files with 21 additions and 3 deletions

View File

@@ -654,6 +654,9 @@ public final class Zygote {
// End of the postFork event.
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
// Set the Java Language thread priority to the default value for new apps.
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
return ZygoteInit.zygoteInit(args.mTargetSdkVersion,
args.mDisabledCompatChanges,
args.mRemainingArgs,

View File

@@ -487,6 +487,9 @@ class ZygoteConnection {
Zygote.setAppProcessName(parsedArgs, TAG);
// Set the Java Language thread priority to the default value for new apps.
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
// End of the postFork event.
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
if (parsedArgs.mInvokeWith != null) {

View File

@@ -518,6 +518,9 @@ public class ZygoteInit {
}
}
// Set the Java Language thread priority to the default value for the system server.
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
if (parsedArgs.mInvokeWith != null) {
String[] args = parsedArgs.mRemainingArgs;
// If we have a non-null system server class path, we'll have to duplicate the
@@ -825,13 +828,22 @@ public class ZygoteInit {
return result;
}
/**
* This is the entry point for a Zygote process. It creates the Zygote server, loads resources,
* and handles other tasks related to preparing the process for forking into applications.
*
* This process is started with a nice value of -20 (highest priority). All paths that flow
* into new processes are required to either set the priority to the default value or terminate
* before executing any non-system code. The native side of this occurs in SpecializeCommon,
* while the Java Language priority is changed in ZygoteInit.handleSystemServerProcess,
* ZygoteConnection.handleChildProc, and Zygote.usapMain.
*
* @param argv Command line arguments used to specify the Zygote's configuration.
*/
@UnsupportedAppUsage
public static void main(String argv[]) {
ZygoteServer zygoteServer = null;
// Set the initial thread priority to the "normal" value.
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
// Mark zygote start. This ensures that thread creation will throw
// an error.
ZygoteHooks.startZygoteNoThreadCreation();