diff options
| author | 2019-01-23 03:21:43 +0000 | |
|---|---|---|
| committer | 2019-01-23 03:21:43 +0000 | |
| commit | e58c4b58503db6e60c47cd04e9b889b26e2e153c (patch) | |
| tree | 97222a413a758eb280bc05d1ad13765d3e679a06 | |
| parent | 035808eea06926a97651deac45aafcaad86a24dd (diff) | |
| parent | cfdc151d520c3bec26ac2a258648324ab5e542b7 (diff) | |
Merge "zygote children: propagate profileability to bionic for native heap profiling"
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 6 | ||||
| -rw-r--r-- | core/jni/android_app_ActivityThread.cpp | 9 | ||||
| -rw-r--r-- | services/core/jni/Android.bp | 1 | ||||
| -rw-r--r-- | services/core/jni/com_android_server_SystemServer.cpp | 9 | ||||
| -rw-r--r-- | services/java/com/android/server/SystemServer.java | 10 |
5 files changed, 34 insertions, 1 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 7767f0491a16..a3243a5de72a 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5939,6 +5939,11 @@ public final class ActivityThread extends ClientTransactionHandler { Binder.enableTracing(); } + // Initialize heap profiling. + if (isAppProfileable || Build.IS_DEBUGGABLE) { + nInitZygoteChildHeapProfiling(); + } + // Allow renderer debugging features if we're debuggable. boolean isAppDebuggable = (data.appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; HardwareRenderer.setDebuggingEnabled(isAppDebuggable || Build.IS_DEBUGGABLE); @@ -6965,4 +6970,5 @@ public final class ActivityThread extends ClientTransactionHandler { // ------------------ Regular JNI ------------------------ private native void nPurgePendingResources(); private native void nDumpGraphicsInfo(FileDescriptor fd); + private native void nInitZygoteChildHeapProfiling(); } diff --git a/core/jni/android_app_ActivityThread.cpp b/core/jni/android_app_ActivityThread.cpp index d56e4c51124d..93f2525eb29d 100644 --- a/core/jni/android_app_ActivityThread.cpp +++ b/core/jni/android_app_ActivityThread.cpp @@ -24,6 +24,8 @@ #include "core_jni_helpers.h" #include <unistd.h> +#include <bionic_malloc.h> + namespace android { static void android_app_ActivityThread_purgePendingResources(JNIEnv* env, jobject clazz) { @@ -38,13 +40,18 @@ android_app_ActivityThread_dumpGraphics(JNIEnv* env, jobject clazz, jobject java minikin::Layout::dumpMinikinStats(fd); } +static void android_app_ActivityThread_initZygoteChildHeapProfiling(JNIEnv* env, jobject clazz) { + android_mallopt(M_INIT_ZYGOTE_CHILD_PROFILING, nullptr, 0); +} static JNINativeMethod gActivityThreadMethods[] = { // ------------ Regular JNI ------------------ { "nPurgePendingResources", "()V", (void*) android_app_ActivityThread_purgePendingResources }, { "nDumpGraphicsInfo", "(Ljava/io/FileDescriptor;)V", - (void*) android_app_ActivityThread_dumpGraphics } + (void*) android_app_ActivityThread_dumpGraphics }, + { "nInitZygoteChildHeapProfiling", "()V", + (void*) android_app_ActivityThread_initZygoteChildHeapProfiling } }; int register_android_app_ActivityThread(JNIEnv* env) { diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp index fb00aebb622f..3729eaf63ddb 100644 --- a/services/core/jni/Android.bp +++ b/services/core/jni/Android.bp @@ -53,6 +53,7 @@ cc_library_static { ], include_dirs: [ + "bionic/libc/private", "frameworks/base/libs", "frameworks/native/services", "system/gatekeeper/include", diff --git a/services/core/jni/com_android_server_SystemServer.cpp b/services/core/jni/com_android_server_SystemServer.cpp index dc0d53b41595..159a4960731d 100644 --- a/services/core/jni/com_android_server_SystemServer.cpp +++ b/services/core/jni/com_android_server_SystemServer.cpp @@ -24,6 +24,8 @@ #include <sensorservice/SensorService.h> #include <sensorservicehidl/SensorManager.h> +#include <bionic_malloc.h> + #include <cutils/properties.h> #include <utils/Log.h> #include <utils/misc.h> @@ -64,6 +66,11 @@ static void android_server_SystemServer_startHidlServices(JNIEnv* env, jobject / ALOGE_IF(err != OK, "Cannot register %s: %d", ISchedulingPolicyService::descriptor, err); } +static void android_server_SystemServer_initZygoteChildHeapProfiling(JNIEnv* /* env */, + jobject /* clazz */) { + android_mallopt(M_INIT_ZYGOTE_CHILD_PROFILING, nullptr, 0); +} + /* * JNI registration. */ @@ -71,6 +78,8 @@ static const JNINativeMethod gMethods[] = { /* name, signature, funcPtr */ { "startSensorService", "()V", (void*) android_server_SystemServer_startSensorService }, { "startHidlServices", "()V", (void*) android_server_SystemServer_startHidlServices }, + { "initZygoteChildHeapProfiling", "()V", + (void*) android_server_SystemServer_initZygoteChildHeapProfiling }, }; int register_android_server_SystemServer(JNIEnv* env) diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index cef47caff740..98385c93aafe 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -327,6 +327,11 @@ public final class SystemServer { private static native void startHidlServices(); /** + * Mark this process' heap as profileable. Only for debug builds. + */ + private static native void initZygoteChildHeapProfiling(); + + /** * The main entry point from zygote. */ public static void main(String[] args) { @@ -448,6 +453,11 @@ public final class SystemServer { // Initialize native services. System.loadLibrary("android_servers"); + // Debug builds - allow heap profiling. + if (Build.IS_DEBUGGABLE) { + initZygoteChildHeapProfiling(); + } + // Check whether we failed to shut down last time we tried. // This call may not return. performPendingShutdown(); |