Add bound_top, bound_fgs and frozen states to ProcessStats.
Also merge various cached states into a single one. Test: atest ProcessStatsTest Bug: 271160990 Bug: 260242581 Change-Id: I678d9ac5268dcc863b209bb2c2e8430d54f39ff7
This commit is contained in:
@@ -27,12 +27,12 @@ import static com.android.internal.app.procstats.ProcessStats.ADJ_SCREEN_MOD;
|
||||
import static com.android.internal.app.procstats.ProcessStats.ADJ_SCREEN_OFF;
|
||||
import static com.android.internal.app.procstats.ProcessStats.ADJ_SCREEN_ON;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_BACKUP;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_BOUND_TOP_OR_FGS;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_CACHED_ACTIVITY;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_CACHED_ACTIVITY_CLIENT;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_CACHED_EMPTY;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_BOUND_FGS;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_BOUND_TOP;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_CACHED;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_COUNT;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_FGS;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_FROZEN;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_HEAVY_WEIGHT;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_HOME;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_IMPORTANT_BACKGROUND;
|
||||
@@ -72,7 +72,8 @@ public final class DumpUtils {
|
||||
STATE_NAMES = new String[STATE_COUNT];
|
||||
STATE_NAMES[STATE_PERSISTENT] = "Persist";
|
||||
STATE_NAMES[STATE_TOP] = "Top";
|
||||
STATE_NAMES[STATE_BOUND_TOP_OR_FGS] = "BTopFgs";
|
||||
STATE_NAMES[STATE_BOUND_FGS] = "BFgs";
|
||||
STATE_NAMES[STATE_BOUND_TOP] = "BTop";
|
||||
STATE_NAMES[STATE_FGS] = "Fgs";
|
||||
STATE_NAMES[STATE_IMPORTANT_FOREGROUND] = "ImpFg";
|
||||
STATE_NAMES[STATE_IMPORTANT_BACKGROUND] = "ImpBg";
|
||||
@@ -83,14 +84,14 @@ public final class DumpUtils {
|
||||
STATE_NAMES[STATE_HEAVY_WEIGHT] = "HeavyWt";
|
||||
STATE_NAMES[STATE_HOME] = "Home";
|
||||
STATE_NAMES[STATE_LAST_ACTIVITY] = "LastAct";
|
||||
STATE_NAMES[STATE_CACHED_ACTIVITY] = "CchAct";
|
||||
STATE_NAMES[STATE_CACHED_ACTIVITY_CLIENT] = "CchCAct";
|
||||
STATE_NAMES[STATE_CACHED_EMPTY] = "CchEmty";
|
||||
STATE_NAMES[STATE_CACHED] = "Cached";
|
||||
STATE_NAMES[STATE_FROZEN] = "Frozen";
|
||||
|
||||
STATE_LABELS = new String[STATE_COUNT];
|
||||
STATE_LABELS[STATE_PERSISTENT] = "Persistent";
|
||||
STATE_LABELS[STATE_TOP] = " Top";
|
||||
STATE_LABELS[STATE_BOUND_TOP_OR_FGS] = "Bnd TopFgs";
|
||||
STATE_LABELS[STATE_BOUND_FGS] = " Bnd Fgs";
|
||||
STATE_LABELS[STATE_BOUND_TOP] = " Bnd Top";
|
||||
STATE_LABELS[STATE_FGS] = " Fgs";
|
||||
STATE_LABELS[STATE_IMPORTANT_FOREGROUND] = " Imp Fg";
|
||||
STATE_LABELS[STATE_IMPORTANT_BACKGROUND] = " Imp Bg";
|
||||
@@ -101,16 +102,16 @@ public final class DumpUtils {
|
||||
STATE_LABELS[STATE_HEAVY_WEIGHT] = " Heavy Wgt";
|
||||
STATE_LABELS[STATE_HOME] = " (Home)";
|
||||
STATE_LABELS[STATE_LAST_ACTIVITY] = "(Last Act)";
|
||||
STATE_LABELS[STATE_CACHED_ACTIVITY] = " (Cch Act)";
|
||||
STATE_LABELS[STATE_CACHED_ACTIVITY_CLIENT] = "(Cch CAct)";
|
||||
STATE_LABELS[STATE_CACHED_EMPTY] = "(Cch Emty)";
|
||||
STATE_LABELS[STATE_CACHED] = " (Cached)";
|
||||
STATE_LABELS[STATE_FROZEN] = " Frozen";
|
||||
STATE_LABEL_CACHED = " (Cached)";
|
||||
STATE_LABEL_TOTAL = " TOTAL";
|
||||
|
||||
STATE_NAMES_CSV = new String[STATE_COUNT];
|
||||
STATE_NAMES_CSV[STATE_PERSISTENT] = "pers";
|
||||
STATE_NAMES_CSV[STATE_TOP] = "top";
|
||||
STATE_NAMES_CSV[STATE_BOUND_TOP_OR_FGS] = "btopfgs";
|
||||
STATE_NAMES_CSV[STATE_BOUND_FGS] = "bfgs";
|
||||
STATE_NAMES_CSV[STATE_BOUND_TOP] = "btop";
|
||||
STATE_NAMES_CSV[STATE_FGS] = "fgs";
|
||||
STATE_NAMES_CSV[STATE_IMPORTANT_FOREGROUND] = "impfg";
|
||||
STATE_NAMES_CSV[STATE_IMPORTANT_BACKGROUND] = "impbg";
|
||||
@@ -121,14 +122,14 @@ public final class DumpUtils {
|
||||
STATE_NAMES_CSV[STATE_HEAVY_WEIGHT] = "heavy";
|
||||
STATE_NAMES_CSV[STATE_HOME] = "home";
|
||||
STATE_NAMES_CSV[STATE_LAST_ACTIVITY] = "lastact";
|
||||
STATE_NAMES_CSV[STATE_CACHED_ACTIVITY] = "cch-activity";
|
||||
STATE_NAMES_CSV[STATE_CACHED_ACTIVITY_CLIENT] = "cch-aclient";
|
||||
STATE_NAMES_CSV[STATE_CACHED_EMPTY] = "cch-empty";
|
||||
STATE_NAMES_CSV[STATE_CACHED] = "cached";
|
||||
STATE_NAMES_CSV[STATE_FROZEN] = "frzn";
|
||||
|
||||
STATE_TAGS = new String[STATE_COUNT];
|
||||
STATE_TAGS[STATE_PERSISTENT] = "p";
|
||||
STATE_TAGS[STATE_TOP] = "t";
|
||||
STATE_TAGS[STATE_BOUND_TOP_OR_FGS] = "d";
|
||||
STATE_TAGS[STATE_BOUND_FGS] = "y";
|
||||
STATE_TAGS[STATE_BOUND_TOP] = "z";
|
||||
STATE_TAGS[STATE_FGS] = "g";
|
||||
STATE_TAGS[STATE_IMPORTANT_FOREGROUND] = "f";
|
||||
STATE_TAGS[STATE_IMPORTANT_BACKGROUND] = "b";
|
||||
@@ -139,15 +140,14 @@ public final class DumpUtils {
|
||||
STATE_TAGS[STATE_HEAVY_WEIGHT] = "w";
|
||||
STATE_TAGS[STATE_HOME] = "h";
|
||||
STATE_TAGS[STATE_LAST_ACTIVITY] = "l";
|
||||
STATE_TAGS[STATE_CACHED_ACTIVITY] = "a";
|
||||
STATE_TAGS[STATE_CACHED_ACTIVITY_CLIENT] = "c";
|
||||
STATE_TAGS[STATE_CACHED_EMPTY] = "e";
|
||||
STATE_TAGS[STATE_CACHED] = "a";
|
||||
STATE_TAGS[STATE_FROZEN] = "e";
|
||||
|
||||
STATE_PROTO_ENUMS = new int[STATE_COUNT];
|
||||
STATE_PROTO_ENUMS[STATE_PERSISTENT] = ProcessStatsEnums.PROCESS_STATE_PERSISTENT;
|
||||
STATE_PROTO_ENUMS[STATE_TOP] = ProcessStatsEnums.PROCESS_STATE_TOP;
|
||||
STATE_PROTO_ENUMS[STATE_BOUND_TOP_OR_FGS] =
|
||||
ProcessStatsEnums.PROCESS_STATE_BOUND_TOP_OR_FGS;
|
||||
STATE_PROTO_ENUMS[STATE_BOUND_FGS] = ProcessStatsEnums.PROCESS_STATE_BOUND_FGS;
|
||||
STATE_PROTO_ENUMS[STATE_BOUND_TOP] = ProcessStatsEnums.PROCESS_STATE_BOUND_TOP;
|
||||
STATE_PROTO_ENUMS[STATE_FGS] = ProcessStatsEnums.PROCESS_STATE_FGS;
|
||||
STATE_PROTO_ENUMS[STATE_IMPORTANT_FOREGROUND] =
|
||||
ProcessStatsEnums.PROCESS_STATE_IMPORTANT_FOREGROUND;
|
||||
@@ -161,10 +161,8 @@ public final class DumpUtils {
|
||||
STATE_PROTO_ENUMS[STATE_HEAVY_WEIGHT] = ProcessStatsEnums.PROCESS_STATE_HEAVY_WEIGHT;
|
||||
STATE_PROTO_ENUMS[STATE_HOME] = ProcessStatsEnums.PROCESS_STATE_HOME;
|
||||
STATE_PROTO_ENUMS[STATE_LAST_ACTIVITY] = ProcessStatsEnums.PROCESS_STATE_LAST_ACTIVITY;
|
||||
STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY] = ProcessStatsEnums.PROCESS_STATE_CACHED_ACTIVITY;
|
||||
STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY_CLIENT] =
|
||||
ProcessStatsEnums.PROCESS_STATE_CACHED_ACTIVITY_CLIENT;
|
||||
STATE_PROTO_ENUMS[STATE_CACHED_EMPTY] = ProcessStatsEnums.PROCESS_STATE_CACHED_EMPTY;
|
||||
STATE_PROTO_ENUMS[STATE_CACHED] = ProcessStatsEnums.PROCESS_STATE_CACHED_ACTIVITY;
|
||||
STATE_PROTO_ENUMS[STATE_FROZEN] = ProcessStatsEnums.PROCESS_STATE_FROZEN;
|
||||
|
||||
// Remap states, as defined by ProcessStats.java, to a reduced subset of states for data
|
||||
// aggregation / size reduction purposes.
|
||||
@@ -173,7 +171,9 @@ public final class DumpUtils {
|
||||
ProcessStatsEnums.AGGREGATED_PROCESS_STATE_PERSISTENT;
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_TOP] =
|
||||
ProcessStatsEnums.AGGREGATED_PROCESS_STATE_TOP;
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_BOUND_TOP_OR_FGS] =
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_BOUND_FGS] =
|
||||
ProcessStatsEnums.AGGREGATED_PROCESS_STATE_BOUND_TOP_OR_FGS;
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_BOUND_TOP] =
|
||||
ProcessStatsEnums.AGGREGATED_PROCESS_STATE_BOUND_TOP_OR_FGS;
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_FGS] =
|
||||
ProcessStatsEnums.AGGREGATED_PROCESS_STATE_FGS;
|
||||
@@ -196,11 +196,9 @@ public final class DumpUtils {
|
||||
ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED;
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_LAST_ACTIVITY] =
|
||||
ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED;
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_CACHED_ACTIVITY] =
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_CACHED] =
|
||||
ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED;
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_CACHED_ACTIVITY_CLIENT] =
|
||||
ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED;
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_CACHED_EMPTY] =
|
||||
PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_FROZEN] =
|
||||
ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,10 +28,9 @@ import static com.android.internal.app.procstats.ProcessStats.PSS_USS_AVERAGE;
|
||||
import static com.android.internal.app.procstats.ProcessStats.PSS_USS_MAXIMUM;
|
||||
import static com.android.internal.app.procstats.ProcessStats.PSS_USS_MINIMUM;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_BACKUP;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_BOUND_TOP_OR_FGS;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_CACHED_ACTIVITY;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_CACHED_ACTIVITY_CLIENT;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_CACHED_EMPTY;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_BOUND_FGS;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_BOUND_TOP;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_CACHED;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_COUNT;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_FGS;
|
||||
import static com.android.internal.app.procstats.ProcessStats.STATE_HEAVY_WEIGHT;
|
||||
@@ -85,9 +84,9 @@ public final class ProcessState {
|
||||
STATE_PERSISTENT, // ActivityManager.PROCESS_STATE_PERSISTENT
|
||||
STATE_PERSISTENT, // ActivityManager.PROCESS_STATE_PERSISTENT_UI
|
||||
STATE_TOP, // ActivityManager.PROCESS_STATE_TOP
|
||||
STATE_BOUND_TOP_OR_FGS, // ActivityManager.PROCESS_STATE_BOUND_TOP
|
||||
STATE_BOUND_TOP, // ActivityManager.PROCESS_STATE_BOUND_TOP
|
||||
STATE_FGS, // ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE
|
||||
STATE_BOUND_TOP_OR_FGS, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE
|
||||
STATE_BOUND_FGS, // ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE
|
||||
STATE_IMPORTANT_FOREGROUND, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND
|
||||
STATE_IMPORTANT_BACKGROUND, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND
|
||||
STATE_IMPORTANT_BACKGROUND, // ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND
|
||||
@@ -98,10 +97,10 @@ public final class ProcessState {
|
||||
STATE_HEAVY_WEIGHT, // ActivityManager.PROCESS_STATE_HEAVY_WEIGHT
|
||||
STATE_HOME, // ActivityManager.PROCESS_STATE_HOME
|
||||
STATE_LAST_ACTIVITY, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY
|
||||
STATE_CACHED_ACTIVITY, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY
|
||||
STATE_CACHED_ACTIVITY_CLIENT, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT
|
||||
STATE_CACHED_ACTIVITY, // ActivityManager.PROCESS_STATE_CACHED_RECENT
|
||||
STATE_CACHED_EMPTY, // ActivityManager.PROCESS_STATE_CACHED_EMPTY
|
||||
STATE_CACHED, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY
|
||||
STATE_CACHED, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT
|
||||
STATE_CACHED, // ActivityManager.PROCESS_STATE_CACHED_RECENT
|
||||
STATE_CACHED, // ActivityManager.PROCESS_STATE_CACHED_EMPTY
|
||||
};
|
||||
|
||||
public static final Comparator<ProcessState> COMPARATOR = new Comparator<ProcessState>() {
|
||||
@@ -926,8 +925,11 @@ public final class ProcessState {
|
||||
screenStates, memStates, new int[] { STATE_PERSISTENT }, now, totalTime, true);
|
||||
dumpProcessSummaryDetails(pw, prefix, DumpUtils.STATE_LABELS[STATE_TOP],
|
||||
screenStates, memStates, new int[] {STATE_TOP}, now, totalTime, true);
|
||||
dumpProcessSummaryDetails(pw, prefix, DumpUtils.STATE_LABELS[STATE_BOUND_TOP_OR_FGS],
|
||||
screenStates, memStates, new int[] { STATE_BOUND_TOP_OR_FGS}, now, totalTime,
|
||||
dumpProcessSummaryDetails(pw, prefix, DumpUtils.STATE_LABELS[STATE_BOUND_TOP],
|
||||
screenStates, memStates, new int[] { STATE_BOUND_TOP }, now, totalTime,
|
||||
true);
|
||||
dumpProcessSummaryDetails(pw, prefix, DumpUtils.STATE_LABELS[STATE_BOUND_FGS],
|
||||
screenStates, memStates, new int[] { STATE_BOUND_FGS }, now, totalTime,
|
||||
true);
|
||||
dumpProcessSummaryDetails(pw, prefix, DumpUtils.STATE_LABELS[STATE_FGS],
|
||||
screenStates, memStates, new int[] { STATE_FGS}, now, totalTime,
|
||||
@@ -953,9 +955,6 @@ public final class ProcessState {
|
||||
screenStates, memStates, new int[] {STATE_HOME}, now, totalTime, true);
|
||||
dumpProcessSummaryDetails(pw, prefix, DumpUtils.STATE_LABELS[STATE_LAST_ACTIVITY],
|
||||
screenStates, memStates, new int[] {STATE_LAST_ACTIVITY}, now, totalTime, true);
|
||||
dumpProcessSummaryDetails(pw, prefix, DumpUtils.STATE_LABEL_CACHED,
|
||||
screenStates, memStates, new int[] {STATE_CACHED_ACTIVITY,
|
||||
STATE_CACHED_ACTIVITY_CLIENT, STATE_CACHED_EMPTY}, now, totalTime, true);
|
||||
}
|
||||
|
||||
public void dumpProcessState(PrintWriter pw, String prefix,
|
||||
@@ -1563,7 +1562,10 @@ public final class ProcessState {
|
||||
case STATE_TOP:
|
||||
topMs += duration;
|
||||
break;
|
||||
case STATE_BOUND_TOP_OR_FGS:
|
||||
case STATE_BOUND_FGS:
|
||||
boundFgsMs += duration;
|
||||
break;
|
||||
case STATE_BOUND_TOP:
|
||||
boundTopMs += duration;
|
||||
break;
|
||||
case STATE_FGS:
|
||||
@@ -1583,13 +1585,10 @@ public final class ProcessState {
|
||||
case STATE_PERSISTENT:
|
||||
otherMs += duration;
|
||||
break;
|
||||
case STATE_CACHED_ACTIVITY:
|
||||
case STATE_CACHED_ACTIVITY_CLIENT:
|
||||
case STATE_CACHED_EMPTY:
|
||||
case STATE_CACHED:
|
||||
cachedMs += duration;
|
||||
break;
|
||||
// TODO (b/261910877) Add support for tracking boundFgsMs and
|
||||
// frozenMs.
|
||||
// TODO (b/261910877) Add support for tracking frozenMs.
|
||||
}
|
||||
}
|
||||
statsEventOutput.write(
|
||||
|
||||
@@ -81,21 +81,21 @@ public final class ProcessStats implements Parcelable {
|
||||
public static final int STATE_NOTHING = -1;
|
||||
public static final int STATE_PERSISTENT = 0;
|
||||
public static final int STATE_TOP = 1;
|
||||
public static final int STATE_BOUND_TOP_OR_FGS = 2;
|
||||
public static final int STATE_BOUND_TOP = 2;
|
||||
public static final int STATE_FGS = 3;
|
||||
public static final int STATE_IMPORTANT_FOREGROUND = 4;
|
||||
public static final int STATE_IMPORTANT_BACKGROUND = 5;
|
||||
public static final int STATE_BACKUP = 6;
|
||||
public static final int STATE_SERVICE = 7;
|
||||
public static final int STATE_SERVICE_RESTARTING = 8;
|
||||
public static final int STATE_RECEIVER = 9;
|
||||
public static final int STATE_HEAVY_WEIGHT = 10;
|
||||
public static final int STATE_HOME = 11;
|
||||
public static final int STATE_LAST_ACTIVITY = 12;
|
||||
public static final int STATE_CACHED_ACTIVITY = 13;
|
||||
public static final int STATE_CACHED_ACTIVITY_CLIENT = 14;
|
||||
public static final int STATE_CACHED_EMPTY = 15;
|
||||
public static final int STATE_COUNT = STATE_CACHED_EMPTY+1;
|
||||
public static final int STATE_BOUND_FGS = 4;
|
||||
public static final int STATE_IMPORTANT_FOREGROUND = 5;
|
||||
public static final int STATE_IMPORTANT_BACKGROUND = 6;
|
||||
public static final int STATE_BACKUP = 7;
|
||||
public static final int STATE_SERVICE = 8;
|
||||
public static final int STATE_SERVICE_RESTARTING = 9;
|
||||
public static final int STATE_RECEIVER = 10;
|
||||
public static final int STATE_HEAVY_WEIGHT = 11;
|
||||
public static final int STATE_HOME = 12;
|
||||
public static final int STATE_LAST_ACTIVITY = 13;
|
||||
public static final int STATE_CACHED = 14;
|
||||
public static final int STATE_FROZEN = 15;
|
||||
public static final int STATE_COUNT = STATE_FROZEN + 1;
|
||||
|
||||
public static final int PSS_SAMPLE_COUNT = 0;
|
||||
public static final int PSS_MINIMUM = 1;
|
||||
@@ -154,9 +154,10 @@ public final class ProcessStats implements Parcelable {
|
||||
public static final int[] ALL_SCREEN_ADJ = new int[] { ADJ_SCREEN_OFF, ADJ_SCREEN_ON };
|
||||
|
||||
public static final int[] NON_CACHED_PROC_STATES = new int[] {
|
||||
STATE_PERSISTENT, STATE_TOP, STATE_BOUND_TOP_OR_FGS, STATE_FGS,
|
||||
STATE_PERSISTENT, STATE_TOP, STATE_FGS,
|
||||
STATE_IMPORTANT_FOREGROUND, STATE_IMPORTANT_BACKGROUND, STATE_BACKUP,
|
||||
STATE_SERVICE, STATE_SERVICE_RESTARTING, STATE_RECEIVER, STATE_HEAVY_WEIGHT
|
||||
STATE_SERVICE, STATE_SERVICE_RESTARTING, STATE_RECEIVER, STATE_HEAVY_WEIGHT,
|
||||
STATE_BOUND_TOP, STATE_BOUND_FGS
|
||||
};
|
||||
|
||||
public static final int[] BACKGROUND_PROC_STATES = new int[] {
|
||||
@@ -165,11 +166,11 @@ public final class ProcessStats implements Parcelable {
|
||||
};
|
||||
|
||||
public static final int[] ALL_PROC_STATES = new int[] { STATE_PERSISTENT,
|
||||
STATE_TOP, STATE_BOUND_TOP_OR_FGS, STATE_FGS, STATE_IMPORTANT_FOREGROUND,
|
||||
STATE_TOP, STATE_FGS, STATE_IMPORTANT_FOREGROUND,
|
||||
STATE_IMPORTANT_BACKGROUND, STATE_BACKUP,
|
||||
STATE_SERVICE, STATE_SERVICE_RESTARTING, STATE_RECEIVER,
|
||||
STATE_HEAVY_WEIGHT, STATE_HOME, STATE_LAST_ACTIVITY, STATE_CACHED_ACTIVITY,
|
||||
STATE_CACHED_ACTIVITY_CLIENT, STATE_CACHED_EMPTY
|
||||
STATE_HEAVY_WEIGHT, STATE_HOME, STATE_LAST_ACTIVITY, STATE_CACHED,
|
||||
STATE_BOUND_TOP, STATE_BOUND_FGS, STATE_FROZEN
|
||||
};
|
||||
|
||||
// Should report process stats.
|
||||
|
||||
@@ -23,6 +23,8 @@ import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.MockitoAnnotations.initMocks;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.internal.util.FrameworkStatsLog;
|
||||
@@ -127,6 +129,34 @@ public class ProcessStatsTest extends TestCase {
|
||||
eq(0));
|
||||
}
|
||||
|
||||
@SmallTest
|
||||
public void testDumpBoundFgsDuration() throws Exception {
|
||||
ProcessStats processStats = new ProcessStats();
|
||||
ProcessState processState =
|
||||
processStats.getProcessStateLocked(
|
||||
APP_1_PACKAGE_NAME, APP_1_UID, APP_1_VERSION, APP_1_PROCESS_NAME);
|
||||
processState.setState(ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE,
|
||||
ProcessStats.ADJ_MEM_FACTOR_NORMAL, NOW_MS, /* pkgList */ null);
|
||||
processState.commitStateTime(NOW_MS + TimeUnit.SECONDS.toMillis(DURATION_SECS));
|
||||
processStats.dumpProcessState(FrameworkStatsLog.PROCESS_STATE, mStatsEventOutput);
|
||||
verify(mStatsEventOutput)
|
||||
.write(
|
||||
eq(FrameworkStatsLog.PROCESS_STATE),
|
||||
eq(APP_1_UID),
|
||||
eq(APP_1_PROCESS_NAME),
|
||||
anyInt(),
|
||||
anyInt(),
|
||||
eq(0),
|
||||
eq(0),
|
||||
eq(0),
|
||||
eq(0),
|
||||
eq(DURATION_SECS),
|
||||
eq(0),
|
||||
eq(0),
|
||||
eq(0),
|
||||
eq(0));
|
||||
}
|
||||
|
||||
@SmallTest
|
||||
public void testDumpProcessAssociation() throws Exception {
|
||||
ProcessStats processStats = new ProcessStats();
|
||||
|
||||
@@ -69,7 +69,7 @@ public final class ProcessStatsService extends IProcessStats.Stub {
|
||||
// define the encoding of that data in an integer.
|
||||
|
||||
static final int MAX_HISTORIC_STATES = 8; // Maximum number of historic states we will keep.
|
||||
static final String STATE_FILE_PREFIX = "state-"; // Prefix to use for state filenames.
|
||||
static final String STATE_FILE_PREFIX = "state-v2-"; // Prefix to use for state filenames.
|
||||
static final String STATE_FILE_SUFFIX = ".bin"; // Suffix to use for state filenames.
|
||||
static final String STATE_FILE_CHECKIN_SUFFIX = ".ci"; // State files that have checked in.
|
||||
static long WRITE_PERIOD = 30*60*1000; // Write file every 30 minutes or so.
|
||||
@@ -462,6 +462,10 @@ public final class ProcessStatsService extends IProcessStats.Stub {
|
||||
File file = files[i];
|
||||
String fileStr = file.getPath();
|
||||
if (DEBUG) Slog.d(TAG, "Collecting: " + fileStr);
|
||||
if (!file.getName().startsWith(STATE_FILE_PREFIX)) {
|
||||
if (DEBUG) Slog.d(TAG, "Skipping: mismatching prefix");
|
||||
continue;
|
||||
}
|
||||
if (!inclCheckedIn && fileStr.endsWith(STATE_FILE_CHECKIN_SUFFIX)) {
|
||||
if (DEBUG) Slog.d(TAG, "Skipping: already checked in");
|
||||
continue;
|
||||
@@ -478,6 +482,14 @@ public final class ProcessStatsService extends IProcessStats.Stub {
|
||||
|
||||
@GuardedBy("mFileLock")
|
||||
private void trimHistoricStatesWriteLF() {
|
||||
File[] files = mBaseDir.listFiles();
|
||||
if (files != null) {
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
if (!files[i].getName().startsWith(STATE_FILE_PREFIX)) {
|
||||
files[i].delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
ArrayList<String> filesArray = getCommittedFilesLF(MAX_HISTORIC_STATES, false, true);
|
||||
if (filesArray == null) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user