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:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user