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

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

Issue 2818643002: Support ChildProcessAllocatorSettings in JUnit4 tests (Closed)
Patch Set: rebase 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: content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
index 1336d3df48b4d13702c679a91339b9262662b4e7..c6e5262d3b32f589c2c4e8f0b00bc11f8c7f187d 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
@@ -126,7 +126,7 @@ public class ChildProcessLauncher {
// Proactively releases all the moderate bindings once all the sandboxed services
// are allocated, which will be very likely to have some of them killed by OOM
// killer.
- sBindingManager.releaseAllModerateBindings();
+ getBindingManager().releaseAllModerateBindings();
}
}
return connection;
@@ -182,6 +182,9 @@ public class ChildProcessLauncher {
private static Map<Integer, ChildProcessConnection> sServiceMap =
new ConcurrentHashMap<Integer, ChildProcessConnection>();
+ // Lock for getBindingManager()
+ private static final Object sBindingManagerLock = new Object();
+
// These variables are used for the warm up sandboxed connection.
// |sSpareSandboxedConnection| is non-null when there is a pending connection. Note it's cleared
// to null again after the connection is used for a real child process.
@@ -193,15 +196,21 @@ public class ChildProcessLauncher {
private static boolean sSpareConnectionStarting;
private static ChildProcessConnection.StartCallback sSpareConnectionStartCallback;
- // Manages oom bindings used to bind chind services.
- private static BindingManager sBindingManager = BindingManagerImpl.createBindingManager();
+ // Manages oom bindings used to bind chind services. Lazily initialized by getBindingManager()
+ private static BindingManager sBindingManager;
// Whether the main application is currently brought to the foreground.
private static boolean sApplicationInForeground = true;
+ // Lazy initialize sBindingManager
// TODO(boliu): This should be internal to content.
public static BindingManager getBindingManager() {
- return sBindingManager;
+ synchronized (sBindingManagerLock) {
+ if (sBindingManager == null) {
+ sBindingManager = BindingManagerImpl.createBindingManager();
+ }
+ return sBindingManager;
+ }
}
@VisibleForTesting
@@ -214,7 +223,7 @@ public class ChildProcessLauncher {
* rely on renderer visibility signalled through setInForeground. See http://crbug.com/421041.
*/
public static void determinedVisibility(int pid) {
- sBindingManager.determinedVisibility(pid);
+ getBindingManager().determinedVisibility(pid);
}
/**
@@ -222,7 +231,7 @@ public class ChildProcessLauncher {
*/
public static void onSentToBackground() {
sApplicationInForeground = false;
- sBindingManager.onSentToBackground();
+ getBindingManager().onSentToBackground();
}
/**
@@ -236,7 +245,7 @@ public class ChildProcessLauncher {
* sent to the background.
*/
public static void startModerateBindingManagement(Context context) {
- sBindingManager.startModerateBindingManagement(context,
+ getBindingManager().startModerateBindingManagement(context,
ChildConnectionAllocator.getNumberOfServices(
context, true, context.getPackageName()));
}
@@ -246,7 +255,7 @@ public class ChildProcessLauncher {
*/
public static void onBroughtToForeground() {
sApplicationInForeground = true;
- sBindingManager.onBroughtToForeground();
+ getBindingManager().onBroughtToForeground();
}
/**
@@ -466,7 +475,7 @@ public class ChildProcessLauncher {
public void onConnected(int pid) {
Log.d(TAG, "on connect callback, pid=%d", pid);
if (pid != NULL_PROCESS_HANDLE) {
- sBindingManager.addNewConnection(pid, connection);
+ getBindingManager().addNewConnection(pid, connection);
sServiceMap.put(pid, connection);
}
// If the connection fails and pid == 0, the Java-side cleanup was already
@@ -495,7 +504,7 @@ public class ChildProcessLauncher {
// Can happen for single process.
return;
}
- sBindingManager.clearConnection(pid);
+ getBindingManager().clearConnection(pid);
connection.stop();
freeConnection(connection);
}

Powered by Google App Engine
This is Rietveld 408576698