diff options
Diffstat (limited to 'com/android/server/am/ProcessList.java')
-rw-r--r-- | com/android/server/am/ProcessList.java | 140 |
1 files changed, 124 insertions, 16 deletions
diff --git a/com/android/server/am/ProcessList.java b/com/android/server/am/ProcessList.java index ab5d64c4..29bfebe6 100644 --- a/com/android/server/am/ProcessList.java +++ b/com/android/server/am/ProcessList.java @@ -24,6 +24,7 @@ import java.io.OutputStream; import java.nio.ByteBuffer; import android.app.ActivityManager; +import android.app.ActivityManagerProto; import android.os.Build; import android.os.SystemClock; import com.android.internal.util.MemInfoReader; @@ -358,12 +359,12 @@ public final class ProcessList { case ActivityManager.PROCESS_STATE_TOP: procState = "TOP "; break; - case ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE: - procState = "BFGS"; - break; case ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE: procState = "FGS "; break; + case ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE: + procState = "BFGS"; + break; case ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND: procState = "IMPF"; break; @@ -416,6 +417,53 @@ public final class ProcessList { return procState; } + public static int makeProcStateProtoEnum(int curProcState) { + switch (curProcState) { + case ActivityManager.PROCESS_STATE_PERSISTENT: + return ActivityManagerProto.PROCESS_STATE_PERSISTENT; + case ActivityManager.PROCESS_STATE_PERSISTENT_UI: + return ActivityManagerProto.PROCESS_STATE_PERSISTENT_UI; + case ActivityManager.PROCESS_STATE_TOP: + return ActivityManagerProto.PROCESS_STATE_TOP; + case ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE: + return ActivityManagerProto.PROCESS_STATE_BOUND_FOREGROUND_SERVICE; + case ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE: + return ActivityManagerProto.PROCESS_STATE_FOREGROUND_SERVICE; + case ActivityManager.PROCESS_STATE_TOP_SLEEPING: + return ActivityManagerProto.PROCESS_STATE_TOP_SLEEPING; + case ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND: + return ActivityManagerProto.PROCESS_STATE_IMPORTANT_FOREGROUND; + case ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND: + return ActivityManagerProto.PROCESS_STATE_IMPORTANT_BACKGROUND; + case ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND: + return ActivityManagerProto.PROCESS_STATE_TRANSIENT_BACKGROUND; + case ActivityManager.PROCESS_STATE_BACKUP: + return ActivityManagerProto.PROCESS_STATE_BACKUP; + case ActivityManager.PROCESS_STATE_HEAVY_WEIGHT: + return ActivityManagerProto.PROCESS_STATE_HEAVY_WEIGHT; + case ActivityManager.PROCESS_STATE_SERVICE: + return ActivityManagerProto.PROCESS_STATE_SERVICE; + case ActivityManager.PROCESS_STATE_RECEIVER: + return ActivityManagerProto.PROCESS_STATE_RECEIVER; + case ActivityManager.PROCESS_STATE_HOME: + return ActivityManagerProto.PROCESS_STATE_HOME; + case ActivityManager.PROCESS_STATE_LAST_ACTIVITY: + return ActivityManagerProto.PROCESS_STATE_LAST_ACTIVITY; + case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY: + return ActivityManagerProto.PROCESS_STATE_CACHED_ACTIVITY; + case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT: + return ActivityManagerProto.PROCESS_STATE_CACHED_ACTIVITY_CLIENT; + case ActivityManager.PROCESS_STATE_CACHED_RECENT: + return ActivityManagerProto.PROCESS_STATE_CACHED_RECENT; + case ActivityManager.PROCESS_STATE_CACHED_EMPTY: + return ActivityManagerProto.PROCESS_STATE_CACHED_EMPTY; + case ActivityManager.PROCESS_STATE_NONEXISTENT: + return ActivityManagerProto.PROCESS_STATE_NONEXISTENT; + default: + return -1; + } + } + public static void appendRamKb(StringBuilder sb, long ramKb) { for (int j=0, fact=10; j<6; j++, fact*=10) { if (ramKb < fact) { @@ -432,13 +480,13 @@ public final class ProcessList { public static final int PSS_MIN_TIME_FROM_STATE_CHANGE = 15*1000; // The maximum amount of time we want to go between PSS collections. - public static final int PSS_MAX_INTERVAL = 30*60*1000; + public static final int PSS_MAX_INTERVAL = 40*60*1000; // The minimum amount of time between successive PSS requests for *all* processes. - public static final int PSS_ALL_INTERVAL = 10*60*1000; + public static final int PSS_ALL_INTERVAL = 20*60*1000; - // The minimum amount of time between successive PSS requests for a process. - private static final int PSS_SHORT_INTERVAL = 2*60*1000; + // The amount of time until PSS when a persistent process first appears. + private static final int PSS_FIRST_PERSISTENT_INTERVAL = 30*1000; // The amount of time until PSS when a process first becomes top. private static final int PSS_FIRST_TOP_INTERVAL = 10*1000; @@ -449,6 +497,9 @@ public final class ProcessList { // The amount of time until PSS when a process first becomes cached. private static final int PSS_FIRST_CACHED_INTERVAL = 30*1000; + // The amount of time until PSS when the top process stays in the same state. + private static final int PSS_SAME_TOP_INTERVAL = 5*60*1000; + // The amount of time until PSS when an important process stays in the same state. private static final int PSS_SAME_IMPORTANT_INTERVAL = 15*60*1000; @@ -458,6 +509,18 @@ public final class ProcessList { // The amount of time until PSS when a cached process stays in the same state. private static final int PSS_SAME_CACHED_INTERVAL = 30*60*1000; + // The amount of time until PSS when a persistent process first appears. + private static final int PSS_FIRST_ASLEEP_PERSISTENT_INTERVAL = 1*60*1000; + + // The amount of time until PSS when a process first becomes top. + private static final int PSS_FIRST_ASLEEP_TOP_INTERVAL = 20*1000; + + // The amount of time until PSS when a process first goes into the background. + private static final int PSS_FIRST_ASLEEP_BACKGROUND_INTERVAL = 30*1000; + + // The amount of time until PSS when a process first becomes cached. + private static final int PSS_FIRST_ASLEEP_CACHED_INTERVAL = 1*60*1000; + // The minimum time interval after a state change it is safe to collect PSS. public static final int PSS_TEST_MIN_TIME_FROM_STATE_CHANGE = 10*1000; @@ -483,8 +546,8 @@ public final class ProcessList { PROC_MEM_PERSISTENT, // ActivityManager.PROCESS_STATE_PERSISTENT PROC_MEM_PERSISTENT, // ActivityManager.PROCESS_STATE_PERSISTENT_UI PROC_MEM_TOP, // ActivityManager.PROCESS_STATE_TOP - PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE + PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND @@ -502,11 +565,11 @@ public final class ProcessList { }; private static final long[] sFirstAwakePssTimes = new long[] { - PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT - PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI + PSS_FIRST_PERSISTENT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT + PSS_FIRST_PERSISTENT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI PSS_FIRST_TOP_INTERVAL, // ActivityManager.PROCESS_STATE_TOP - PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE + PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND @@ -526,9 +589,54 @@ public final class ProcessList { private static final long[] sSameAwakePssTimes = new long[] { PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI - PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_TOP + PSS_SAME_TOP_INTERVAL, // ActivityManager.PROCESS_STATE_TOP + PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE + PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND + PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND + PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND + PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_BACKUP + PSS_SAME_SERVICE_INTERVAL, // ActivityManager.PROCESS_STATE_SERVICE + PSS_SAME_SERVICE_INTERVAL, // ActivityManager.PROCESS_STATE_RECEIVER + PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_TOP_SLEEPING + PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_HEAVY_WEIGHT + PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_HOME + PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY + PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY + PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT + PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_RECENT + PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_EMPTY + }; + + private static final long[] sFirstAsleepPssTimes = new long[] { + PSS_FIRST_ASLEEP_PERSISTENT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT + PSS_FIRST_ASLEEP_PERSISTENT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI + PSS_FIRST_ASLEEP_TOP_INTERVAL, // ActivityManager.PROCESS_STATE_TOP + PSS_FIRST_ASLEEP_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE + PSS_FIRST_ASLEEP_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE + PSS_FIRST_ASLEEP_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND + PSS_FIRST_ASLEEP_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND + PSS_FIRST_ASLEEP_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND + PSS_FIRST_ASLEEP_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_BACKUP + PSS_FIRST_ASLEEP_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_SERVICE + PSS_FIRST_ASLEEP_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_RECEIVER + PSS_FIRST_ASLEEP_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_TOP_SLEEPING + PSS_FIRST_ASLEEP_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_HEAVY_WEIGHT + PSS_FIRST_ASLEEP_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_HOME + PSS_FIRST_ASLEEP_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY + PSS_FIRST_ASLEEP_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY + PSS_FIRST_ASLEEP_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT + PSS_FIRST_ASLEEP_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_RECENT + PSS_FIRST_ASLEEP_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_EMPTY + }; + + private static final long[] sSameAsleepPssTimes = new long[] { + PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT + PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI + PSS_SAME_TOP_INTERVAL, // ActivityManager.PROCESS_STATE_TOP PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE + PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE + PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND @@ -549,8 +657,8 @@ public final class ProcessList { PSS_TEST_FIRST_TOP_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT PSS_TEST_FIRST_TOP_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI PSS_TEST_FIRST_TOP_INTERVAL, // ActivityManager.PROCESS_STATE_TOP - PSS_TEST_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE PSS_TEST_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE + PSS_TEST_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE PSS_TEST_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND PSS_TEST_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND PSS_TEST_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND @@ -571,8 +679,8 @@ public final class ProcessList { PSS_TEST_SAME_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT PSS_TEST_SAME_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI PSS_TEST_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_TOP - PSS_TEST_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE PSS_TEST_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE + PSS_TEST_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE PSS_TEST_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND PSS_TEST_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND PSS_TEST_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND @@ -604,8 +712,8 @@ public final class ProcessList { ? sTestFirstPssTimes : sTestSamePssTimes) : (first - ? sFirstAwakePssTimes - : sSameAwakePssTimes); + ? (sleeping ? sFirstAsleepPssTimes : sFirstAwakePssTimes) + : (sleeping ? sSameAsleepPssTimes : sSameAwakePssTimes)); return now + table[procState]; } |