Introduce ZygoteInit.preForkInit().

Until recently, I and apparently some others were under the assumption
that RuntimeInit.commonInit() runs before the Zygote fork. Actually, it
does not.

This CL introduces a method ZygoteInit.preForkInit() which runs before
the Zygote fork. For now, only enableDdms() moves into it and can become
private. This should not alter behavior since enableDdms() is called
from the same places as before, and because enableDdms() (now private)
was already not part of any API surface.

The CL also removes the qualifier "final" from the (static) method
enableDdms(), because it is redundant.

Note: This CL was uploaded with --no-verify because of preexisting
import ordering issues in RuntimeInit.java

Test: Treehugger
Change-Id: I8f637e160a2d7810feb43b6a43ec7d628af18fb8
This commit is contained in:
Tobias Thierer
2019-09-26 16:03:28 +01:00
parent a11beeca12
commit a45917eb77
2 changed files with 12 additions and 3 deletions

View File

@@ -192,6 +192,15 @@ public class RuntimeInit {
}
}
/**
* Common initialization that (unlike {@link #commonInit()} should happen prior to
* the Zygote fork.
*/
public static void preForkInit() {
if (DEBUG) Slog.d(TAG, "Entered preForkInit.");
RuntimeInit.enableDdms();
}
@UnsupportedAppUsage
protected static final void commonInit() {
if (DEBUG) Slog.d(TAG, "Entered RuntimeInit!");
@@ -324,7 +333,7 @@ public class RuntimeInit {
@UnsupportedAppUsage
public static final void main(String[] argv) {
enableDdms();
preForkInit();
if (argv.length == 2 && argv[1].equals("application")) {
if (DEBUG) Slog.d(TAG, "RuntimeInit: Starting application");
redirectLogStreams();
@@ -418,7 +427,7 @@ public class RuntimeInit {
/**
* Enable DDMS.
*/
static final void enableDdms() {
private static void enableDdms() {
// Register handlers for DDM messages.
android.ddm.DdmRegister.registerHandlers();
}

View File

@@ -835,7 +835,7 @@ public class ZygoteInit {
TimingsTraceLog bootTimingsTraceLog = new TimingsTraceLog(bootTimeTag,
Trace.TRACE_TAG_DALVIK);
bootTimingsTraceLog.traceBegin("ZygoteInit");
RuntimeInit.enableDdms();
RuntimeInit.preForkInit();
boolean startSystemServer = false;
String zygoteSocketName = "zygote";