Add the anr timestamp to the dropbox entry instead of the info

Change-Id: I65e4978182e401d0ff6cfb7a01f5353c5c614817
Test: N/A
Bug: 324255555
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index ad15ea9..8022eb3 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.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 @@
     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 @@
      */
     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 @@
                     ? 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 0aa1a69..76c5952 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.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 @@
  * 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 @@
             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 @@
             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