Loading services/core/java/com/android/server/am/ProcessErrorStateRecord.java +21 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,12 @@ class ProcessErrorStateRecord { @CompositeRWLock({"mService", "mProcLock"}) private AppNotRespondingDialog.Data mAnrData; /** * Annotation from process killed due to an ANR. */ @GuardedBy("mService") private String mAnrAnnotation; /** * Optional local handler to be invoked in the process crash. */ Loading Loading @@ -193,6 +199,16 @@ class ProcessErrorStateRecord { mCrashingReport = crashingReport; } @GuardedBy("mService") String getAnrAnnotation() { return mAnrAnnotation; } @GuardedBy("mService") void setAnrAnnotation(String anrAnnotation) { mAnrAnnotation = anrAnnotation; } @GuardedBy(anyOf = {"mService", "mProcLock"}) ActivityManager.ProcessErrorStateInfo getNotRespondingReport() { return mNotRespondingReport; Loading Loading @@ -243,6 +259,8 @@ class ProcessErrorStateRecord { mApp.getWindowProcessController().appEarlyNotResponding(annotation, () -> { synchronized (mService) { // Store annotation here as instance below races with this killLocked. setAnrAnnotation(annotation); mApp.killLocked("anr", ApplicationExitInfo.REASON_ANR, true); } }); Loading @@ -256,6 +274,9 @@ class ProcessErrorStateRecord { final int pid = mApp.getPid(); final UUID errorId; synchronized (mService) { // Store annotation here as instance above will not be hit on all paths. setAnrAnnotation(annotation); // PowerManager.reboot() can block for a long time, so ignore ANRs while shutting down. if (mService.mAtmInternal.isShuttingDown()) { Slog.i(TAG, "During shutdown skipping ANR: " + this + " " + annotation); Loading services/core/java/com/android/server/am/ProcessRecord.java +4 −0 Original line number Diff line number Diff line Loading @@ -1071,6 +1071,10 @@ class ProcessRecord implements WindowProcessListener { @SubReason int subReason, boolean noisy) { if (!mKilledByAm) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "kill"); if (reasonCode == ApplicationExitInfo.REASON_ANR && mErrorState.getAnrAnnotation() != null) { description = description + ": " + mErrorState.getAnrAnnotation(); } if (mService != null && (noisy || info.uid == mService.mCurOomAdjUid)) { mService.reportUidInfoMessageLocked(TAG, "Killing " + toShortString() + " (adj " + mState.getSetAdj() Loading Loading
services/core/java/com/android/server/am/ProcessErrorStateRecord.java +21 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,12 @@ class ProcessErrorStateRecord { @CompositeRWLock({"mService", "mProcLock"}) private AppNotRespondingDialog.Data mAnrData; /** * Annotation from process killed due to an ANR. */ @GuardedBy("mService") private String mAnrAnnotation; /** * Optional local handler to be invoked in the process crash. */ Loading Loading @@ -193,6 +199,16 @@ class ProcessErrorStateRecord { mCrashingReport = crashingReport; } @GuardedBy("mService") String getAnrAnnotation() { return mAnrAnnotation; } @GuardedBy("mService") void setAnrAnnotation(String anrAnnotation) { mAnrAnnotation = anrAnnotation; } @GuardedBy(anyOf = {"mService", "mProcLock"}) ActivityManager.ProcessErrorStateInfo getNotRespondingReport() { return mNotRespondingReport; Loading Loading @@ -243,6 +259,8 @@ class ProcessErrorStateRecord { mApp.getWindowProcessController().appEarlyNotResponding(annotation, () -> { synchronized (mService) { // Store annotation here as instance below races with this killLocked. setAnrAnnotation(annotation); mApp.killLocked("anr", ApplicationExitInfo.REASON_ANR, true); } }); Loading @@ -256,6 +274,9 @@ class ProcessErrorStateRecord { final int pid = mApp.getPid(); final UUID errorId; synchronized (mService) { // Store annotation here as instance above will not be hit on all paths. setAnrAnnotation(annotation); // PowerManager.reboot() can block for a long time, so ignore ANRs while shutting down. if (mService.mAtmInternal.isShuttingDown()) { Slog.i(TAG, "During shutdown skipping ANR: " + this + " " + annotation); Loading
services/core/java/com/android/server/am/ProcessRecord.java +4 −0 Original line number Diff line number Diff line Loading @@ -1071,6 +1071,10 @@ class ProcessRecord implements WindowProcessListener { @SubReason int subReason, boolean noisy) { if (!mKilledByAm) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "kill"); if (reasonCode == ApplicationExitInfo.REASON_ANR && mErrorState.getAnrAnnotation() != null) { description = description + ": " + mErrorState.getAnrAnnotation(); } if (mService != null && (noisy || info.uid == mService.mCurOomAdjUid)) { mService.reportUidInfoMessageLocked(TAG, "Killing " + toShortString() + " (adj " + mState.getSetAdj() Loading