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

Commit a7c7a868 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Update the categories of app kill reaons" into rvc-dev am: 7712b3a9

Change-Id: Iafdb44bb63ecdc2583da7ce01cb7f75afc0b79f7
parents c0e45d26 7712b3a9
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -4572,14 +4572,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