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

Unified Diff: content/public/android/java/src/org/chromium/content/browser/BindingManagerImpl.java

Issue 673573003: Android: remove the initial binding when the renderer commits. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix a Java checkstyle warning. Created 6 years, 1 month 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: content/public/android/java/src/org/chromium/content/browser/BindingManagerImpl.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/BindingManagerImpl.java b/content/public/android/java/src/org/chromium/content/browser/BindingManagerImpl.java
index dfd1a7cc01b7043115be149cfd906ae7025fe07b..64582076563ef9df10b77a678bd4fffcd0f42815 100644
--- a/content/public/android/java/src/org/chromium/content/browser/BindingManagerImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/BindingManagerImpl.java
@@ -17,16 +17,12 @@ import org.chromium.base.VisibleForTesting;
class BindingManagerImpl implements BindingManager {
private static final String TAG = "BindingManager";
- // Delay of 1 second used when removing the initial oom binding of a process.
- private static final long REMOVE_INITIAL_BINDING_DELAY_MILLIS = 1 * 1000;
-
// Delay of 1 second used when removing temporary strong binding of a process (only on
// non-low-memory devices).
private static final long DETACH_AS_ACTIVE_HIGH_END_DELAY_MILLIS = 1 * 1000;
// These fields allow to override the parameters for testing - see
// createBindingManagerForTesting().
- private final long mRemoveInitialBindingDelay;
private final long mRemoveStrongBindingDelay;
private final boolean mIsLowMemoryDevice;
@@ -53,17 +49,8 @@ class BindingManagerImpl implements BindingManager {
/** Removes the initial service binding. */
private void removeInitialBinding() {
- final ChildProcessConnection connection = mConnection;
- if (connection == null || !connection.isInitialBindingBound()) return;
-
- ThreadUtils.postOnUiThreadDelayed(new Runnable() {
- @Override
- public void run() {
- if (connection.isInitialBindingBound()) {
- connection.removeInitialBinding();
- }
- }
- }, mRemoveInitialBindingDelay);
+ if (mConnection == null || !mConnection.isInitialBindingBound()) return;
+ mConnection.removeInitialBinding();
}
/** Adds a strong service binding. */
@@ -116,8 +103,7 @@ class BindingManagerImpl implements BindingManager {
}
/**
- * Sets the visibility of the service, adding or removing the strong binding as needed. This
- * also removes the initial binding, as the service visibility is now known.
+ * Sets the visibility of the service, adding or removing the strong binding as needed.
*/
void setInForeground(boolean nextInForeground) {
if (!mInForeground && nextInForeground) {
@@ -126,11 +112,17 @@ class BindingManagerImpl implements BindingManager {
removeStrongBinding();
}
- removeInitialBinding();
mInForeground = nextInForeground;
}
/**
+ * Removes the initial binding.
+ */
+ void determinedVisibility() {
+ removeInitialBinding();
+ }
+
+ /**
* Sets or removes additional binding when the service is main service during the embedder
* background period.
*/
@@ -185,16 +177,14 @@ 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, long removeInitialBindingDelay,
- long removeStrongBindingDelay) {
+ private BindingManagerImpl(boolean isLowMemoryDevice, long removeStrongBindingDelay) {
mIsLowMemoryDevice = isLowMemoryDevice;
- mRemoveInitialBindingDelay = removeInitialBindingDelay;
mRemoveStrongBindingDelay = removeStrongBindingDelay;
}
public static BindingManagerImpl createBindingManager() {
return new BindingManagerImpl(SysUtils.isLowEndDevice(),
- REMOVE_INITIAL_BINDING_DELAY_MILLIS, DETACH_AS_ACTIVE_HIGH_END_DELAY_MILLIS);
+ DETACH_AS_ACTIVE_HIGH_END_DELAY_MILLIS);
}
/**
@@ -203,7 +193,7 @@ class BindingManagerImpl implements BindingManager {
* @param isLowEndDevice true iff the created instance should apply low-end binding policies
*/
public static BindingManagerImpl createBindingManagerForTesting(boolean isLowEndDevice) {
- return new BindingManagerImpl(isLowEndDevice, 0, 0);
+ return new BindingManagerImpl(isLowEndDevice, 0);
}
@Override
@@ -239,6 +229,22 @@ class BindingManagerImpl implements BindingManager {
}
@Override
+ public void determinedVisibility(int pid) {
+ ManagedConnection managedConnection;
+ synchronized (mManagedConnections) {
+ managedConnection = mManagedConnections.get(pid);
+ }
+
+ if (managedConnection == null) {
+ Log.w(TAG, "Cannot call determinedVisibility() - never saw a connection for the pid: "
+ + Integer.toString(pid));
+ return;
+ }
+
+ managedConnection.determinedVisibility();
+ }
+
+ @Override
public void onSentToBackground() {
assert mBoundForBackgroundPeriod == null;
synchronized (mLastInForegroundLock) {

Powered by Google App Engine
This is Rietveld 408576698