| Index: base/test/android/java/src/org/chromium/base/MultiprocessTestClientService.java
|
| diff --git a/base/test/android/java/src/org/chromium/base/MultiprocessTestClientService.java b/base/test/android/java/src/org/chromium/base/MultiprocessTestClientService.java
|
| deleted file mode 100644
|
| index 112bdbeca84c9f1949dc150e8ea498282bd352e6..0000000000000000000000000000000000000000
|
| --- a/base/test/android/java/src/org/chromium/base/MultiprocessTestClientService.java
|
| +++ /dev/null
|
| @@ -1,147 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -package org.chromium.base;
|
| -
|
| -import android.app.Service;
|
| -import android.content.Intent;
|
| -import android.os.Handler;
|
| -import android.os.IBinder;
|
| -import android.os.Process;
|
| -
|
| -import org.chromium.base.annotations.CalledByNative;
|
| -import org.chromium.base.annotations.JNINamespace;
|
| -import org.chromium.base.annotations.SuppressFBWarnings;
|
| -import org.chromium.base.library_loader.LibraryLoader;
|
| -import org.chromium.base.library_loader.LibraryProcessType;
|
| -import org.chromium.base.library_loader.ProcessInitException;
|
| -
|
| -import javax.annotation.concurrent.GuardedBy;
|
| -
|
| -/**
|
| - * The service implementation used to host all multiprocess test client code.
|
| - */
|
| -@JNINamespace("base::android")
|
| -public class MultiprocessTestClientService extends Service {
|
| - private static final String TAG = "cr_TestClient";
|
| -
|
| - private static boolean sAlreadyInitialized = false;
|
| -
|
| - private final Handler mHandler = new Handler();
|
| -
|
| - private final Object mResultLock = new Object();
|
| -
|
| - @GuardedBy("mResultLock")
|
| - private MainReturnCodeResult mResult;
|
| -
|
| - private final ITestClient.Stub mBinder = new ITestClient.Stub() {
|
| - @Override
|
| - public int launch(final String[] commandLine, FileDescriptorInfo[] fdsToMap) {
|
| - final int[] fdKeys = new int[fdsToMap.length];
|
| - final int[] fdFds = new int[fdsToMap.length];
|
| - for (int i = 0; i < fdsToMap.length; i++) {
|
| - fdKeys[i] = fdsToMap[i].key;
|
| - // Take ownership of the file descriptor so they outlive the FileDescriptorInfo
|
| - // instances. Native code will own them.
|
| - fdFds[i] = fdsToMap[i].fd.detachFd();
|
| - }
|
| - // Don't run main directly, it would block and the response would not be returned.
|
| - // We post to the main thread as this thread does not have a Looper.
|
| - mHandler.post(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - nativeRunMain(commandLine, fdKeys, fdFds);
|
| - }
|
| - });
|
| - return Process.myPid();
|
| - }
|
| -
|
| - @SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE")
|
| - @Override
|
| - public MainReturnCodeResult waitForMainToReturn(int timeoutMs) {
|
| - synchronized (mResultLock) {
|
| - while (mResult == null) {
|
| - try {
|
| - mResultLock.wait(timeoutMs);
|
| - } catch (InterruptedException ie) {
|
| - continue;
|
| - }
|
| - // Check if we timed-out.
|
| - if (mResult == null) {
|
| - Log.e(TAG, "Failed to wait for main return value.");
|
| - return new MainReturnCodeResult(0, true /* timed-out */);
|
| - }
|
| - }
|
| - return mResult;
|
| - }
|
| - }
|
| -
|
| - @SuppressFBWarnings("DM_EXIT")
|
| - @Override
|
| - public boolean forceStopSynchronous(int exitCode) {
|
| - System.exit(exitCode);
|
| - return true;
|
| - }
|
| -
|
| - @SuppressFBWarnings("DM_EXIT")
|
| - @Override
|
| - public void forceStop(int exitCode) {
|
| - System.exit(exitCode);
|
| - }
|
| - };
|
| -
|
| - @SuppressFBWarnings("DM_EXIT")
|
| - @Override
|
| - public void onCreate() {
|
| - super.onCreate();
|
| -
|
| - if (sAlreadyInitialized) {
|
| - // The framework controls how services are reused and even though nothing is bound to a
|
| - // service it might be kept around. Since we really want to fork a new process when we
|
| - // bind, we'll kill the process early when a service is reused, forcing the framework to
|
| - // recreate the service in a new process.
|
| - // This is not ideal, but there are no clear alternatives at this point.
|
| - Log.e(TAG, "Service being reused, forcing stoppage.");
|
| - System.exit(0);
|
| - return;
|
| - }
|
| - markInitialized();
|
| -
|
| - ContextUtils.initApplicationContext(getApplicationContext());
|
| -
|
| - PathUtils.setPrivateDataDirectorySuffix("chrome_multiprocess_test_client_service");
|
| -
|
| - loadLibraries();
|
| - }
|
| -
|
| - @Override
|
| - public IBinder onBind(Intent intent) {
|
| - return mBinder;
|
| - }
|
| -
|
| - private void loadLibraries() {
|
| - try {
|
| - LibraryLoader.get(LibraryProcessType.PROCESS_CHILD).loadNow();
|
| - } catch (ProcessInitException pie) {
|
| - Log.e(TAG, "Unable to load native libraries.", pie);
|
| - }
|
| - ContextUtils.initApplicationContextForNative();
|
| - }
|
| -
|
| - @CalledByNative
|
| - private void setMainReturnValue(int result) {
|
| - synchronized (mResultLock) {
|
| - mResult = new MainReturnCodeResult(result, false /* timed-out */);
|
| - mResultLock.notifyAll();
|
| - }
|
| - }
|
| -
|
| - private static void markInitialized() {
|
| - // We don't set sAlreadyInitialized directly in onCreate to avoid FindBugs complaining about
|
| - // a static member been set from a non-static function.
|
| - sAlreadyInitialized = true;
|
| - }
|
| -
|
| - private native void nativeRunMain(String[] commandLine, int[] fdsToMapIds, int[] fdsToMapFds);
|
| -}
|
|
|