summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/os/Trace.java2
-rw-r--r--core/java/com/android/internal/os/ZygoteInit.java88
2 files changed, 61 insertions, 29 deletions
diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java
index 4da88ee9da9c..7529c5294541 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -77,6 +77,8 @@ public final class Trace {
public static final long TRACE_TAG_POWER = 1L << 17;
/** @hide */
public static final long TRACE_TAG_PACKAGE_MANAGER = 1L << 18;
+ /** @hide */
+ public static final long TRACE_TAG_SYSTEM_SERVER = 1L << 19;
private static final long TRACE_TAG_NOT_READY = 1L << 63;
private static final int MAX_SECTION_NAME_LEN = 127;
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 06919e1a9f6b..cbdb754204da 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -179,8 +179,18 @@ public class ZygoteInit {
static void preload() {
Log.d(TAG, "begin preload");
- preloadClasses();
- preloadResources();
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadClasses");
+ preloadClasses();
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
+ }
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadResources");
+ preloadResources();
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
+ }
preloadOpenGL();
preloadSharedLibraries();
preloadTextResources();
@@ -266,6 +276,7 @@ public class ZygoteInit {
}
try {
+ Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadClass " + line);
if (false) {
Log.v(TAG, "Preloading " + line + "...");
}
@@ -289,6 +300,8 @@ public class ZygoteInit {
throw (RuntimeException) t;
}
throw new RuntimeException(t);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
}
}
@@ -302,7 +315,9 @@ public class ZygoteInit {
runtime.setTargetHeapUtilization(defaultUtilization);
// Fill in dex caches with classes, fields, and methods brought in by preloading.
+ Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadDexCaches");
runtime.preloadDexCaches();
+ Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
// Bring back root. We'll need it later if we're in the zygote.
if (droppedPriviliges) {
@@ -564,41 +579,56 @@ public class ZygoteInit {
public static void main(String argv[]) {
try {
- RuntimeInit.enableDdms();
- // Start profiling the zygote initialization.
- SamplingProfilerIntegration.start();
-
boolean startSystemServer = false;
String socketName = "zygote";
String abiList = null;
- for (int i = 1; i < argv.length; i++) {
- if ("start-system-server".equals(argv[i])) {
- startSystemServer = true;
- } else if (argv[i].startsWith(ABI_LIST_ARG)) {
- abiList = argv[i].substring(ABI_LIST_ARG.length());
- } else if (argv[i].startsWith(SOCKET_NAME_ARG)) {
- socketName = argv[i].substring(SOCKET_NAME_ARG.length());
- } else {
- throw new RuntimeException("Unknown command line argument: " + argv[i]);
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "ZygoteInit");
+ RuntimeInit.enableDdms();
+ // Start profiling the zygote initialization.
+ SamplingProfilerIntegration.start();
+
+ for (int i = 1; i < argv.length; i++) {
+ if ("start-system-server".equals(argv[i])) {
+ startSystemServer = true;
+ } else if (argv[i].startsWith(ABI_LIST_ARG)) {
+ abiList = argv[i].substring(ABI_LIST_ARG.length());
+ } else if (argv[i].startsWith(SOCKET_NAME_ARG)) {
+ socketName = argv[i].substring(SOCKET_NAME_ARG.length());
+ } else {
+ throw new RuntimeException("Unknown command line argument: " + argv[i]);
+ }
}
- }
- if (abiList == null) {
- throw new RuntimeException("No ABI list supplied.");
- }
+ if (abiList == null) {
+ throw new RuntimeException("No ABI list supplied.");
+ }
- registerZygoteSocket(socketName);
- EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_START,
- SystemClock.uptimeMillis());
- preload();
- EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_END,
- SystemClock.uptimeMillis());
+ registerZygoteSocket(socketName);
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "ZygotePreload");
+ EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_START,
+ SystemClock.uptimeMillis());
+ preload();
+ EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_END,
+ SystemClock.uptimeMillis());
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
+ }
- // Finish profiling the zygote initialization.
- SamplingProfilerIntegration.writeZygoteSnapshot();
+ // Finish profiling the zygote initialization.
+ SamplingProfilerIntegration.writeZygoteSnapshot();
- // Do an initial gc to clean up after startup
- gcAndFinalize();
+ // Do an initial gc to clean up after startup
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PostZygoteInitGC");
+ gcAndFinalize();
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
+ }
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
+ }
// Disable tracing so that forked processes do not inherit stale tracing tags from
// Zygote.