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

Commit d7f2ef4b authored by Tim Murray's avatar Tim Murray Committed by Android (Google) Code Review
Browse files

Merge changes Id4519038,I21e240ed,I3059cc60

* changes:
  ProcessStateRecord: add oom_adj type tracing
  Revert "Revert "BroadcastQueue: more increasing delay knobs.""
  BroadcastProcessQueue: ensure accuracy of persistent and instrumented flags
parents 5fe67271 f4bc936d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -170,7 +170,7 @@ public class BroadcastConstants {
     */
    public long DELAY_NORMAL_MILLIS = DEFAULT_DELAY_NORMAL_MILLIS;
    private static final String KEY_DELAY_NORMAL_MILLIS = "bcast_delay_normal_millis";
    private static final long DEFAULT_DELAY_NORMAL_MILLIS = 0;
    private static final long DEFAULT_DELAY_NORMAL_MILLIS = +500;

    /**
     * For {@link BroadcastQueueModernImpl}: Delay to apply to broadcasts
@@ -178,7 +178,7 @@ public class BroadcastConstants {
     */
    public long DELAY_CACHED_MILLIS = DEFAULT_DELAY_CACHED_MILLIS;
    private static final String KEY_DELAY_CACHED_MILLIS = "bcast_delay_cached_millis";
    private static final long DEFAULT_DELAY_CACHED_MILLIS = +30_000;
    private static final long DEFAULT_DELAY_CACHED_MILLIS = +120_000;

    /**
     * For {@link BroadcastQueueModernImpl}: Delay to apply to urgent
+20 −0
Original line number Diff line number Diff line
@@ -164,6 +164,7 @@ class BroadcastProcessQueue {

    private boolean mProcessCached;
    private boolean mProcessInstrumented;
    private boolean mProcessPersistent;

    private String mCachedToString;
    private String mCachedToShortString;
@@ -323,8 +324,10 @@ class BroadcastProcessQueue {
        this.app = app;
        if (app != null) {
            setProcessInstrumented(app.getActiveInstrumentation() != null);
            setProcessPersistent(app.isPersistent());
        } else {
            setProcessInstrumented(false);
            setProcessPersistent(false);
        }
    }

@@ -351,6 +354,17 @@ class BroadcastProcessQueue {
        }
    }

    /**
     * Update if this process is in the "persistent" state, which signals broadcast dispatch should
     * bypass all pauses or delays to prevent the system from becoming out of sync with itself.
     */
    public void setProcessPersistent(boolean persistent) {
        if (mProcessPersistent != persistent) {
            mProcessPersistent = persistent;
            invalidateRunnableAt();
        }
    }

    /**
     * Return if we know of an actively running "warm" process for this queue.
     */
@@ -636,6 +650,7 @@ class BroadcastProcessQueue {
    static final int REASON_MAX_PENDING = 3;
    static final int REASON_BLOCKED = 4;
    static final int REASON_INSTRUMENTED = 5;
    static final int REASON_PERSISTENT = 6;
    static final int REASON_CONTAINS_FOREGROUND = 10;
    static final int REASON_CONTAINS_ORDERED = 11;
    static final int REASON_CONTAINS_ALARM = 12;
@@ -652,6 +667,7 @@ class BroadcastProcessQueue {
            REASON_MAX_PENDING,
            REASON_BLOCKED,
            REASON_INSTRUMENTED,
            REASON_PERSISTENT,
            REASON_CONTAINS_FOREGROUND,
            REASON_CONTAINS_ORDERED,
            REASON_CONTAINS_ALARM,
@@ -672,6 +688,7 @@ class BroadcastProcessQueue {
            case REASON_MAX_PENDING: return "MAX_PENDING";
            case REASON_BLOCKED: return "BLOCKED";
            case REASON_INSTRUMENTED: return "INSTRUMENTED";
            case REASON_PERSISTENT: return "PERSISTENT";
            case REASON_CONTAINS_FOREGROUND: return "CONTAINS_FOREGROUND";
            case REASON_CONTAINS_ORDERED: return "CONTAINS_ORDERED";
            case REASON_CONTAINS_ALARM: return "CONTAINS_ALARM";
@@ -731,6 +748,9 @@ class BroadcastProcessQueue {
            } else if (mCountManifest > 0) {
                mRunnableAt = runnableAt;
                mRunnableAtReason = REASON_CONTAINS_MANIFEST;
            } else if (mProcessPersistent) {
                mRunnableAt = runnableAt;
                mRunnableAtReason = REASON_PERSISTENT;
            } else if (mProcessCached) {
                mRunnableAt = runnableAt + constants.DELAY_CACHED_MILLIS;
                mRunnableAtReason = REASON_CACHED;
+1 −1
Original line number Diff line number Diff line
@@ -1453,7 +1453,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
        }

        BroadcastProcessQueue created = new BroadcastProcessQueue(mConstants, processName, uid);
        created.app = mService.getProcessRecordLocked(processName, uid);
        created.setProcess(mService.getProcessRecordLocked(processName, uid));

        if (leaf == null) {
            mProcessQueues.put(uid, created);
+14 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.annotation.ElapsedRealtimeLong;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.os.SystemClock;
import android.os.Trace;
import android.util.Slog;
import android.util.TimeUtils;

@@ -43,6 +44,9 @@ import java.io.PrintWriter;
 * The state info of the process, including proc state, oom adj score, et al.
 */
final class ProcessStateRecord {
    // Enable this to trace all OomAdjuster state transitions
    private static final boolean TRACE_OOM_ADJ = false;

    private final ProcessRecord mApp;
    private final ActivityManagerService mService;
    private final ActivityManagerGlobalLock mProcLock;
@@ -916,6 +920,12 @@ final class ProcessStateRecord {

    @GuardedBy("mService")
    void setAdjType(String adjType) {
        if (TRACE_OOM_ADJ) {
            Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER,
                    "oom:" + mApp.processName + "/u" + mApp.uid, 0);
            Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
                    "oom:" + mApp.processName + "/u" + mApp.uid, adjType, 0);
        }
        mAdjType = adjType;
    }

@@ -1153,6 +1163,10 @@ final class ProcessStateRecord {

    @GuardedBy({"mService", "mProcLock"})
    void onCleanupApplicationRecordLSP() {
        if (TRACE_OOM_ADJ) {
            Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER,
                    "oom:" + mApp.processName + "/u" + mApp.uid, 0);
        }
        setHasForegroundActivities(false);
        mHasShownUi = false;
        mForcingToImportant = null;