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

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

Issue 2050803003: Update to Chromium //base at Chromium commit e3a753f17bac62738b0dbf0b36510f767b081e4b. (Closed) Base URL: https://github.com/domokit/base.git@master
Patch Set: Created 4 years, 6 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: android/java/src/org/chromium/base/library_loader/LegacyLinker.java
diff --git a/android/java/src/org/chromium/base/library_loader/LegacyLinker.java b/android/java/src/org/chromium/base/library_loader/LegacyLinker.java
index 8e6776adda88251f2217fc43045b399d5ca7eddc..05c861db40c4fc747357855afcc1123ce8a8730e 100644
--- a/android/java/src/org/chromium/base/library_loader/LegacyLinker.java
+++ b/android/java/src/org/chromium/base/library_loader/LegacyLinker.java
@@ -71,76 +71,54 @@ class LegacyLinker extends Linker {
return new LegacyLinker();
}
- // Used internally to initialize the linker's data. Assume lock is held.
+ // Used internally to initialize the linker's data. Assumes lock is held.
+ // Loads JNI, and sets mMemoryDeviceConfig and mBrowserUsesSharedRelro.
private void ensureInitializedLocked() {
assert Thread.holdsLock(mLock);
- if (mInitialized) {
+ if (mInitialized || !NativeLibraries.sUseLinker) {
return;
}
- if (NativeLibraries.sUseLinker) {
- // Load libchromium_android_linker.so.
- loadLinkerJNILibrary();
+ // On first call, load libchromium_android_linker.so. Cannot be done in the
+ // constructor because instantiation occurs on the UI thread.
+ loadLinkerJniLibrary();
- if (mMemoryDeviceConfig == MEMORY_DEVICE_CONFIG_INIT) {
- if (SysUtils.isLowEndDevice()) {
- mMemoryDeviceConfig = MEMORY_DEVICE_CONFIG_LOW;
- } else {
- mMemoryDeviceConfig = MEMORY_DEVICE_CONFIG_NORMAL;
- }
+ if (mMemoryDeviceConfig == MEMORY_DEVICE_CONFIG_INIT) {
+ if (SysUtils.isLowEndDevice()) {
+ mMemoryDeviceConfig = MEMORY_DEVICE_CONFIG_LOW;
+ } else {
+ mMemoryDeviceConfig = MEMORY_DEVICE_CONFIG_NORMAL;
}
+ }
- switch (BROWSER_SHARED_RELRO_CONFIG) {
- case BROWSER_SHARED_RELRO_CONFIG_NEVER:
- mBrowserUsesSharedRelro = false;
- break;
- case BROWSER_SHARED_RELRO_CONFIG_LOW_RAM_ONLY:
- if (mMemoryDeviceConfig == MEMORY_DEVICE_CONFIG_LOW) {
- mBrowserUsesSharedRelro = true;
- Log.w(TAG, "Low-memory device: shared RELROs used in all processes");
- } else {
- mBrowserUsesSharedRelro = false;
- }
- break;
- case BROWSER_SHARED_RELRO_CONFIG_ALWAYS:
- Log.w(TAG, "Beware: shared RELROs used in all processes!");
+ // Cannot run in the constructor because SysUtils.isLowEndDevice() relies
+ // on CommandLine, which may not be available at instantiation.
+ switch (BROWSER_SHARED_RELRO_CONFIG) {
+ case BROWSER_SHARED_RELRO_CONFIG_NEVER:
+ mBrowserUsesSharedRelro = false;
+ break;
+ case BROWSER_SHARED_RELRO_CONFIG_LOW_RAM_ONLY:
+ if (mMemoryDeviceConfig == MEMORY_DEVICE_CONFIG_LOW) {
mBrowserUsesSharedRelro = true;
- break;
- default:
- assert false : "Unreached";
- break;
- }
- } else {
- if (DEBUG) {
- Log.i(TAG, "Linker disabled");
- }
+ Log.w(TAG, "Low-memory device: shared RELROs used in all processes");
+ } else {
+ mBrowserUsesSharedRelro = false;
+ }
+ break;
+ case BROWSER_SHARED_RELRO_CONFIG_ALWAYS:
+ Log.w(TAG, "Beware: shared RELROs used in all processes!");
+ mBrowserUsesSharedRelro = true;
+ break;
+ default:
+ assert false : "Unreached";
+ break;
}
mInitialized = true;
}
/**
- * Call this method to determine if this chromium project must
- * use this linker. If not, System.loadLibrary() should be used to load
- * libraries instead.
- */
- @Override
- public boolean isUsed() {
- // Only GYP targets that are APKs and have the 'use_chromium_linker' variable
- // defined as 1 will use this linker. For all others (the default), the
- // auto-generated NativeLibraries.sUseLinker variable will be false.
- if (!NativeLibraries.sUseLinker) {
- return false;
- }
-
- synchronized (mLock) {
- ensureInitializedLocked();
- return true;
- }
- }
-
- /**
* Call this method to determine if the linker will try to use shared RELROs
* for the browser process.
*/
@@ -187,10 +165,8 @@ class LegacyLinker extends Linker {
if (DEBUG) {
Log.i(TAG,
String.format(Locale.US,
- "mInBrowserProcess=%s mBrowserUsesSharedRelro=%s mWaitForSharedRelros=%s",
- mInBrowserProcess ? "true" : "false",
- mBrowserUsesSharedRelro ? "true" : "false",
- mWaitForSharedRelros ? "true" : "false"));
+ "mInBrowserProcess=%b mBrowserUsesSharedRelro=%b mWaitForSharedRelros=%b",
+ mInBrowserProcess, mBrowserUsesSharedRelro, mWaitForSharedRelros));
}
if (mLoadedLibraries == null) {
@@ -315,6 +291,7 @@ class LegacyLinker extends Linker {
Log.i(TAG, "disableSharedRelros() called");
}
synchronized (mLock) {
+ ensureInitializedLocked();
mInBrowserProcess = false;
mWaitForSharedRelros = false;
mBrowserUsesSharedRelro = false;
@@ -441,7 +418,9 @@ class LegacyLinker extends Linker {
}
// In service processes, close all file descriptors from the map now.
- if (!mInBrowserProcess) closeLibInfoMap(relroMap);
+ if (!mInBrowserProcess) {
+ closeLibInfoMap(relroMap);
+ }
if (DEBUG) {
Log.i(TAG, "Linker.useSharedRelrosLocked() exiting");

Powered by Google App Engine
This is Rietveld 408576698