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
This commit is contained in:
Tim Murray
2022-11-14 23:41:18 +00:00
committed by Android (Google) Code Review
4 changed files with 37 additions and 3 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;