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

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

Issue 2750123002: android: AtomicReference over ModerateBindingPoolLock (Closed)
Patch Set: fix Created 3 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 0cc7719db384f2ccc6a8403a89375656e6b7c4db..451abdbb0fba918090c484a6456cd0dd13d4cee3 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
@@ -20,6 +20,7 @@ import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
/**
* Manages oom bindings used to bound child services.
@@ -158,8 +159,8 @@ class BindingManagerImpl implements BindingManager {
}
}
- private final Object mModerateBindingPoolLock = new Object();
- private ModerateBindingPool mModerateBindingPool;
+ private final AtomicReference<ModerateBindingPool> mModerateBindingPool =
+ new AtomicReference<>();
/**
* Wraps ChildProcessConnection keeping track of additional information needed to manage the
@@ -201,10 +202,7 @@ class BindingManagerImpl implements BindingManager {
if (connection == null) return;
connection.addStrongBinding();
- ModerateBindingPool moderateBindingPool;
- synchronized (mModerateBindingPoolLock) {
- moderateBindingPool = mModerateBindingPool;
- }
+ ModerateBindingPool moderateBindingPool = mModerateBindingPool.get();
if (moderateBindingPool != null) moderateBindingPool.removeConnection(this);
}
@@ -242,10 +240,7 @@ class BindingManagerImpl implements BindingManager {
* @param connection The ChildProcessConnection to add to the moderate binding pool.
*/
private void addConnectionToModerateBindingPool(ChildProcessConnection connection) {
- ModerateBindingPool moderateBindingPool;
- synchronized (mModerateBindingPoolLock) {
- moderateBindingPool = mModerateBindingPool;
- }
+ ModerateBindingPool moderateBindingPool = mModerateBindingPool.get();
if (moderateBindingPool != null && !connection.isStrongBindingBound()) {
moderateBindingPool.addConnection(ManagedConnection.this);
}
@@ -332,7 +327,7 @@ class BindingManagerImpl implements BindingManager {
void clearConnection() {
mWasOomProtected = mConnection.isOomProtectedOrWasWhenDied();
- ModerateBindingPool moderateBindingPool = mModerateBindingPool;
+ ModerateBindingPool moderateBindingPool = mModerateBindingPool.get();
if (moderateBindingPool != null) moderateBindingPool.removeConnection(this);
mConnection = null;
}
@@ -449,10 +444,7 @@ class BindingManagerImpl implements BindingManager {
mBoundForBackgroundPeriod = mLastInForeground;
}
}
- ModerateBindingPool moderateBindingPool;
- synchronized (mModerateBindingPoolLock) {
- moderateBindingPool = mModerateBindingPool;
- }
+ ModerateBindingPool moderateBindingPool = mModerateBindingPool.get();
if (moderateBindingPool != null) moderateBindingPool.onSentToBackground(mOnTesting);
}
@@ -462,10 +454,7 @@ class BindingManagerImpl implements BindingManager {
mBoundForBackgroundPeriod.setBoundForBackgroundPeriod(false);
mBoundForBackgroundPeriod = null;
}
- ModerateBindingPool moderateBindingPool;
- synchronized (mModerateBindingPoolLock) {
- moderateBindingPool = mModerateBindingPool;
- }
+ ModerateBindingPool moderateBindingPool = mModerateBindingPool.get();
if (moderateBindingPool != null) moderateBindingPool.onBroughtToForeground();
}
@@ -501,23 +490,19 @@ class BindingManagerImpl implements BindingManager {
@Override
public void startModerateBindingManagement(
Context context, int maxSize, boolean moderateBindingTillBackgrounded) {
- synchronized (mModerateBindingPoolLock) {
- if (mIsLowMemoryDevice || mModerateBindingPool != null) return;
-
+ if (mIsLowMemoryDevice) return;
+ ModerateBindingPool pool = new ModerateBindingPool(maxSize);
+ if (mModerateBindingPool.compareAndSet(null, pool)) {
mModerateBindingTillBackgrounded = moderateBindingTillBackgrounded;
Log.i(TAG, "Moderate binding enabled: maxSize=%d", maxSize);
- mModerateBindingPool = new ModerateBindingPool(maxSize);
- if (context != null) context.registerComponentCallbacks(mModerateBindingPool);
+ if (context != null) context.registerComponentCallbacks(pool);
}
}
@Override
public void releaseAllModerateBindings() {
- ModerateBindingPool moderateBindingPool;
- synchronized (mModerateBindingPoolLock) {
- moderateBindingPool = mModerateBindingPool;
- }
+ ModerateBindingPool moderateBindingPool = mModerateBindingPool.get();
if (moderateBindingPool != null) {
Log.i(TAG, "Release all moderate bindings: %d", moderateBindingPool.size());
moderateBindingPool.evictAll();
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698