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

Commit 4d4fc127 authored by Siim Sammul's avatar Siim Sammul
Browse files

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

Change-Id: I65e4978182e401d0ff6cfb7a01f5353c5c614817
Test: N/A
Bug: 324255555
parent 9fb0077a
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