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

Unified Diff: content/public/android/java/src/org/chromium/content/browser/ManagedChildProcessConnection.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: content/public/android/java/src/org/chromium/content/browser/ManagedChildProcessConnection.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/ManagedChildProcessConnection.java b/content/public/android/java/src/org/chromium/content/browser/ManagedChildProcessConnection.java
deleted file mode 100644
index 9281f3afb1bd91296bfe9efad795a5103403ac6d..0000000000000000000000000000000000000000
--- a/content/public/android/java/src/org/chromium/content/browser/ManagedChildProcessConnection.java
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// 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;
-
-import android.content.Context;
-import android.os.Bundle;
-
-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()).
- */
-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,
- Bundle childProcessCommonParameters, ChildProcessCreationParams creationParams) {
- assert LauncherThread.runningOnLauncherThread();
- return new ManagedChildProcessConnection(context, number, sandboxed, deathCallback,
- serviceClassName, childProcessCommonParameters, creationParams);
- }
- };
-
- // Initial binding protects the newly spawned process from being killed before it is put to use,
- // it is maintained between calls to start() and removeInitialBinding().
- private final ChildServiceConnection mInitialBinding;
-
- // Strong binding will make the service priority equal to the priority of the activity. We want
- // the OS to be able to kill background renderers as it kills other background apps, so strong
- // bindings are maintained only for services that are active at the moment (between
- // addStrongBinding() and removeStrongBinding()).
- private final ChildServiceConnection mStrongBinding;
-
- // Low priority binding maintained in the entire lifetime of the connection, i.e. between calls
- // to start() and stop().
- private final ChildServiceConnection mWaivedBinding;
-
- // Incremented on addStrongBinding(), decremented on removeStrongBinding().
- private int mStrongBindingCount;
-
- // Moderate binding will make the service priority equal to the priority of a visible process
- // while the app is in the foreground. It will stay bound only while the app is in the
- // foreground to protect a background process from the system out-of-memory killer.
- private final ChildServiceConnection mModerateBinding;
-
- // Indicates whether the connection is OOM protected (if the connection is unbound, it contains
- // the state at time of unbinding).
- private boolean mOomProtected;
-
- // Set to true once unbind() was called.
- private boolean mUnbound;
-
- @VisibleForTesting
- ManagedChildProcessConnection(Context context, int number, boolean sandboxed,
- DeathCallback deathCallback, String serviceClassName,
- Bundle childProcessCommonParameters, ChildProcessCreationParams creationParams) {
- super(context, number, sandboxed, deathCallback, serviceClassName,
- childProcessCommonParameters, creationParams);
-
- int initialFlags = Context.BIND_AUTO_CREATE;
- int extraBindFlags = shouldBindAsExportedService() ? Context.BIND_EXTERNAL_SERVICE : 0;
- mInitialBinding = createServiceConnection(initialFlags | extraBindFlags);
- mStrongBinding = createServiceConnection(
- Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT | extraBindFlags);
- mWaivedBinding = createServiceConnection(
- Context.BIND_AUTO_CREATE | Context.BIND_WAIVE_PRIORITY | extraBindFlags);
- mModerateBinding = createServiceConnection(Context.BIND_AUTO_CREATE | extraBindFlags);
- }
-
- @Override
- protected boolean bind() {
- assert LauncherThread.runningOnLauncherThread();
- assert !mUnbound;
- if (!mInitialBinding.bind()) {
- return false;
- }
- updateOomProtectedState();
- mWaivedBinding.bind();
- return true;
- }
-
- @Override
- public void unbind() {
- assert LauncherThread.runningOnLauncherThread();
- mUnbound = true;
- mInitialBinding.unbind();
- mStrongBinding.unbind();
- // Note that we don't update the OOM state here as to preserve the last OOM state.
- mWaivedBinding.unbind();
- mModerateBinding.unbind();
- mStrongBindingCount = 0;
- }
-
- public boolean isInitialBindingBound() {
- assert LauncherThread.runningOnLauncherThread();
- return mInitialBinding.isBound();
- }
-
- public boolean isStrongBindingBound() {
- assert LauncherThread.runningOnLauncherThread();
- return mStrongBinding.isBound();
- }
-
- public void removeInitialBinding() {
- assert LauncherThread.runningOnLauncherThread();
- mInitialBinding.unbind();
- updateOomProtectedState();
- }
-
- /**
- * @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.
- // 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.
- return mOomProtected;
- }
-
- public void dropOomBindings() {
- assert LauncherThread.runningOnLauncherThread();
- mInitialBinding.unbind();
-
- mStrongBindingCount = 0;
- mStrongBinding.unbind();
- updateOomProtectedState();
-
- mModerateBinding.unbind();
- }
-
- public void addStrongBinding() {
- assert LauncherThread.runningOnLauncherThread();
- if (!isConnected()) {
- Log.w(TAG, "The connection is not bound for %d", getPid());
- return;
- }
- if (mStrongBindingCount == 0) {
- mStrongBinding.bind();
- updateOomProtectedState();
- }
- mStrongBindingCount++;
- }
-
- public void removeStrongBinding() {
- assert LauncherThread.runningOnLauncherThread();
- if (!isConnected()) {
- Log.w(TAG, "The connection is not bound for %d", getPid());
- return;
- }
- assert mStrongBindingCount > 0;
- mStrongBindingCount--;
- if (mStrongBindingCount == 0) {
- mStrongBinding.unbind();
- updateOomProtectedState();
- }
- updateOomProtectedState();
- }
-
- public boolean isModerateBindingBound() {
- assert LauncherThread.runningOnLauncherThread();
- return mModerateBinding.isBound();
- }
-
- public void addModerateBinding() {
- assert LauncherThread.runningOnLauncherThread();
- if (!isConnected()) {
- Log.w(TAG, "The connection is not bound for %d", getPid());
- return;
- }
- mModerateBinding.bind();
- }
-
- public void removeModerateBinding() {
- assert LauncherThread.runningOnLauncherThread();
- if (!isConnected()) {
- Log.w(TAG, "The connection is not bound for %d", getPid());
- return;
- }
- mModerateBinding.unbind();
- }
-
- // Should be called every time the mInitialBinding or mStrongBinding are bound/unbound.
- private void updateOomProtectedState() {
- if (!mUnbound) {
- mOomProtected = mInitialBinding.isBound() || mStrongBinding.isBound();
- }
- }
-}

Powered by Google App Engine
This is Rietveld 408576698