Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Unified Diff: base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java

Issue 669813003: Update from chromium https://crrev.com/301725/ (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
index dcf0754e23ac642dcd000c8a4cfeb601f9689a4b..c56d76c97d354f0886ad106f0ebdeb5b0d7b0544 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
@@ -50,9 +50,9 @@ public class LibraryLoader {
private static boolean sIsUsingBrowserSharedRelros = false;
private static boolean sLoadAtFixedAddressFailed = false;
- // One-way switch recording whether the device supports memory mapping
- // APK files with executable permissions. Only used in the browser.
- private static boolean sLibraryLoadFromApkSupported = false;
+ // One-way switch becomes true if the library was loaded from the APK file
+ // directly.
+ private static boolean sLibraryWasLoadedFromApk = false;
// One-way switch becomes true if the system library loading failed,
// and the right native library was found and loaded by the hack.
@@ -164,17 +164,10 @@ public class LibraryLoader {
// Load libraries using the Chromium linker.
Linker.prepareLibraryLoad();
- // Check if the device supports loading a library directly from the APK file.
- String apkfile = context.getApplicationInfo().sourceDir;
- if (Linker.isInBrowserProcess()) {
- sLibraryLoadFromApkSupported = Linker.checkLibraryLoadFromApkSupport(
- apkfile);
- }
-
for (String library : NativeLibraries.LIBRARIES) {
String zipfile = null;
if (Linker.isInZipFile()) {
- zipfile = apkfile;
+ zipfile = context.getApplicationInfo().sourceDir;
Log.i(TAG, "Loading " + library + " from within " + zipfile);
} else {
Log.i(TAG, "Loading: " + library);
@@ -186,6 +179,7 @@ public class LibraryLoader {
try {
if (zipfile != null) {
Linker.loadLibraryInZipFile(zipfile, library);
+ sLibraryWasLoadedFromApk = true;
} else {
Linker.loadLibrary(library);
}
@@ -200,6 +194,7 @@ public class LibraryLoader {
if (!isLoaded) {
if (zipfile != null) {
Linker.loadLibraryInZipFile(zipfile, library);
+ sLibraryWasLoadedFromApk = true;
} else {
Linker.loadLibrary(library);
}
@@ -308,25 +303,37 @@ public class LibraryLoader {
// Called after all native initializations are complete.
public static void onNativeInitializationComplete(Context context) {
- onNativeInitializationComplete();
- }
-
- // Called after all native initializations are complete.
- @Deprecated
- public static void onNativeInitializationComplete() {
- recordBrowserProcessHistogram();
+ recordBrowserProcessHistogram(context);
nativeRecordNativeLibraryHack(sNativeLibraryHackWasUsed);
}
// Record Chromium linker histogram state for the main browser process. Called from
// onNativeInitializationComplete().
- private static void recordBrowserProcessHistogram() {
+ private static void recordBrowserProcessHistogram(Context context) {
if (Linker.isUsed()) {
- assert Linker.isInBrowserProcess();
nativeRecordChromiumAndroidLinkerBrowserHistogram(sIsUsingBrowserSharedRelros,
sLoadAtFixedAddressFailed,
- sLibraryLoadFromApkSupported);
+ getLibraryLoadFromApkStatus(context));
+ }
+ }
+
+ // Returns the device's status for loading a library directly from the APK file.
+ // This method can only be called when the Chromium linker is used.
+ private static int getLibraryLoadFromApkStatus(Context context) {
+ assert Linker.isUsed();
+
+ if (sLibraryWasLoadedFromApk) {
+ return LibraryLoadFromApkStatusCodes.SUCCESSFUL;
}
+
+ if (context == null) {
+ Log.w(TAG, "Unknown APK filename due to null context");
+ return LibraryLoadFromApkStatusCodes.UNKNOWN;
+ }
+
+ return Linker.checkLibraryLoadFromApkSupport(context.getApplicationInfo().sourceDir) ?
+ LibraryLoadFromApkStatusCodes.SUPPORTED :
+ LibraryLoadFromApkStatusCodes.NOT_SUPPORTED;
}
// Register pending Chromium linker histogram state for renderer processes. This cannot be
@@ -354,11 +361,11 @@ public class LibraryLoader {
// Method called to record statistics about the Chromium linker operation for the main
// browser process. Indicates whether the linker attempted relro sharing for the browser,
// and if it did, whether the library failed to load at a fixed address. Also records
- // support for memory mapping APK files with executable permissions.
+ // support for loading a library directly from the APK file.
private static native void nativeRecordChromiumAndroidLinkerBrowserHistogram(
boolean isUsingBrowserSharedRelros,
boolean loadAtFixedAddressFailed,
- boolean apkMemoryMappingSupported);
+ int libraryLoadFromApkStatus);
// Method called to register (for later recording) statistics about the Chromium linker
// operation for a renderer process. Indicates whether the linker attempted relro sharing,

Powered by Google App Engine
This is Rietveld 408576698