Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(114)

Unified Diff: base/android/java/src/org/chromium/base/process_launcher/BindingManagerImpl.java

Issue 2845243002: Moving BindingManager and ChildProcessConnection to base/.
Patch Set: Moving BindingManager and ChildProcessConnection to base/. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/android/java/src/org/chromium/base/process_launcher/BindingManagerImpl.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/BindingManagerImpl.java b/base/android/java/src/org/chromium/base/process_launcher/BindingManagerImpl.java
similarity index 90%
rename from content/public/android/java/src/org/chromium/content/browser/BindingManagerImpl.java
rename to base/android/java/src/org/chromium/base/process_launcher/BindingManagerImpl.java
index 583a76c8a508f442f3553b04748dc1e8b4b23016..2a68edc285481cefe13a2df3d4aef27e5d573292 100644
--- a/content/public/android/java/src/org/chromium/content/browser/BindingManagerImpl.java
+++ b/base/android/java/src/org/chromium/base/process_launcher/BindingManagerImpl.java
@@ -2,13 +2,15 @@
// 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.annotation.TargetApi;
import android.content.ComponentCallbacks2;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Build;
+import android.os.Handler;
+import android.os.Looper;
import android.util.LruCache;
import android.util.SparseArray;
@@ -24,8 +26,8 @@ import java.util.Map;
* Manages oom bindings used to bound child services.
* This object must only be accessed from the launcher thread.
*/
-class BindingManagerImpl implements BindingManager {
- private static final String TAG = "cr.BindingManager";
+public class BindingManagerImpl implements BindingManager {
+ private static final String TAG = "cr_BindingManager";
// Low reduce ratio of moderate binding.
private static final float MODERATE_BINDING_LOW_REDUCE_RATIO = 0.25f;
@@ -39,11 +41,14 @@ class BindingManagerImpl implements BindingManager {
// Delays used when clearing moderate binding pool when onSentToBackground happens.
private static final long MODERATE_BINDING_POOL_CLEARER_DELAY_MILLIS = 10 * 1000;
+ // The handler for the thread this BindingManager should be accessed on.
+ private final Handler mHandler;
+
// These fields allow to override the parameters for testing - see
// createBindingManagerForTesting().
private final boolean mIsLowMemoryDevice;
- private static class ModerateBindingPool
+ private class ModerateBindingPool
extends LruCache<Integer, ManagedConnection> implements ComponentCallbacks2 {
private Runnable mDelayedClearer;
@@ -54,7 +59,7 @@ class BindingManagerImpl implements BindingManager {
@Override
public void onTrimMemory(final int level) {
ThreadUtils.assertOnUiThread();
- LauncherThread.post(new Runnable() {
+ mHandler.post(new Runnable() {
@Override
public void run() {
Log.i(TAG, "onTrimMemory: level=%d, size=%d", level, size());
@@ -78,7 +83,7 @@ class BindingManagerImpl implements BindingManager {
@Override
public void onLowMemory() {
ThreadUtils.assertOnUiThread();
- LauncherThread.post(new Runnable() {
+ mHandler.post(new Runnable() {
@Override
public void run() {
Log.i(TAG, "onLowMemory: evict %d bindings", size());
@@ -153,12 +158,12 @@ class BindingManagerImpl implements BindingManager {
evictAll();
}
};
- LauncherThread.postDelayed(mDelayedClearer, MODERATE_BINDING_POOL_CLEARER_DELAY_MILLIS);
+ mHandler.postDelayed(mDelayedClearer, MODERATE_BINDING_POOL_CLEARER_DELAY_MILLIS);
}
void onBroughtToForeground() {
if (mDelayedClearer != null) {
- LauncherThread.removeCallbacks(mDelayedClearer);
+ mHandler.removeCallbacks(mDelayedClearer);
mDelayedClearer = null;
}
}
@@ -230,7 +235,7 @@ class BindingManagerImpl implements BindingManager {
if (mIsLowMemoryDevice) {
doUnbind.run();
} else {
- LauncherThread.postDelayed(doUnbind, DETACH_AS_ACTIVE_HIGH_END_DELAY_MILLIS);
+ mHandler.postDelayed(doUnbind, DETACH_AS_ACTIVE_HIGH_END_DELAY_MILLIS);
}
}
@@ -338,15 +343,15 @@ class BindingManagerImpl implements BindingManager {
* The constructor is private to hide parameters exposed for testing from the regular consumer.
* Use factory methods to create an instance.
*/
- private BindingManagerImpl(boolean isLowMemoryDevice, boolean onTesting) {
- assert LauncherThread.runningOnLauncherThread();
+ private BindingManagerImpl(Handler handler, boolean isLowMemoryDevice, boolean onTesting) {
+ mHandler = handler;
+ checkOnValidThread();
mIsLowMemoryDevice = isLowMemoryDevice;
mOnTesting = onTesting;
}
- public static BindingManagerImpl createBindingManager() {
- assert LauncherThread.runningOnLauncherThread();
- return new BindingManagerImpl(SysUtils.isLowEndDevice(), false);
+ public static BindingManagerImpl createBindingManager(Handler handler) {
+ return new BindingManagerImpl(handler, SysUtils.isLowEndDevice(), false);
}
/**
@@ -354,14 +359,14 @@ class BindingManagerImpl implements BindingManager {
* set to 0, so that the tests don't need to deal with actual waiting.
* @param isLowEndDevice true iff the created instance should apply low-end binding policies
*/
- public static BindingManagerImpl createBindingManagerForTesting(boolean isLowEndDevice) {
- assert LauncherThread.runningOnLauncherThread();
- return new BindingManagerImpl(isLowEndDevice, true);
+ public static BindingManagerImpl createBindingManagerForTesting(
+ Handler handler, boolean isLowEndDevice) {
+ return new BindingManagerImpl(handler, isLowEndDevice, true);
}
@Override
public void addNewConnection(int pid, ManagedChildProcessConnection connection) {
- assert LauncherThread.runningOnLauncherThread();
+ checkOnValidThread();
// This will reset the previous entry for the pid in the unlikely event of the OS
// reusing renderer pids.
mManagedConnections.put(pid, new ManagedConnection(connection));
@@ -369,7 +374,7 @@ class BindingManagerImpl implements BindingManager {
@Override
public void setInForeground(int pid, boolean inForeground) {
- assert LauncherThread.runningOnLauncherThread();
+ checkOnValidThread();
ManagedConnection managedConnection = mManagedConnections.get(pid);
if (managedConnection == null) {
Log.w(TAG, "Cannot setInForeground() - never saw a connection for the pid: %d", pid);
@@ -387,11 +392,13 @@ class BindingManagerImpl implements BindingManager {
@Override
public void onDeterminedVisibility(int pid) {
- assert LauncherThread.runningOnLauncherThread();
+ checkOnValidThread();
ManagedConnection managedConnection = mManagedConnections.get(pid);
if (managedConnection == null) {
- Log.w(TAG, "Cannot call determinedVisibility() - never saw a connection for the pid: "
- + "%d", pid);
+ Log.w(TAG,
+ "Cannot call determinedVisibility() - never saw a connection for the pid: "
+ + "%d",
+ pid);
return;
}
@@ -400,7 +407,7 @@ class BindingManagerImpl implements BindingManager {
@Override
public void onSentToBackground() {
- assert LauncherThread.runningOnLauncherThread();
+ checkOnValidThread();
assert mBoundForBackgroundPeriod == null;
// mLastInForeground can be null at this point as the embedding application could be
// used in foreground without spawning any renderers.
@@ -413,7 +420,7 @@ class BindingManagerImpl implements BindingManager {
@Override
public void onBroughtToForeground() {
- assert LauncherThread.runningOnLauncherThread();
+ checkOnValidThread();
if (mBoundForBackgroundPeriod != null) {
mBoundForBackgroundPeriod.setBoundForBackgroundPeriod(false);
mBoundForBackgroundPeriod = null;
@@ -423,7 +430,7 @@ class BindingManagerImpl implements BindingManager {
@Override
public void removeConnection(int pid) {
- assert LauncherThread.runningOnLauncherThread();
+ checkOnValidThread();
ManagedConnection managedConnection = mManagedConnections.get(pid);
if (managedConnection != null) {
mManagedConnections.remove(pid);
@@ -434,13 +441,13 @@ class BindingManagerImpl implements BindingManager {
/** @return true iff the connection reference is no longer held */
@VisibleForTesting
public boolean isConnectionCleared(int pid) {
- assert LauncherThread.runningOnLauncherThread();
+ checkOnValidThread();
return mManagedConnections.get(pid) == null;
}
@Override
public void startModerateBindingManagement(Context context, int maxSize) {
- assert LauncherThread.runningOnLauncherThread();
+ checkOnValidThread();
if (mIsLowMemoryDevice) return;
if (mModerateBindingPool == null) {
@@ -456,10 +463,15 @@ class BindingManagerImpl implements BindingManager {
@Override
public void releaseAllModerateBindings() {
- assert LauncherThread.runningOnLauncherThread();
+ checkOnValidThread();
if (mModerateBindingPool != null) {
Log.i(TAG, "Release all moderate bindings: %d", mModerateBindingPool.size());
mModerateBindingPool.evictAll();
}
}
+
+ /** Checks whether the caller is running on the thread specified at creation time. */
+ private final void checkOnValidThread() {
+ assert mHandler.getLooper() == Looper.myLooper();
+ }
}

Powered by Google App Engine
This is Rietveld 408576698