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

Side by Side Diff: content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java

Issue 2684433003: Files required by a service now listed in manifest. (Closed)
Patch Set: Synced + addressed comment from @rockot Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.content.app; 5 package org.chromium.content.app;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.content.Intent; 8 import android.content.Intent;
9 import android.graphics.SurfaceTexture; 9 import android.graphics.SurfaceTexture;
10 import android.os.Binder; 10 import android.os.Binder;
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 .registerRendererProcessHistogram(requestedSharedRel ro, 253 .registerRendererProcessHistogram(requestedSharedRel ro,
254 loadAtFixedAddressFailed); 254 loadAtFixedAddressFailed);
255 LibraryLoader.get(mLibraryProcessType).initialize(); 255 LibraryLoader.get(mLibraryProcessType).initialize();
256 synchronized (mMainThread) { 256 synchronized (mMainThread) {
257 mLibraryInitialized = true; 257 mLibraryInitialized = true;
258 mMainThread.notifyAll(); 258 mMainThread.notifyAll();
259 while (mFdInfos == null) { 259 while (mFdInfos == null) {
260 mMainThread.wait(); 260 mMainThread.wait();
261 } 261 }
262 } 262 }
263
264 String sharedFilesValue = CommandLine.getInstance().getSwitc hValue(
265 ContentSwitches.SHARED_FILES, null);
266 long storeRegistrationContext =
267 nativeCreateFileDescriptorStoreRegistrationContext(s haredFilesValue);
263 for (FileDescriptorInfo fdInfo : mFdInfos) { 268 for (FileDescriptorInfo fdInfo : mFdInfos) {
264 nativeRegisterGlobalFileDescriptor( 269 // For now we support the FileDescriptorStore (which pas ses string keys for
265 fdInfo.mId, fdInfo.mFd.detachFd(), fdInfo.mOffse t, fdInfo.mSize); 270 // FDs through the command line) and the GlobalFileDescr iptor (which uses
271 // int keys).
272 int fd = fdInfo.mFd.detachFd();
273 if (storeRegistrationContext == 0
274 || !nativeRegisterInFileDescriptorStore(storeReg istrationContext,
275 fdInfo.mId, fd, fdInfo.mOffset, fdInf o.mSize)) {
276 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.
277 fdInfo.mId, fd, fdInfo.mOffset, fdInfo.mSize );
278 }
266 } 279 }
280 nativeReleaseFileDescriptorStoreRegistrationContext(storeReg istrationContext);
267 nativeInitChildProcessImpl(ChildProcessServiceImpl.this, mCp uCount, 281 nativeInitChildProcessImpl(ChildProcessServiceImpl.this, mCp uCount,
268 mCpuFeatures); 282 mCpuFeatures);
269 if (mActivitySemaphore.tryAcquire()) { 283 if (mActivitySemaphore.tryAcquire()) {
270 ContentMain.start(); 284 ContentMain.start();
271 nativeExitChildProcess(); 285 nativeExitChildProcess();
272 } 286 }
273 } catch (InterruptedException e) { 287 } catch (InterruptedException e) {
274 Log.w(TAG, "%s startup failed: %s", MAIN_THREAD_NAME, e); 288 Log.w(TAG, "%s startup failed: %s", MAIN_THREAD_NAME, e);
275 } catch (ProcessInitException e) { 289 } catch (ProcessInitException e) {
276 Log.w(TAG, "%s startup failed: %s", MAIN_THREAD_NAME, e); 290 Log.w(TAG, "%s startup failed: %s", MAIN_THREAD_NAME, e);
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 try { 408 try {
395 SurfaceWrapper wrapper = mCallback.getViewSurface(surfaceId); 409 SurfaceWrapper wrapper = mCallback.getViewSurface(surfaceId);
396 return wrapper != null ? wrapper.getSurface() : null; 410 return wrapper != null ? wrapper.getSurface() : null;
397 } catch (RemoteException e) { 411 } catch (RemoteException e) {
398 Log.e(TAG, "Unable to call getViewSurface: %s", e); 412 Log.e(TAG, "Unable to call getViewSurface: %s", e);
399 return null; 413 return null;
400 } 414 }
401 } 415 }
402 416
403 /** 417 /**
418 * Creates/releases a context needed by nativeRegisterInFileDescriptorStore.
419 */
420 private static native long nativeCreateFileDescriptorStoreRegistrationContex t(
421 String sharedFileSwitchValue);
422 private static native void nativeReleaseFileDescriptorStoreRegistrationConte xt(long context);
423
424 /**
425 * Helper for registering FileDescriptorInfo objects with FileDescriptorStor e.
426 * Returns true if the file was registered (if it was found in the command l ine).
427 */
428 private static native boolean nativeRegisterInFileDescriptorStore(
429 long context, int id, int fd, long offset, long size);
430
431 /**
404 * Helper for registering FileDescriptorInfo objects with GlobalFileDescript ors. 432 * Helper for registering FileDescriptorInfo objects with GlobalFileDescript ors.
405 * This includes the IPC channel, the crash dump signals and resource relate d 433 * This includes the IPC channel, the crash dump signals and resource relate d
406 * files. 434 * files.
407 */ 435 */
408 private static native void nativeRegisterGlobalFileDescriptor( 436 private static native void nativeRegisterGlobalFileDescriptor(
409 int id, int fd, long offset, long size); 437 int id, int fd, long offset, long size);
410 438
411 /** 439 /**
412 * The main entry point for a child process. This should be called from a ne w thread since 440 * The main entry point for a child process. This should be called from a ne w thread since
413 * it will not return until the child process exits. See child_process_servi ce.{h,cc} 441 * it will not return until the child process exits. See child_process_servi ce.{h,cc}
414 * 442 *
415 * @param serviceImpl The current ChildProcessServiceImpl object. 443 * @param serviceImpl The current ChildProcessServiceImpl object.
416 * renderer. 444 * renderer.
417 */ 445 */
418 private static native void nativeInitChildProcessImpl( 446 private static native void nativeInitChildProcessImpl(
419 ChildProcessServiceImpl serviceImpl, int cpuCount, long cpuFeatures) ; 447 ChildProcessServiceImpl serviceImpl, int cpuCount, long cpuFeatures) ;
420 448
421 /** 449 /**
422 * Force the child process to exit. 450 * Force the child process to exit.
423 */ 451 */
424 private static native void nativeExitChildProcess(); 452 private static native void nativeExitChildProcess();
425 453
426 private native void nativeShutdownMainThread(); 454 private native void nativeShutdownMainThread();
427 } 455 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698