diff options
| -rw-r--r-- | core/java/android/app/ApplicationExitInfo.java | 30 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/CachedAppOptimizer.java | 8 |
2 files changed, 34 insertions, 4 deletions
diff --git a/core/java/android/app/ApplicationExitInfo.java b/core/java/android/app/ApplicationExitInfo.java index 4f94c9b5045b..d54452fb3004 100644 --- a/core/java/android/app/ApplicationExitInfo.java +++ b/core/java/android/app/ApplicationExitInfo.java @@ -334,6 +334,26 @@ public final class ApplicationExitInfo implements Parcelable { */ public static final int SUBREASON_CACHED_IDLE_FORCED_APP_STANDBY = 18; + /** + * The process was killed because it fails to freeze/unfreeze binder + * or query binder frozen info while being frozen. + * this would be set only when the reason is {@link #REASON_FREEZER}. + * + * For internal use only. + * @hide + */ + public static final int SUBREASON_FREEZER_BINDER_IOCTL = 19; + + /** + * The process was killed because it receives sync binder transactions + * while being frozen. + * this would be set only when the reason is {@link #REASON_FREEZER}. + * + * For internal use only. + * @hide + */ + public static final int SUBREASON_FREEZER_BINDER_TRANSACTION = 20; + // 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. @@ -491,6 +511,8 @@ public final class ApplicationExitInfo implements Parcelable { SUBREASON_IMPERCEPTIBLE, SUBREASON_REMOVE_LRU, SUBREASON_ISOLATED_NOT_NEEDED, + SUBREASON_FREEZER_BINDER_IOCTL, + SUBREASON_FREEZER_BINDER_TRANSACTION, }) @Retention(RetentionPolicy.SOURCE) public @interface SubReason {} @@ -1032,6 +1054,8 @@ public final class ApplicationExitInfo implements Parcelable { pw.println(prefix + " user=" + UserHandle.getUserId(mPackageUid)); pw.println(prefix + " process=" + mProcessName); pw.println(prefix + " reason=" + mReason + " (" + reasonCodeToString(mReason) + ")"); + pw.println(prefix + " subreason=" + mSubReason + " (" + subreasonToString(mSubReason) + + ")"); pw.println(prefix + " status=" + mStatus); pw.println(prefix + " importance=" + mImportance); pw.print(prefix + " pss="); DebugUtils.printSizeValue(pw, mPss << 10); pw.println(); @@ -1055,6 +1079,8 @@ public final class ApplicationExitInfo implements Parcelable { sb.append(" process=").append(mProcessName); sb.append(" reason=").append(mReason).append(" (") .append(reasonCodeToString(mReason)).append(")"); + sb.append(" subreason=").append(mSubReason).append(" (") + .append(subreasonToString(mSubReason)).append(")"); sb.append(" status=").append(mStatus); sb.append(" importance=").append(mImportance); sb.append(" pss="); DebugUtils.sizeValueToString(mPss << 10, sb); @@ -1137,6 +1163,10 @@ public final class ApplicationExitInfo implements Parcelable { return "REMOVE LRU"; case SUBREASON_ISOLATED_NOT_NEEDED: return "ISOLATED NOT NEEDED"; + case SUBREASON_FREEZER_BINDER_IOCTL: + return "FREEZER BINDER IOCTL"; + case SUBREASON_FREEZER_BINDER_TRANSACTION: + return "FREEZER BINDER TRANSACTION"; default: return "UNKNOWN"; } diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 1ddd899505b0..966e746b3c73 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -927,7 +927,7 @@ public final class CachedAppOptimizer { + " received sync transactions while frozen, killing"); app.killLocked("Sync transaction while in frozen state", ApplicationExitInfo.REASON_OTHER, - ApplicationExitInfo.SUBREASON_INVALID_STATE, true); + ApplicationExitInfo.SUBREASON_FREEZER_BINDER_TRANSACTION, true); processKilled = true; } @@ -940,7 +940,7 @@ public final class CachedAppOptimizer { + app.processName + ". Killing it. Exception: " + e); app.killLocked("Unable to query binder frozen stats", ApplicationExitInfo.REASON_OTHER, - ApplicationExitInfo.SUBREASON_INVALID_STATE, true); + ApplicationExitInfo.SUBREASON_FREEZER_BINDER_IOCTL, true); processKilled = true; } @@ -957,7 +957,7 @@ public final class CachedAppOptimizer { + ". Killing it"); app.killLocked("Unable to unfreeze", ApplicationExitInfo.REASON_OTHER, - ApplicationExitInfo.SUBREASON_INVALID_STATE, true); + ApplicationExitInfo.SUBREASON_FREEZER_BINDER_IOCTL, true); return; } @@ -1342,7 +1342,7 @@ public final class CachedAppOptimizer { synchronized (mAm) { proc.killLocked("Unable to freeze binder interface", ApplicationExitInfo.REASON_OTHER, - ApplicationExitInfo.SUBREASON_INVALID_STATE, true); + ApplicationExitInfo.SUBREASON_FREEZER_BINDER_IOCTL, true); } }); } |