Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a31fb7d1 authored by Christopher Tate's avatar Christopher Tate Committed by The Android Open Source Project
Browse files

am 6fa95976: Apply OOM adjustment while an app is undergoing backup

Merge commit '6fa95976'

* commit '6fa95976':
  Apply OOM adjustment while an app is undergoing backup
parents 5f0a472c 6fa95976
Loading
Loading
Loading
Loading
+28 −3
Original line number Diff line number Diff line
@@ -289,6 +289,10 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
    // because the user interacts with it so much.
    final int HOME_APP_ADJ;

    // This is a process currently hosting a backup operation.  Killing it
    // is not entirely fatal but is generally a bad idea.
    final int BACKUP_APP_ADJ;

    // This is a process holding a secondary server -- killing it will not
    // have much of an impact as far as the user is concerned. Value set in
    // system/rootdir/init.rc on startup.
@@ -317,6 +321,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
    final int EMPTY_APP_MEM;
    final int HIDDEN_APP_MEM;
    final int HOME_APP_MEM;
    final int BACKUP_APP_MEM;
    final int SECONDARY_SERVER_MEM;
    final int VISIBLE_APP_MEM;
    final int FOREGROUND_APP_MEM;
@@ -1358,6 +1363,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
            Integer.valueOf(SystemProperties.get("ro.VISIBLE_APP_ADJ"));
        SECONDARY_SERVER_ADJ =
            Integer.valueOf(SystemProperties.get("ro.SECONDARY_SERVER_ADJ"));
        BACKUP_APP_ADJ =
            Integer.valueOf(SystemProperties.get("ro.BACKUP_APP_ADJ"));
        HOME_APP_ADJ =
            Integer.valueOf(SystemProperties.get("ro.HOME_APP_ADJ"));
        HIDDEN_APP_MIN_ADJ =
@@ -1373,6 +1380,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
            Integer.valueOf(SystemProperties.get("ro.VISIBLE_APP_MEM"))*PAGE_SIZE;
        SECONDARY_SERVER_MEM =
            Integer.valueOf(SystemProperties.get("ro.SECONDARY_SERVER_MEM"))*PAGE_SIZE;
        BACKUP_APP_MEM =
            Integer.valueOf(SystemProperties.get("ro.BACKUP_APP_MEM"))*PAGE_SIZE;
        HOME_APP_MEM =
            Integer.valueOf(SystemProperties.get("ro.HOME_APP_MEM"))*PAGE_SIZE;
        HIDDEN_APP_MEM =
@@ -10344,6 +10353,9 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
            mBackupTarget = r;
            mBackupAppName = app.packageName;

            // Try not to kill the process during backup
            updateOomAdjLocked(proc);

            // If the process is already attached, schedule the creation of the backup agent now.
            // If it is not yet live, this will be done when it attaches to the framework.
            if (proc.thread != null) {
@@ -10403,14 +10415,19 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
                return;
            }

            ProcessRecord proc = mBackupTarget.app;
            mBackupTarget = null;
            mBackupAppName = null;

            // Not backing this app up any more; reset its OOM adjustment
            updateOomAdjLocked(proc);

            try {
                mBackupTarget.app.thread.scheduleDestroyBackupAgent(appInfo);
                proc.thread.scheduleDestroyBackupAgent(appInfo);
            } catch (Exception e) {
                Log.e(TAG, "Exception when unbinding backup agent:");
                e.printStackTrace();
            }
            mBackupTarget = null;
            mBackupAppName = null;
        }
    }
    // =========================================================
@@ -11885,6 +11902,14 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
        app.curRawAdj = adj;
        app.curAdj = adj <= app.maxAdj ? adj : app.maxAdj;

        if (mBackupTarget != null && app == mBackupTarget.app) {
            // If possible we want to avoid killing apps while they're being backed up
            if (adj > BACKUP_APP_ADJ) {
                if (DEBUG_BACKUP) Log.v(TAG, "oom BACKUP_APP_ADJ for " + app);
                adj = BACKUP_APP_ADJ;
            }
        }

        if (app.services.size() != 0 && adj > FOREGROUND_APP_ADJ) {
            // If this process has active services running in it, we would
            // like to avoid killing it unless it would prevent the current