Chromium Code Reviews| Index: content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java |
| diff --git a/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java b/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java |
| index e6a84437fbc0ea0786e6e44bf969f43803751509..fea89f4082689540b7a5b8faf187cc6169b6cb56 100644 |
| --- a/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java |
| +++ b/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java |
| @@ -260,10 +260,24 @@ public class ChildProcessServiceImpl { |
| mMainThread.wait(); |
| } |
| } |
| + |
| + String sharedFilesValue = CommandLine.getInstance().getSwitchValue( |
| + ContentSwitches.SHARED_FILES, null); |
| + long storeRegistrationContext = |
| + nativeCreateFileDescriptorStoreRegistrationContext(sharedFilesValue); |
| for (FileDescriptorInfo fdInfo : mFdInfos) { |
| - nativeRegisterGlobalFileDescriptor( |
| - fdInfo.mId, fdInfo.mFd.detachFd(), fdInfo.mOffset, fdInfo.mSize); |
| + // For now we support the FileDescriptorStore (which passes string keys for |
| + // FDs through the command line) and the GlobalFileDescriptor (which uses |
| + // int keys). |
| + int fd = fdInfo.mFd.detachFd(); |
| + if (storeRegistrationContext == 0 |
| + || !nativeRegisterInFileDescriptorStore(storeRegistrationContext, |
| + fdInfo.mId, fd, fdInfo.mOffset, fdInfo.mSize)) { |
| + nativeRegisterGlobalFileDescriptor( |
|
boliu
2017/02/09 23:59:55
that's a lot of jni calls
just put these things i
Jay Civelli
2017/02/10 06:32:34
Merged it all in one JNI call.
|
| + fdInfo.mId, fd, fdInfo.mOffset, fdInfo.mSize); |
| + } |
| } |
| + nativeReleaseFileDescriptorStoreRegistrationContext(storeRegistrationContext); |
| nativeInitChildProcessImpl(ChildProcessServiceImpl.this, mCpuCount, |
| mCpuFeatures); |
| if (mActivitySemaphore.tryAcquire()) { |
| @@ -401,6 +415,20 @@ public class ChildProcessServiceImpl { |
| } |
| /** |
| + * Creates/releases a context needed by nativeRegisterInFileDescriptorStore. |
| + */ |
| + private static native long nativeCreateFileDescriptorStoreRegistrationContext( |
| + String sharedFileSwitchValue); |
| + private static native void nativeReleaseFileDescriptorStoreRegistrationContext(long context); |
| + |
| + /** |
| + * Helper for registering FileDescriptorInfo objects with FileDescriptorStore. |
| + * Returns true if the file was registered (if it was found in the command line). |
| + */ |
| + private static native boolean nativeRegisterInFileDescriptorStore( |
| + long context, int id, int fd, long offset, long size); |
| + |
| + /** |
| * Helper for registering FileDescriptorInfo objects with GlobalFileDescriptors. |
| * This includes the IPC channel, the crash dump signals and resource related |
| * files. |