summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Siim Sammul <siims@google.com> 2024-04-11 11:57:06 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-04-11 11:57:06 +0000
commit8d91a33fc1d35bd1ffae9b3f8832e5fa3b308838 (patch)
tree7034a6387dee03a2c0808694a6209a004b1b3237
parentd38bec271fc005ea5bb632f3280a8388fa7455dd (diff)
parent4d4fc1277fdc1adea6f2ef9d4411b8a8faeb9ac2 (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.java27
-rw-r--r--services/core/java/com/android/server/am/ProcessErrorStateRecord.java23
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