diff options
| author | 2024-04-11 11:57:06 +0000 | |
|---|---|---|
| committer | 2024-04-11 11:57:06 +0000 | |
| commit | 8d91a33fc1d35bd1ffae9b3f8832e5fa3b308838 (patch) | |
| tree | 7034a6387dee03a2c0808694a6209a004b1b3237 | |
| parent | d38bec271fc005ea5bb632f3280a8388fa7455dd (diff) | |
| parent | 4d4fc1277fdc1adea6f2ef9d4411b8a8faeb9ac2 (diff) | |
Merge "Add the anr timestamp to the dropbox entry instead of the info" into main
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 27 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ProcessErrorStateRecord.java | 23 |
2 files changed, 31 insertions, 19 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index ad15ea90c45c..8022eb37fce7 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -497,6 +497,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -629,6 +631,9 @@ public class ActivityManagerService extends IActivityManager.Stub private static final int MAX_BUGREPORT_TITLE_SIZE = 100; private static final int MAX_BUGREPORT_DESCRIPTION_SIZE = 150; + private static final DateTimeFormatter DROPBOX_TIME_FORMATTER = + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSZ"); + OomAdjuster mOomAdjuster; static final String EXTRA_TITLE = "android.intent.extra.TITLE"; @@ -2167,22 +2172,25 @@ public class ActivityManagerService extends IActivityManager.Stub */ static class VolatileDropboxEntryStates { private final Boolean mIsProcessFrozen; + private final ZonedDateTime mTimestamp; - private VolatileDropboxEntryStates(Boolean frozenState) { + private VolatileDropboxEntryStates(Boolean frozenState, ZonedDateTime timestamp) { this.mIsProcessFrozen = frozenState; + this.mTimestamp = timestamp; } - public static VolatileDropboxEntryStates withProcessFrozenState(boolean frozenState) { - return new VolatileDropboxEntryStates(frozenState); - } - - public static VolatileDropboxEntryStates emptyVolatileDropboxEnytyStates() { - return new VolatileDropboxEntryStates(null); + public static VolatileDropboxEntryStates withProcessFrozenStateAndTimestamp( + boolean frozenState, ZonedDateTime timestamp) { + return new VolatileDropboxEntryStates(frozenState, timestamp); } public Boolean isProcessFrozen() { return mIsProcessFrozen; } + + public ZonedDateTime getTimestamp() { + return mTimestamp; + } } static class MemBinder extends Binder { @@ -9678,6 +9686,11 @@ public class ActivityManagerService extends IActivityManager.Stub ? volatileStates.isProcessFrozen() : process.mOptRecord.isFrozen() ).append("\n"); } + if (volatileStates != null && volatileStates.getTimestamp() != null) { + String formattedTime = DROPBOX_TIME_FORMATTER.format( + volatileStates.getTimestamp()); + sb.append("Timestamp: ").append(formattedTime).append("\n"); + } int flags = process.info.flags; final IPackageManager pm = AppGlobals.getPackageManager(); sb.append("Flags: 0x").append(Integer.toHexString(flags)).append("\n"); diff --git a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java index 0aa1a69334d7..76c59520d4ea 100644 --- a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java +++ b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java @@ -66,7 +66,7 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.time.Instant; import java.time.ZoneId; -import java.time.format.DateTimeFormatter; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -79,9 +79,6 @@ import java.util.concurrent.atomic.AtomicLong; * The error state of the process, such as if it's crashing/ANR etc. */ class ProcessErrorStateRecord { - private static final DateTimeFormatter DROPBOX_TIME_FORMATTER = - DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSZ"); - final ProcessRecord mApp; private final ActivityManagerService mService; @@ -355,9 +352,18 @@ class ProcessErrorStateRecord { synchronized (mProcLock) { latencyTracker.waitingOnProcLockEnded(); setNotResponding(true); + + ZonedDateTime timestamp = null; + if (timeoutRecord != null && timeoutRecord.mEndUptimeMillis > 0) { + long millisSinceEndUptimeMs = anrTime - timeoutRecord.mEndUptimeMillis; + timestamp = Instant.now().minusMillis(millisSinceEndUptimeMs) + .atZone(ZoneId.systemDefault()); + } + volatileDropboxEntriyStates = ActivityManagerService.VolatileDropboxEntryStates - .withProcessFrozenState(mApp.mOptRecord.isFrozen()); + .withProcessFrozenStateAndTimestamp( + mApp.mOptRecord.isFrozen(), timestamp); } // Log the ANR to the event log. @@ -450,13 +456,6 @@ class ProcessErrorStateRecord { info.append("ErrorId: ").append(errorId.toString()).append("\n"); } info.append("Frozen: ").append(mApp.mOptRecord.isFrozen()).append("\n"); - if (timeoutRecord != null && timeoutRecord.mEndUptimeMillis > 0) { - long millisSinceEndUptimeMs = anrTime - timeoutRecord.mEndUptimeMillis; - String formattedTime = DROPBOX_TIME_FORMATTER.format( - Instant.now().minusMillis(millisSinceEndUptimeMs) - .atZone(ZoneId.systemDefault())); - info.append("Timestamp: ").append(formattedTime).append("\n"); - } // Retrieve controller with max ANR delay from AnrControllers // Note that we retrieve the controller before dumping stacks because dumping stacks can |