diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/os/Trace.java | 2 | ||||
| -rw-r--r-- | core/java/com/android/internal/os/ZygoteInit.java | 88 |
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. |
