| Index: base/android/java/src/org/chromium/base/process_launcher/ManagedChildProcessConnection.java
|
| diff --git a/content/public/android/java/src/org/chromium/content/browser/ManagedChildProcessConnection.java b/base/android/java/src/org/chromium/base/process_launcher/ManagedChildProcessConnection.java
|
| similarity index 80%
|
| rename from content/public/android/java/src/org/chromium/content/browser/ManagedChildProcessConnection.java
|
| rename to base/android/java/src/org/chromium/base/process_launcher/ManagedChildProcessConnection.java
|
| index 9281f3afb1bd91296bfe9efad795a5103403ac6d..bf356ebc4086d081e6e5635931faa2cb1e9f605b 100644
|
| --- a/content/public/android/java/src/org/chromium/content/browser/ManagedChildProcessConnection.java
|
| +++ b/base/android/java/src/org/chromium/base/process_launcher/ManagedChildProcessConnection.java
|
| @@ -2,31 +2,31 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -package org.chromium.content.browser;
|
| +package org.chromium.base.process_launcher;
|
|
|
| import android.content.Context;
|
| import android.os.Bundle;
|
| +import android.os.Handler;
|
|
|
| import org.chromium.base.Log;
|
| import org.chromium.base.VisibleForTesting;
|
| -import org.chromium.base.process_launcher.ChildProcessCreationParams;
|
|
|
| /**
|
| * ManagedChildProcessConnection is a connection to a child service that can hold several bindings
|
| * to the service so it can be more or less agressively protected against OOM.
|
| - * Accessed from the launcher thread. (but for isOomProtectedOrWasWhenDied()).
|
| + * Accessed exclusively from the connection thread (the one specified in the constructor), but for
|
| + * isOomProtectedOrWasWhenDied().
|
| */
|
| public class ManagedChildProcessConnection extends BaseChildProcessConnection {
|
| private static final String TAG = "ManChildProcessConn";
|
|
|
| public static final Factory FACTORY = new BaseChildProcessConnection.Factory() {
|
| @Override
|
| - public BaseChildProcessConnection create(Context context, int number, boolean sandboxed,
|
| - DeathCallback deathCallback, String serviceClassName,
|
| + public BaseChildProcessConnection create(Handler handler, Context context, int number,
|
| + boolean sandboxed, DeathCallback deathCallback, String serviceClassName,
|
| Bundle childProcessCommonParameters, ChildProcessCreationParams creationParams) {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| - return new ManagedChildProcessConnection(context, number, sandboxed, deathCallback,
|
| - serviceClassName, childProcessCommonParameters, creationParams);
|
| + return new ManagedChildProcessConnection(handler, context, number, sandboxed,
|
| + deathCallback, serviceClassName, childProcessCommonParameters, creationParams);
|
| }
|
| };
|
|
|
| @@ -60,10 +60,10 @@ public class ManagedChildProcessConnection extends BaseChildProcessConnection {
|
| private boolean mUnbound;
|
|
|
| @VisibleForTesting
|
| - ManagedChildProcessConnection(Context context, int number, boolean sandboxed,
|
| + ManagedChildProcessConnection(Handler handler, Context context, int number, boolean sandboxed,
|
| DeathCallback deathCallback, String serviceClassName,
|
| Bundle childProcessCommonParameters, ChildProcessCreationParams creationParams) {
|
| - super(context, number, sandboxed, deathCallback, serviceClassName,
|
| + super(handler, context, number, sandboxed, deathCallback, serviceClassName,
|
| childProcessCommonParameters, creationParams);
|
|
|
| int initialFlags = Context.BIND_AUTO_CREATE;
|
| @@ -78,7 +78,7 @@ public class ManagedChildProcessConnection extends BaseChildProcessConnection {
|
|
|
| @Override
|
| protected boolean bind() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| assert !mUnbound;
|
| if (!mInitialBinding.bind()) {
|
| return false;
|
| @@ -90,7 +90,7 @@ public class ManagedChildProcessConnection extends BaseChildProcessConnection {
|
|
|
| @Override
|
| public void unbind() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| mUnbound = true;
|
| mInitialBinding.unbind();
|
| mStrongBinding.unbind();
|
| @@ -101,17 +101,17 @@ public class ManagedChildProcessConnection extends BaseChildProcessConnection {
|
| }
|
|
|
| public boolean isInitialBindingBound() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| return mInitialBinding.isBound();
|
| }
|
|
|
| public boolean isStrongBindingBound() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| return mStrongBinding.isBound();
|
| }
|
|
|
| public void removeInitialBinding() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| mInitialBinding.unbind();
|
| updateOomProtectedState();
|
| }
|
| @@ -120,14 +120,15 @@ public class ManagedChildProcessConnection extends BaseChildProcessConnection {
|
| * @return true if the connection is bound and OOM protected or was OOM protected when unbound.
|
| */
|
| public boolean isOomProtectedOrWasWhenDied() {
|
| - // WARNING: this method can be called from a thread other than the launcher thread.
|
| + // WARNING: this method can be called from a thread other than the connection's thread.
|
| // Note that it returns the current OOM protected state and is racy. This not really
|
| - // preventable without changing the caller's API, short of blocking.
|
| + // preventable as the renderer currently requires an API that returns a value and is accesed
|
| + // from a different thread (short of blocking, which is not acceptable either).
|
| return mOomProtected;
|
| }
|
|
|
| public void dropOomBindings() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| mInitialBinding.unbind();
|
|
|
| mStrongBindingCount = 0;
|
| @@ -138,7 +139,7 @@ public class ManagedChildProcessConnection extends BaseChildProcessConnection {
|
| }
|
|
|
| public void addStrongBinding() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| if (!isConnected()) {
|
| Log.w(TAG, "The connection is not bound for %d", getPid());
|
| return;
|
| @@ -151,7 +152,7 @@ public class ManagedChildProcessConnection extends BaseChildProcessConnection {
|
| }
|
|
|
| public void removeStrongBinding() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| if (!isConnected()) {
|
| Log.w(TAG, "The connection is not bound for %d", getPid());
|
| return;
|
| @@ -166,12 +167,12 @@ public class ManagedChildProcessConnection extends BaseChildProcessConnection {
|
| }
|
|
|
| public boolean isModerateBindingBound() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| return mModerateBinding.isBound();
|
| }
|
|
|
| public void addModerateBinding() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| if (!isConnected()) {
|
| Log.w(TAG, "The connection is not bound for %d", getPid());
|
| return;
|
| @@ -180,7 +181,7 @@ public class ManagedChildProcessConnection extends BaseChildProcessConnection {
|
| }
|
|
|
| public void removeModerateBinding() {
|
| - assert LauncherThread.runningOnLauncherThread();
|
| + checkOnValidThread();
|
| if (!isConnected()) {
|
| Log.w(TAG, "The connection is not bound for %d", getPid());
|
| return;
|
|
|