| Index: base/android/linker/linker_jni.cc
|
| diff --git a/base/android/linker/linker_jni.cc b/base/android/linker/linker_jni.cc
|
| index 1a11639dd5364d3039591bd66da7201126d6d9bf..6e8369292bf17e475014a3269b2d6a32253ff71a 100644
|
| --- a/base/android/linker/linker_jni.cc
|
| +++ b/base/android/linker/linker_jni.cc
|
| @@ -609,6 +609,44 @@ jstring GetLibraryFilePathInZipFile(JNIEnv* env,
|
| return env->NewStringUTF(buffer);
|
| }
|
|
|
| +// Prefault the pages of a native library stored in a zip file.
|
| +//
|
| +// |env| is the current JNI environment handle.
|
| +// |clazz| is the static class handle which is not used here.
|
| +// |lib_name| is the library base name.
|
| +// Returns true for success.
|
| +jboolean PrefaultLibraryInZipFile(JNIEnv* env, jclass clazz,
|
| + jstring zip_filename, jstring lib_name) {
|
| + char path_in_zip[kMaxFilePathLengthInZip + 1];
|
| + crazy_status_t status;
|
| + String lib_name_str(env, lib_name);
|
| + String zip_filename_str(env, zip_filename);
|
| + int offset, size;
|
| +
|
| + status = crazy_library_file_path_in_zip_file(lib_name_str.c_str(),
|
| + path_in_zip, 256);
|
| + if (status == CRAZY_STATUS_FAILURE) return false;
|
| + status = crazy_library_offset_size_in_zip_file(zip_filename_str.c_str(),
|
| + path_in_zip, &offset, &size);
|
| + if (status == CRAZY_STATUS_FAILURE) return false;
|
| + status = crazy_prefault_library(zip_filename_str.c_str(), offset, size);
|
| + return true;
|
| +}
|
| +
|
| +// Prefault the pages of a native library.
|
| +//
|
| +// |env| is the current JNI environment handle.
|
| +// |clazz| is the static class handle which is not used here.
|
| +// |lib_filename| is the library file name.
|
| +// Returns true for success.
|
| +jboolean PrefaultLibraryInFile(JNIEnv* env, jclass clazz,
|
| + jstring lib_filename) {
|
| + String lib_filename_str(env, lib_filename);
|
| +
|
| + return (crazy_prefault_library(lib_filename_str.c_str(), 0, -1)
|
| + == CRAZY_STATUS_SUCCESS);
|
| +}
|
| +
|
| // Check whether the device supports mapping the APK file with executable
|
| // permission.
|
| //
|
| @@ -730,6 +768,21 @@ const JNINativeMethod kNativeMethods[] = {
|
| ")"
|
| "Ljava/lang/String;",
|
| reinterpret_cast<void*>(&GetLibraryFilePathInZipFile)},
|
| + {"nativePrefaultLibraryInFile",
|
| + "("
|
| + "Ljava/lang/String;"
|
| + ")"
|
| + "Z",
|
| + reinterpret_cast<void*>(&PrefaultLibraryInFile)
|
| + },
|
| + {"nativePrefaultLibraryInZipFile",
|
| + "("
|
| + "Ljava/lang/String;"
|
| + "Ljava/lang/String;"
|
| + ")"
|
| + "Z",
|
| + reinterpret_cast<void*>(&PrefaultLibraryInZipFile)
|
| + },
|
| {"nativeCheckMapExecSupport",
|
| "("
|
| "Ljava/lang/String;"
|
|
|