diff options
| -rw-r--r-- | core/java/com/android/internal/os/ZygoteInit.java | 5 | ||||
| -rw-r--r-- | core/jni/Android.bp | 1 | ||||
| -rw-r--r-- | core/jni/AndroidRuntime.cpp | 6 | ||||
| -rw-r--r-- | core/jni/com_android_internal_os_ZygoteInit.cpp | 45 |
4 files changed, 55 insertions, 2 deletions
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 2c0f8e4a373f..2f35e080338e 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -132,6 +132,9 @@ public class ZygoteInit { bootTimingsTraceLog.traceBegin("PreloadResources"); preloadResources(); bootTimingsTraceLog.traceEnd(); // PreloadResources + Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadAppProcessHALs"); + nativePreloadAppProcessHALs(); + Trace.traceEnd(Trace.TRACE_TAG_DALVIK); Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadOpenGL"); preloadOpenGL(); Trace.traceEnd(Trace.TRACE_TAG_DALVIK); @@ -184,6 +187,8 @@ public class ZygoteInit { System.loadLibrary("jnigraphics"); } + native private static void nativePreloadAppProcessHALs(); + private static void preloadOpenGL() { String driverPackageName = SystemProperties.get(PROPERTY_GFX_DRIVER); if (!SystemProperties.getBoolean(PROPERTY_DISABLE_OPENGL_PRELOADING, false) && diff --git a/core/jni/Android.bp b/core/jni/Android.bp index c5279e10d93f..3d71d1db52c5 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -188,6 +188,7 @@ cc_library_shared { "com_android_internal_os_FuseAppLoop.cpp", "com_android_internal_os_PathClassLoaderFactory.cpp", "com_android_internal_os_Zygote.cpp", + "com_android_internal_os_ZygoteInit.cpp", "com_android_internal_util_VirtualRefBasePtr.cpp", "com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp", "hwbinder/EphemeralStorage.cpp", diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index f70cb3cf2d94..97f24355ea51 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -206,6 +206,7 @@ extern int register_com_android_internal_net_NetworkStatsFactory(JNIEnv *env); extern int register_com_android_internal_os_FuseAppLoop(JNIEnv* env); extern int register_com_android_internal_os_PathClassLoaderFactory(JNIEnv* env); extern int register_com_android_internal_os_Zygote(JNIEnv *env); +extern int register_com_android_internal_os_ZygoteInit(JNIEnv *env); extern int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv *env); static AndroidRuntime* gCurRuntime = NULL; @@ -245,7 +246,7 @@ int register_com_android_internal_os_RuntimeInit(JNIEnv* env) methods, NELEM(methods)); } -int register_com_android_internal_os_ZygoteInit(JNIEnv* env) +int register_com_android_internal_os_ZygoteInit_nativeZygoteInit(JNIEnv* env) { const JNINativeMethod methods[] = { { "nativeZygoteInit", "()V", @@ -1301,7 +1302,7 @@ static int register_jni_procs(const RegJNIRec array[], size_t count, JNIEnv* env static const RegJNIRec gRegJNI[] = { REG_JNI(register_com_android_internal_os_RuntimeInit), - REG_JNI(register_com_android_internal_os_ZygoteInit), + REG_JNI(register_com_android_internal_os_ZygoteInit_nativeZygoteInit), REG_JNI(register_android_os_SystemClock), REG_JNI(register_android_util_EventLog), REG_JNI(register_android_util_Log), @@ -1403,6 +1404,7 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_os_MemoryFile), REG_JNI(register_com_android_internal_os_PathClassLoaderFactory), REG_JNI(register_com_android_internal_os_Zygote), + REG_JNI(register_com_android_internal_os_ZygoteInit), REG_JNI(register_com_android_internal_util_VirtualRefBasePtr), REG_JNI(register_android_hardware_Camera), REG_JNI(register_android_hardware_camera2_CameraMetadata), diff --git a/core/jni/com_android_internal_os_ZygoteInit.cpp b/core/jni/com_android_internal_os_ZygoteInit.cpp new file mode 100644 index 000000000000..258a55c7123a --- /dev/null +++ b/core/jni/com_android_internal_os_ZygoteInit.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "Zygote" + +#include <ui/GraphicBufferMapper.h> + +#include "core_jni_helpers.h" + +namespace { + +void android_internal_os_ZygoteInit_nativePreloadAppProcessHALs(JNIEnv* env, jclass) { + android::GraphicBufferMapper::preloadHal(); + // Add preloading here for other HALs that are (a) always passthrough, and + // (b) loaded by most app processes. +} + +const JNINativeMethod gMethods[] = { + { "nativePreloadAppProcessHALs", "()V", + (void*)android_internal_os_ZygoteInit_nativePreloadAppProcessHALs }, +}; + +} // anonymous namespace + +namespace android { + +int register_com_android_internal_os_ZygoteInit(JNIEnv* env) { + return RegisterMethodsOrDie(env, "com/android/internal/os/ZygoteInit", + gMethods, NELEM(gMethods)); +} + +} // namespace android |