Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d91a33f authored by Siim Sammul's avatar Siim Sammul Committed by Android (Google) Code Review
Browse files

Merge "Add the anr timestamp to the dropbox entry instead of the info" into main

parents d38bec27 4d4fc127
Loading
Loading
Loading
Loading
+20 −7
Original line number Diff line number Diff line
@@ -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");
+11 −12
Original line number Diff line number Diff line
@@ -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