| 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 for (FileDescriptorInfo fdInfo : mFdInfos) { | 263 |
| 264 nativeRegisterGlobalFileDescriptor( | 264 int[] fileIds = new int[mFdInfos.length]; |
| 265 fdInfo.mId, fdInfo.mFd.detachFd(), fdInfo.mOffse
t, fdInfo.mSize); | 265 int[] fds = new int[mFdInfos.length]; |
| 266 long[] regionOffsets = new long[mFdInfos.length]; |
| 267 long[] regionSizes = new long[mFdInfos.length]; |
| 268 for (int i = 0; i < mFdInfos.length; i++) { |
| 269 FileDescriptorInfo fdInfo = mFdInfos[i]; |
| 270 fileIds[i] = fdInfo.mId; |
| 271 fds[i] = fdInfo.mFd.detachFd(); |
| 272 regionOffsets[i] = fdInfo.mOffset; |
| 273 regionSizes[i] = fdInfo.mSize; |
| 266 } | 274 } |
| 275 nativeRegisterFileDescriptors(fileIds, fds, regionOffsets, r
egionSizes); |
| 267 nativeInitChildProcessImpl(ChildProcessServiceImpl.this, mCp
uCount, | 276 nativeInitChildProcessImpl(ChildProcessServiceImpl.this, mCp
uCount, |
| 268 mCpuFeatures); | 277 mCpuFeatures); |
| 269 if (mActivitySemaphore.tryAcquire()) { | 278 if (mActivitySemaphore.tryAcquire()) { |
| 270 ContentMain.start(); | 279 ContentMain.start(); |
| 271 nativeExitChildProcess(); | 280 nativeExitChildProcess(); |
| 272 } | 281 } |
| 273 } catch (InterruptedException e) { | 282 } catch (InterruptedException e) { |
| 274 Log.w(TAG, "%s startup failed: %s", MAIN_THREAD_NAME, e); | 283 Log.w(TAG, "%s startup failed: %s", MAIN_THREAD_NAME, e); |
| 275 } catch (ProcessInitException e) { | 284 } catch (ProcessInitException e) { |
| 276 Log.w(TAG, "%s startup failed: %s", MAIN_THREAD_NAME, e); | 285 Log.w(TAG, "%s startup failed: %s", MAIN_THREAD_NAME, e); |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 394 try { | 403 try { |
| 395 SurfaceWrapper wrapper = mCallback.getViewSurface(surfaceId); | 404 SurfaceWrapper wrapper = mCallback.getViewSurface(surfaceId); |
| 396 return wrapper != null ? wrapper.getSurface() : null; | 405 return wrapper != null ? wrapper.getSurface() : null; |
| 397 } catch (RemoteException e) { | 406 } catch (RemoteException e) { |
| 398 Log.e(TAG, "Unable to call getViewSurface: %s", e); | 407 Log.e(TAG, "Unable to call getViewSurface: %s", e); |
| 399 return null; | 408 return null; |
| 400 } | 409 } |
| 401 } | 410 } |
| 402 | 411 |
| 403 /** | 412 /** |
| 404 * Helper for registering FileDescriptorInfo objects with GlobalFileDescript
ors. | 413 * Helper for registering FileDescriptorInfo objects with GlobalFileDescript
ors or |
| 414 * FileDescriptorStore. |
| 405 * This includes the IPC channel, the crash dump signals and resource relate
d | 415 * This includes the IPC channel, the crash dump signals and resource relate
d |
| 406 * files. | 416 * files. |
| 407 */ | 417 */ |
| 408 private static native void nativeRegisterGlobalFileDescriptor( | 418 private static native void nativeRegisterFileDescriptors( |
| 409 int id, int fd, long offset, long size); | 419 int[] id, int[] fd, long[] offset, long[] size); |
| 410 | 420 |
| 411 /** | 421 /** |
| 412 * The main entry point for a child process. This should be called from a ne
w thread since | 422 * 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} | 423 * it will not return until the child process exits. See child_process_servi
ce.{h,cc} |
| 414 * | 424 * |
| 415 * @param serviceImpl The current ChildProcessServiceImpl object. | 425 * @param serviceImpl The current ChildProcessServiceImpl object. |
| 416 * renderer. | 426 * renderer. |
| 417 */ | 427 */ |
| 418 private static native void nativeInitChildProcessImpl( | 428 private static native void nativeInitChildProcessImpl( |
| 419 ChildProcessServiceImpl serviceImpl, int cpuCount, long cpuFeatures)
; | 429 ChildProcessServiceImpl serviceImpl, int cpuCount, long cpuFeatures)
; |
| 420 | 430 |
| 421 /** | 431 /** |
| 422 * Force the child process to exit. | 432 * Force the child process to exit. |
| 423 */ | 433 */ |
| 424 private static native void nativeExitChildProcess(); | 434 private static native void nativeExitChildProcess(); |
| 425 | 435 |
| 426 private native void nativeShutdownMainThread(); | 436 private native void nativeShutdownMainThread(); |
| 427 } | 437 } |
| OLD | NEW |