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

Unified Diff: content/public/android/java/src/org/chromium/content/app/ChildProcessService.java

Issue 23717023: Android: Add chrome-specific dynamic linker. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update content_tests.gypi Created 7 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: content/public/android/java/src/org/chromium/content/app/ChildProcessService.java
diff --git a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java
index 3d85310926cb657db415002f0e5e2b7bc5eb8090..d5ab06d4fe56c84cd80be76133e1ffd986d1faaf 100644
--- a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java
+++ b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java
@@ -52,9 +52,13 @@ public class ChildProcessService extends Service {
// Pairs IDs and file descriptors that should be registered natively.
private ArrayList<Integer> mFileIds;
private ArrayList<ParcelFileDescriptor> mFileFds;
+ // Linker-specific parameters for this child process service.
+ private LinkerParams mLinkerParams;
private static AtomicReference<Context> sContext = new AtomicReference<Context>(null);
private boolean mLibraryInitialized = false;
+ // Becomes true once the service is bound. Access must synchronize around mMainThread.
+ private boolean mIsBound = false;
// Binder object used by clients for this service.
private final IChildProcessService.Stub mBinder = new IChildProcessService.Stub() {
@@ -89,6 +93,11 @@ public class ChildProcessService extends Service {
+ ChildProcessConnection.EXTRA_FILES_ID_SUFFIX;
mFileIds.add(args.getInt(idName));
}
+ Bundle sharedRelros = args.getBundle(Linker.EXTRA_LINKER_SHARED_RELROS);
+ if (sharedRelros != null) {
+ Linker.useSharedRelros(sharedRelros);
+ sharedRelros = null;
+ }
mMainThread.notifyAll();
}
return Process.myPid();
@@ -112,6 +121,22 @@ public class ChildProcessService extends Service {
@Override
public void run() {
try {
+ boolean useLinker = Linker.isUsed();
+
+ if (useLinker) {
+ synchronized (mMainThread) {
+ while (!mIsBound)
+ mMainThread.wait();
+ }
+ if (mLinkerParams != null) {
+ if (mLinkerParams.mWaitForSharedRelro)
+ Linker.initServiceProcess(mLinkerParams.mBaseLoadAddress);
+ else
+ Linker.disableSharedRelros();
+
+ Linker.setTestRunnerClassName(mLinkerParams.mTestRunnerClassName);
+ }
+ }
try {
LibraryLoader.loadNow();
} catch (ProcessInitException e) {
@@ -188,6 +213,10 @@ public class ChildProcessService extends Service {
synchronized (mMainThread) {
mCommandLineParams = intent.getStringArrayExtra(
ChildProcessConnection.EXTRA_COMMAND_LINE);
+ mLinkerParams = null;
+ if (Linker.isUsed())
+ mLinkerParams = new LinkerParams(intent);
+ mIsBound = true;
mMainThread.notifyAll();
}
« no previous file with comments | « content/content_tests.gypi ('k') | content/public/android/java/src/org/chromium/content/app/LibraryLoader.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698