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

Commit 453030c5 authored by Jing Ji's avatar Jing Ji Committed by Android (Google) Code Review
Browse files

Merge "Update the categories of app kill reaons"

parents 001afb14 14870e08
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -4574,14 +4574,17 @@ package android.app {
    field public static final int REASON_ANR = 6; // 0x6
    field public static final int REASON_CRASH = 4; // 0x4
    field public static final int REASON_CRASH_NATIVE = 5; // 0x5
    field public static final int REASON_DEPENDENCY_DIED = 12; // 0xc
    field public static final int REASON_EXCESSIVE_RESOURCE_USAGE = 9; // 0x9
    field public static final int REASON_EXIT_SELF = 1; // 0x1
    field public static final int REASON_INITIALIZATION_FAILURE = 7; // 0x7
    field public static final int REASON_LOW_MEMORY = 3; // 0x3
    field public static final int REASON_OTHER = 10; // 0xa
    field public static final int REASON_OTHER = 13; // 0xd
    field public static final int REASON_PERMISSION_CHANGE = 8; // 0x8
    field public static final int REASON_SIGNALED = 2; // 0x2
    field public static final int REASON_UNKNOWN = 0; // 0x0
    field public static final int REASON_USER_REQUESTED = 10; // 0xa
    field public static final int REASON_USER_STOPPED = 11; // 0xb
  }
  public final class AsyncNotedAppOp implements android.os.Parcelable {
+167 −7
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.app;

import android.annotation.CurrentTimeMillisLong;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -121,11 +122,30 @@ public final class ApplicationExitInfo implements Parcelable {
    public static final int REASON_EXCESSIVE_RESOURCE_USAGE = 9;

    /**
     * Application process was killed by the system for various other reasons,
     * for example, the application package got disabled by the user;
     * {@link #getDescription} will specify the cause given by the system.
     * Application process was killed because of the user request, for example,
     * user clicked the "Force stop" button of the application in the Settings,
     * or removed the application away from Recents.
     */
    public static final int REASON_OTHER = 10;
    public static final int REASON_USER_REQUESTED = 10;

    /**
     * Application process was killed, because the user it is running as on devices
     * with mutlple users, was stopped.
     */
    public static final int REASON_USER_STOPPED = 11;

    /**
     * Application process was killed because its dependency was going away, for example,
     * a stable content provider connection's client will be killed if the provider is killed.
     */
    public static final int REASON_DEPENDENCY_DIED = 12;

    /**
     * Application process was killed by the system for various other reasons which are
     * not by problems in apps and not actionable by apps, for example, the system just
     * finished updates; {@link #getDescription} will specify the cause given by the system.
     */
    public static final int REASON_OTHER = 13;

    /**
     * Application process kills subreason is unknown.
@@ -201,6 +221,105 @@ public final class ApplicationExitInfo implements Parcelable {
     */
    public static final int SUBREASON_EXCESSIVE_CPU = 7;

    /**
     * System update has done (so the system update process should be killed);
     * this would be set only when the reason is {@link #REASON_OTHER}.
     *
     * For internal use only.
     * @hide
     */
    public static final int SUBREASON_SYSTEM_UPDATE_DONE = 8;

    /**
     * Kill all foreground services, for now it only occurs when enabling the quiet
     * mode for the managed profile;
     * this would be set only when the reason is {@link #REASON_OTHER}.
     *
     * For internal use only.
     * @hide
     */
    public static final int SUBREASON_KILL_ALL_FG = 9;

    /**
     * All background processes except certain ones were killed, for now it only occurs
     * when the density of the default display is changed;
     * this would be set only when the reason is {@link #REASON_OTHER}.
     *
     * For internal use only.
     * @hide
     */
    public static final int SUBREASON_KILL_ALL_BG_EXCEPT = 10;

    /**
     * The process associated with the UID was explicitly killed, for example,
     * it could be because of platform compatibility overrides;
     * this would be set only when the reason is {@link #REASON_OTHER}.
     *
     * For internal use only.
     * @hide
     */
    public static final int SUBREASON_KILL_UID = 11;

    /**
     * The process was explicitly killed with its PID, typically because of
     * the low memory for surfaces;
     * this would be set only when the reason is {@link #REASON_OTHER}.
     *
     * For internal use only.
     * @hide
     */
    public static final int SUBREASON_KILL_PID = 12;

    /**
     * The start of the process was invalid;
     * this would be set only when the reason is {@link #REASON_OTHER}.
     *
     * For internal use only.
     * @hide
     */
    public static final int SUBREASON_INVALID_START = 13;

    /**
     * The process was killed because it's in an invalid state, typically
     * it's triggered from SHELL;
     * this would be set only when the reason is {@link #REASON_OTHER}.
     *
     * For internal use only.
     * @hide
     */
    public static final int SUBREASON_INVALID_STATE = 14;

    /**
     * The process was killed when it's imperceptible to user, because it was
     * in a bad state;
     * this would be set only when the reason is {@link #REASON_OTHER}.
     *
     * For internal use only.
     * @hide
     */
    public static final int SUBREASON_IMPERCEPTIBLE = 15;

    /**
     * The process was killed because it's being moved out from LRU list;
     * this would be set only when the reason is {@link #REASON_OTHER}.
     *
     * For internal use only.
     * @hide
     */
    public static final int SUBREASON_REMOVE_LRU = 16;

    /**
     * The process was killed because it's isolated and was in a cached state;
     * this would be set only when the reason is {@link #REASON_OTHER}.
     *
     * For internal use only.
     * @hide
     */
    public static final int SUBREASON_ISOLATED_NOT_NEEDED = 17;

    // If there is any OEM code which involves additional app kill reasons, it should
    // be categorized in {@link #REASON_OTHER}, with subreason code starting from 1000.

    /**
     * @see {@link #getPid}
     */
@@ -254,7 +373,7 @@ public final class ApplicationExitInfo implements Parcelable {
    /**
     * @see {@link #getTimestamp}
     */
    private long mTimestamp;
    private @CurrentTimeMillisLong long mTimestamp;

    /**
     * @see {@link #getDescription}
@@ -293,6 +412,9 @@ public final class ApplicationExitInfo implements Parcelable {
        REASON_INITIALIZATION_FAILURE,
        REASON_PERMISSION_CHANGE,
        REASON_EXCESSIVE_RESOURCE_USAGE,
        REASON_USER_REQUESTED,
        REASON_USER_STOPPED,
        REASON_DEPENDENCY_DIED,
        REASON_OTHER,
    })
    @Retention(RetentionPolicy.SOURCE)
@@ -308,6 +430,16 @@ public final class ApplicationExitInfo implements Parcelable {
        SUBREASON_LARGE_CACHED,
        SUBREASON_MEMORY_PRESSURE,
        SUBREASON_EXCESSIVE_CPU,
        SUBREASON_SYSTEM_UPDATE_DONE,
        SUBREASON_KILL_ALL_FG,
        SUBREASON_KILL_ALL_BG_EXCEPT,
        SUBREASON_KILL_UID,
        SUBREASON_KILL_PID,
        SUBREASON_INVALID_START,
        SUBREASON_INVALID_STATE,
        SUBREASON_IMPERCEPTIBLE,
        SUBREASON_REMOVE_LRU,
        SUBREASON_ISOLATED_NOT_NEEDED,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface SubReason {}
@@ -403,7 +535,7 @@ public final class ApplicationExitInfo implements Parcelable {
     * The timestamp of the process's death, in milliseconds since the epoch,
     * as returned by {@link System#currentTimeMillis System.currentTimeMillis()}.
     */
    public long getTimestamp() {
    public @CurrentTimeMillisLong long getTimestamp() {
        return mTimestamp;
    }

@@ -564,7 +696,7 @@ public final class ApplicationExitInfo implements Parcelable {
     *
     * @hide
     */
    public void setTimestamp(final long timestamp) {
    public void setTimestamp(final @CurrentTimeMillisLong long timestamp) {
        mTimestamp = timestamp;
    }

@@ -656,6 +788,8 @@ public final class ApplicationExitInfo implements Parcelable {
        mRss = other.mRss;
        mTimestamp = other.mTimestamp;
        mDescription = other.mDescription;
        mPackageName = other.mPackageName;
        mPackageList = other.mPackageList;
    }

    private ApplicationExitInfo(@NonNull Parcel in) {
@@ -748,6 +882,12 @@ public final class ApplicationExitInfo implements Parcelable {
                return "PERMISSION CHANGE";
            case REASON_EXCESSIVE_RESOURCE_USAGE:
                return "EXCESSIVE RESOURCE USAGE";
            case REASON_USER_REQUESTED:
                return "USER REQUESTED";
            case REASON_USER_STOPPED:
                return "USER STOPPED";
            case REASON_DEPENDENCY_DIED:
                return "DEPENDENCY DIED";
            case REASON_OTHER:
                return "OTHER KILLS BY SYSTEM";
            default:
@@ -772,6 +912,26 @@ public final class ApplicationExitInfo implements Parcelable {
                return "MEMORY PRESSURE";
            case SUBREASON_EXCESSIVE_CPU:
                return "EXCESSIVE CPU USAGE";
            case SUBREASON_SYSTEM_UPDATE_DONE:
                return "SYSTEM UPDATE_DONE";
            case SUBREASON_KILL_ALL_FG:
                return "KILL ALL FG";
            case SUBREASON_KILL_ALL_BG_EXCEPT:
                return "KILL ALL BG EXCEPT";
            case SUBREASON_KILL_UID:
                return "KILL UID";
            case SUBREASON_KILL_PID:
                return "KILL PID";
            case SUBREASON_INVALID_START:
                return "INVALID START";
            case SUBREASON_INVALID_STATE:
                return "INVALID STATE";
            case SUBREASON_IMPERCEPTIBLE:
                return "IMPERCEPTIBLE";
            case SUBREASON_REMOVE_LRU:
                return "REMOVE LRU";
            case SUBREASON_ISOLATED_NOT_NEEDED:
                return "ISOLATED NOT NEEDED";
            default:
                return "UNKNOWN";
        }
+240 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

syntax = "proto2";
option java_multiple_files = true;

package android.app;

/**
 * The reason code that why app process is killed.
 */
enum AppExitReasonCode {
    /**
     * Application process died due to unknown reason.
     */
    REASON_UNKNOWN = 0;

    /**
     * Application process exit normally by itself, for example,
     * via {@link android.os.Process#exit}; {@link #status} will specify the exit code.
     *
     * <p>Applications should normally not do this, as the system has a better knowledge
     * in terms of process management.</p>
     */
    REASON_EXIT_SELF = 1;

    /**
     * Application process died due to the result of an OS signal; for example,
     * {@link android.os.Process#SIGNAL_KILL}; {@link #status} will specify the signum.
     */
    REASON_SIGNALED = 2;

    /**
     * Application process was killed by the system low memory killer, meaning the system was
     * under memory pressure at the time of kill.
     */
    REASON_LOW_MEMORY = 3;

    /**
     * Application process died because of an unhandled exception in Java code.
     */
    REASON_CRASH = 4;

    /**
     * Application process died because it's crashed due to a native code crash.
     */
    REASON_CRASH_NATIVE = 5;

    /**
     * Application process was killed due to being unresponsive (ANR).
     */
    REASON_ANR = 6;

    /**
     * Application process was killed because it took too long to attach to the system
     * during the start.
     */
    REASON_INITIALIZATION_FAILURE = 7;

    /**
     * Application process was killed because of initialization failure,
     * for example, it took too long to attach to the system during the start,
     * or there was an error during initialization.
     */
    REASON_PERMISSION_CHANGE = 8;

    /**
     * Application process was killed by the activity manager due to excessive resource usage.
     */
    REASON_EXCESSIVE_RESOURCE_USAGE = 9;

    /**
     * Application process was killed because of the user request, for example,
     * user clicked the "Force stop" button of the application in the Settings,
     * or swiped away the application from Recents.
     */
    REASON_USER_REQUESTED = 10;

    /**
     * Application process was killed, because the user they are running as on devices
     * with mutlple users, was stopped.
     */
    REASON_USER_STOPPED = 11;

    /**
     * Application process was killed because its dependency was going away, for example,
     * a stable content provider connection's client will be killed if the provider is killed.
     */
    REASON_DEPENDENCY_DIED = 12;

    /**
     * Application process was killed by the system for various other reasons,
     * for example, the application package got disabled by the user;
     * {@link #description} will specify the cause given by the system.
     */
    REASON_OTHER = 13;
}

/**
 * The supplemental reason code that why app process is killed
 */
enum AppExitSubReasonCode {
    /**
     * Application process kills subReason is unknown.
     */
    SUBREASON_UNKNOWN = 0;

    /**
     * Application process was killed because user quit it on the "wait for debugger" dialog.
     */
    SUBREASON_WAIT_FOR_DEBUGGER = 1;

    /**
     * Application process was killed by the activity manager because there were too many cached
     * processes.
     */
    SUBREASON_TOO_MANY_CACHED = 2;

    /**
     * Application process was killed by the activity manager because there were too many empty
     * processes.
     */
    SUBREASON_TOO_MANY_EMPTY = 3;

    /**
     * Application process was killed by the activity manager because there were too many cached
     * processes and this process had been in empty state for a long time.
     */
    SUBREASON_TRIM_EMPTY = 4;

    /**
     * Application process was killed by the activity manager because system was on
     * memory pressure and this process took large amount of cached memory.
     */
    SUBREASON_LARGE_CACHED = 5;

    /**
     * Application process was killed by the activity manager because the system was on
     * low memory pressure for a significant amount of time since last idle.
     */
    SUBREASON_MEMORY_PRESSURE = 6;

    /**
     * Application process was killed by the activity manager due to excessive CPU usage.
     */
    SUBREASON_EXCESSIVE_CPU = 7;

    /**
     * System update has done (so the system update process should be killed).
     */
    SUBREASON_SYSTEM_UPDATE_DONE = 8;

    /**
     * Kill all foreground services, for now it only occurs when enabling the quiet
     * mode for the managed profile.
     */
    SUBREASON_KILL_ALL_FG = 9;

    /**
     * All background processes except certain ones were killed, for now it only occurs
     * when the density of the default display is changed.
     */
    SUBREASON_KILL_ALL_BG_EXCEPT = 10;

    /**
     * The process associated with the UID was explicitly killed, for example,
     * it could be because of permission changes.
     */
    SUBREASON_KILL_UID = 11;

    /**
     * The process was explicitly killed with its PID, typically because of
     * the low memory for surfaces.
     */
    SUBREASON_KILL_PID = 12;

    /**
     * The start of the process was invalid.
     */
    SUBREASON_INVALID_START = 13;

    /**
     * The process was killed because it's in an invalid state, typically
     * it's triggered from SHELL.
     */
    SUBREASON_INVALID_STATE = 14;

    /**
     * The process was killed when it's imperceptible to user, because it was
     * in a bad state.
     */
    SUBREASON_IMPERCEPTIBLE = 15;

    /**
     * The process was killed because it's being moved out from LRU list.
     */
    SUBREASON_REMOVE_LRU = 16;

    /**
     * The process was killed because it's isolated and was in a cached state.
     */
    SUBREASON_ISOLATED_NOT_NEEDED = 17;
}

/**
 * The relative importance level that the system places on a process.
 * Keep sync with the definitions in
 * {@link android.app.ActivityManager.RunningAppProcessInfo}
 */
enum Importance {
    option allow_alias = true;

    IMPORTANCE_FOREGROUND = 100;
    IMPORTANCE_FOREGROUND_SERVICE = 125;
    IMPORTANCE_TOP_SLEEPING_PRE_28 = 150;
    IMPORTANCE_VISIBLE = 200;
    IMPORTANCE_PERCEPTIBLE_PRE_26 = 130;
    IMPORTANCE_PERCEPTIBLE = 230;
    IMPORTANCE_CANT_SAVE_STATE_PRE_26 = 170;
    IMPORTANCE_SERVICE = 300;
    IMPORTANCE_TOP_SLEEPING = 325;
    IMPORTANCE_CANT_SAVE_STATE = 350;
    IMPORTANCE_CACHED = 400;
    IMPORTANCE_BACKGROUND = 400;
    IMPORTANCE_EMPTY = 500;
    IMPORTANCE_GONE = 1000;
}
+3 −143
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ option java_multiple_files = true;
package android.app;

import "frameworks/base/core/proto/android/privacy.proto";
import "frameworks/base/core/proto/android/app/appexit_enums.proto";

/**
 * An android.app.ApplicationExitInfo object.
@@ -33,150 +34,9 @@ message ApplicationExitInfoProto {
    optional int32 defining_uid = 4;
    optional string process_name = 5;
    optional int32 connection_group = 6;

    enum ReasonCode {
        /**
         * Application process died due to unknown reason.
         */
        REASON_UNKNOWN = 0;

        /**
         * Application process exit normally by itself, for example,
         * via {@link android.os.Process#exit}; {@link #status} will specify the exit code.
         *
         * <p>Applications should normally not do this, as the system has a better knowledge
         * in terms of process management.</p>
         */
        REASON_EXIT_SELF = 1;

        /**
         * Application process died due to the result of an OS signal; for example,
         * {@link android.os.Process#SIGNAL_KILL}; {@link #status} will specify the signum.
         */
        REASON_SIGNALED = 2;

        /**
         * Application process was killed by the system low memory killer, meaning the system was
         * under memory pressure at the time of kill.
         */
        REASON_LOW_MEMORY = 3;

        /**
         * Application process died because of an unhandled exception in Java code.
         */
        REASON_CRASH = 4;

        /**
         * Application process died because it's crashed due to a native code crash.
         */
        REASON_CRASH_NATIVE = 5;

        /**
         * Application process was killed due to being unresponsive (ANR).
         */
        REASON_ANR = 6;

        /**
         * Application process was killed because it took too long to attach to the system
         * during the start.
         */
        REASON_INITIALIZATION_FAILURE = 7;

        /**
         * Application process was killed because of initialization failure,
         * for example, it took too long to attach to the system during the start,
         * or there was an error during initialization.
         */
        REASON_PERMISSION_CHANGE = 8;

        /**
         * Application process was killed by the activity manager due to excessive resource usage.
         */
        REASON_EXCESSIVE_RESOURCE_USAGE = 9;

        /**
         * Application process was killed by the system for various other reasons,
         * for example, the application package got disabled by the user;
         * {@link #description} will specify the cause given by the system.
         */
        REASON_OTHER = 10;

    }
    optional ReasonCode reason = 7;

    enum SubReason {
        /**
         * Application process kills subReason is unknown.
         */
        SUBREASON_UNKNOWN = 0;

        /**
         * Application process was killed because user quit it on the "wait for debugger" dialog.
         */
        SUBREASON_WAIT_FOR_DEBUGGER = 1;

        /**
         * Application process was killed by the activity manager because there were too many cached
         * processes.
         */
        SUBREASON_TOO_MANY_CACHED = 2;

        /**
         * Application process was killed by the activity manager because there were too many empty
         * processes.
         */
        SUBREASON_TOO_MANY_EMPTY = 3;

        /**
         * Application process was killed by the activity manager because there were too many cached
         * processes and this process had been in empty state for a long time.
         */
        SUBREASON_TRIM_EMPTY = 4;

        /**
         * Application process was killed by the activity manager because system was on
         * memory pressure and this process took large amount of cached memory.
         */
        SUBREASON_LARGE_CACHED = 5;

        /**
         * Application process was killed by the activity manager because the system was on
         * low memory pressure for a significant amount of time since last idle.
         */
        SUBREASON_MEMORY_PRESSURE = 6;

        /**
         * Application process was killed by the activity manager due to excessive CPU usage.
         */
        SUBREASON_EXCESSIVE_CPU = 7;
    }

    optional SubReason sub_reason = 8;

    optional AppExitReasonCode reason = 7;
    optional AppExitSubReasonCode sub_reason = 8;
    optional int32 status = 9;

    enum Importance {
        option allow_alias = true;
        /**
         * Keep sync with the definitions in
         * {@link android.app.ActivityManager.RunningAppProcessInfo}
         */
        IMPORTANCE_FOREGROUND = 100;
        IMPORTANCE_FOREGROUND_SERVICE = 125;
        IMPORTANCE_TOP_SLEEPING_PRE_28 = 150;
        IMPORTANCE_VISIBLE = 200;
        IMPORTANCE_PERCEPTIBLE_PRE_26 = 130;
        IMPORTANCE_PERCEPTIBLE = 230;
        IMPORTANCE_CANT_SAVE_STATE_PRE_26 = 170;
        IMPORTANCE_SERVICE = 300;
        IMPORTANCE_TOP_SLEEPING = 325;
        IMPORTANCE_CANT_SAVE_STATE = 350;
        IMPORTANCE_CACHED = 400;
        IMPORTANCE_BACKGROUND = 400;
        IMPORTANCE_EMPTY = 500;
        IMPORTANCE_GONE = 1000;
    }

    optional Importance importance = 10;
    optional int64 pss = 11;
    optional int64 rss = 12;
+47 −13

File changed.

Preview size limit exceeded, changes collapsed.

Loading