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; |