OSDN Git Service

Preload public libraries on Runtime::Start()
authorDimitry Ivanov <dimitry@google.com>
Mon, 22 Feb 2016 22:26:48 +0000 (14:26 -0800)
committerDimitry Ivanov <dimitry@google.com>
Thu, 25 Feb 2016 00:42:50 +0000 (16:42 -0800)
Preloading public libraries on Runtime::Start()
instead of doing it in native_loader c-tor
ensures that the libraries are loaded only for
binaries that are using Android Runtime, and not
just linking against libandroid_runtime or libart.

Loading public libraries on Runtime::Start()
also helps some apps to save startup time and space
by ensuring that all NDK libraries are loaded
and ready to use.

Bug: http://b/27245894
Change-Id: I15679a72450f3d18a7dd503d0ae977cebcfd7f52
(cherry picked from commit 7bca74e53d3665bcd243d4e0277f6561c0c80271)

runtime/runtime.cc

index eb5455a..9f7faba 100644 (file)
@@ -25,6 +25,7 @@
 
 #define ATRACE_TAG ATRACE_TAG_DALVIK
 #include <cutils/trace.h>
+#include <nativeloader/native_loader.h>
 #include <signal.h>
 #include <sys/syscall.h>
 #include "base/memory_tool.h"
@@ -551,6 +552,11 @@ bool Runtime::Start() {
   }
 #endif
 
+  // This line makes sure that all public native libraries
+  // are loaded prior to runtime start; saves app load times
+  // and memory.
+  android::PreloadPublicNativeLibraries();
+
   // Restore main thread state to kNative as expected by native code.
   Thread* self = Thread::Current();