Loading core/java/com/android/internal/app/procstats/DumpUtils.java +29 −31 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"; Loading @@ -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"; Loading @@ -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"; Loading @@ -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"; Loading @@ -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; Loading @@ -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. Loading @@ -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; Loading @@ -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] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_CACHED_ACTIVITY_CLIENT] = PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_CACHED] = 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; } Loading core/java/com/android/internal/app/procstats/ProcessState.java +20 −21 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading @@ -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>() { Loading Loading @@ -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, Loading @@ -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, Loading Loading @@ -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: Loading @@ -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( Loading core/java/com/android/internal/app/procstats/ProcessStats.java +20 −19 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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[] { Loading @@ -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. Loading core/tests/coretests/src/com/android/internal/app/procstats/ProcessStatsTest.java +30 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading services/core/java/com/android/server/am/ProcessStatsService.java +13 −1 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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; Loading @@ -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; Loading Loading
core/java/com/android/internal/app/procstats/DumpUtils.java +29 −31 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"; Loading @@ -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"; Loading @@ -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"; Loading @@ -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"; Loading @@ -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; Loading @@ -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. Loading @@ -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; Loading @@ -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] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_CACHED_ACTIVITY_CLIENT] = PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_CACHED] = 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; } Loading
core/java/com/android/internal/app/procstats/ProcessState.java +20 −21 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading @@ -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>() { Loading Loading @@ -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, Loading @@ -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, Loading Loading @@ -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: Loading @@ -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( Loading
core/java/com/android/internal/app/procstats/ProcessStats.java +20 −19 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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[] { Loading @@ -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. Loading
core/tests/coretests/src/com/android/internal/app/procstats/ProcessStatsTest.java +30 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading
services/core/java/com/android/server/am/ProcessStatsService.java +13 −1 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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; Loading @@ -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; Loading