OLD | NEW |
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 Loading... |
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( |
| 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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 try { | 450 try { |
437 SurfaceWrapper wrapper = mCallback.getViewSurface(surfaceId); | 451 SurfaceWrapper wrapper = mCallback.getViewSurface(surfaceId); |
438 return wrapper != null ? wrapper.getSurface() : null; | 452 return wrapper != null ? wrapper.getSurface() : null; |
439 } catch (RemoteException e) { | 453 } catch (RemoteException e) { |
440 Log.e(TAG, "Unable to call getViewSurface: %s", e); | 454 Log.e(TAG, "Unable to call getViewSurface: %s", e); |
441 return null; | 455 return null; |
442 } | 456 } |
443 } | 457 } |
444 | 458 |
445 /** | 459 /** |
| 460 * Creates/releases a context needed by nativeRegisterInFileDescriptorStore. |
| 461 */ |
| 462 private static native long nativeCreateFileDescriptorStoreRegistrationContex
t( |
| 463 String sharedFileSwitchValue); |
| 464 private static native void nativeReleaseFileDescriptorStoreRegistrationConte
xt(long context); |
| 465 |
| 466 /** |
| 467 * Helper for registering FileDescriptorInfo objects with FileDescriptorStor
e. |
| 468 * Returns true if the file was registered (if it was found in the command l
ine). |
| 469 */ |
| 470 private static native boolean nativeRegisterInFileDescriptorStore( |
| 471 long context, int id, int fd, long offset, long size); |
| 472 |
| 473 /** |
446 * Helper for registering FileDescriptorInfo objects with GlobalFileDescript
ors. | 474 * Helper for registering FileDescriptorInfo objects with GlobalFileDescript
ors. |
447 * This includes the IPC channel, the crash dump signals and resource relate
d | 475 * This includes the IPC channel, the crash dump signals and resource relate
d |
448 * files. | 476 * files. |
449 */ | 477 */ |
450 private static native void nativeRegisterGlobalFileDescriptor( | 478 private static native void nativeRegisterGlobalFileDescriptor( |
451 int id, int fd, long offset, long size); | 479 int id, int fd, long offset, long size); |
452 | 480 |
453 /** | 481 /** |
454 * The main entry point for a child process. This should be called from a ne
w thread since | 482 * The main entry point for a child process. This should be called from a ne
w thread since |
455 * it will not return until the child process exits. See child_process_servi
ce.{h,cc} | 483 * it will not return until the child process exits. See child_process_servi
ce.{h,cc} |
456 * | 484 * |
457 * @param serviceImpl The current ChildProcessServiceImpl object. | 485 * @param serviceImpl The current ChildProcessServiceImpl object. |
458 * renderer. | 486 * renderer. |
459 */ | 487 */ |
460 private static native void nativeInitChildProcessImpl( | 488 private static native void nativeInitChildProcessImpl( |
461 ChildProcessServiceImpl serviceImpl, int cpuCount, long cpuFeatures)
; | 489 ChildProcessServiceImpl serviceImpl, int cpuCount, long cpuFeatures)
; |
462 | 490 |
463 /** | 491 /** |
464 * Force the child process to exit. | 492 * Force the child process to exit. |
465 */ | 493 */ |
466 private static native void nativeExitChildProcess(); | 494 private static native void nativeExitChildProcess(); |
467 | 495 |
468 private native void nativeShutdownMainThread(); | 496 private native void nativeShutdownMainThread(); |
469 } | 497 } |
OLD | NEW |