Loading core/java/com/android/internal/app/procstats/DumpUtils.java +86 −2 Original line number Diff line number Diff line Loading @@ -16,14 +16,39 @@ package com.android.internal.app.procstats; import static com.android.internal.app.procstats.ProcessStats.ADJ_COUNT; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_COUNT; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_CRITICAL; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_LOW; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_MODERATE; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_NORMAL; import static com.android.internal.app.procstats.ProcessStats.ADJ_NOTHING; 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_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_COUNT; 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; import static com.android.internal.app.procstats.ProcessStats.STATE_IMPORTANT_FOREGROUND; import static com.android.internal.app.procstats.ProcessStats.STATE_LAST_ACTIVITY; import static com.android.internal.app.procstats.ProcessStats.STATE_NOTHING; import static com.android.internal.app.procstats.ProcessStats.STATE_PERSISTENT; import static com.android.internal.app.procstats.ProcessStats.STATE_RECEIVER; import static com.android.internal.app.procstats.ProcessStats.STATE_SERVICE; import static com.android.internal.app.procstats.ProcessStats.STATE_SERVICE_RESTARTING; import static com.android.internal.app.procstats.ProcessStats.STATE_TOP; import android.os.UserHandle; import android.service.procstats.ProcessStatsEnums; import android.service.procstats.ProcessStatsStateProto; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import static com.android.internal.app.procstats.ProcessStats.*; import java.io.PrintWriter; import java.util.ArrayList; Loading @@ -38,6 +63,7 @@ public final class DumpUtils { public static final String[] STATE_NAMES_CSV; static final String[] STATE_TAGS; static final int[] STATE_PROTO_ENUMS; private static final int[] PROCESS_STATS_STATE_TO_AGGREGATED_STATE; // Make the mapping easy to update. static { Loading Loading @@ -126,6 +152,39 @@ public final class DumpUtils { STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY_CLIENT] = ProcessStatsEnums.PROCESS_STATE_CACHED_ACTIVITY_CLIENT; STATE_PROTO_ENUMS[STATE_CACHED_EMPTY] = ProcessStatsEnums.PROCESS_STATE_CACHED_EMPTY; // Remap states, as defined by ProcessStats.java, to a reduced subset of states for data // aggregation / size reduction purposes. PROCESS_STATS_STATE_TO_AGGREGATED_STATE = new int[STATE_COUNT]; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_PERSISTENT] = 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_IMPORTANT_FOREGROUND] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_IMPORTANT_FOREGROUND; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_IMPORTANT_BACKGROUND] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_BACKGROUND; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_BACKUP] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_BACKGROUND; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_SERVICE] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_BACKGROUND; // "Restarting" is not a real state, so this shouldn't exist. PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_SERVICE_RESTARTING] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_UNKNOWN; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_RECEIVER] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_RECEIVER; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_HEAVY_WEIGHT] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_BACKGROUND; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_HOME] = 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] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_CACHED_EMPTY] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED; } public static final String[] ADJ_SCREEN_NAMES_CSV = new String[] { Loading Loading @@ -455,4 +514,29 @@ public final class DumpUtils { } return itemName; } /** * Aggregate process states to reduce size of statistics logs. * * <p>Involves unpacking the three parts of state (process state / device memory state / * screen state), manipulating the elements, then re-packing the new values into a single * int. This integer is guaranteed to be unique for any given combination of state elements. * * @param curState current state as used in mCurState in {@class ProcessState} ie. a value * combined from the process's state, the device's memory pressure state, and * the device's screen on/off state. * @return an integer representing the combination of screen state and process state, where * process state has been aggregated. */ public static int aggregateCurrentProcessState(int curState) { int screenStateIndex = curState / (ADJ_SCREEN_MOD * STATE_COUNT); // extract process state from the compound state variable (discarding memory state) int procStateIndex = curState % STATE_COUNT; // Remap process state per array above. procStateIndex = PROCESS_STATS_STATE_TO_AGGREGATED_STATE[procStateIndex]; // Pack screen & process state using bit shifting return (procStateIndex << 8) | screenStateIndex; } } core/proto/android/service/procstats_enum.proto +24 −0 Original line number Diff line number Diff line Loading @@ -76,3 +76,27 @@ enum ServiceOperationState { SERVICE_OPERATION_STATE_BOUND = 4; SERVICE_OPERATION_STATE_EXECUTING = 5; } // this enum list is from frameworks/base/core/java/com/android/internal/app/procstats/ProcessStats.java // and not frameworks/base/core/java/android/app/ActivityManager.java enum AggregatedProcessState { AGGREGATED_PROCESS_STATE_UNKNOWN = 0; // Persistent system process; PERSISTENT or PERSISTENT_UI in ActivityManager AGGREGATED_PROCESS_STATE_PERSISTENT = 1; // Top activity; actually any visible activity; TOP or TOP_SLEEPING in ActivityManager AGGREGATED_PROCESS_STATE_TOP = 2; // Bound top foreground process; BOUND_TOP or BOUND_FOREGROUND_SERVICE in ActivityManager AGGREGATED_PROCESS_STATE_BOUND_TOP_OR_FGS = 3; // Important foreground process; FOREGROUND_SERVICE in ActivityManager AGGREGATED_PROCESS_STATE_FGS = 4; // Important foreground process ; IMPORTANT_FOREGROUND in ActivityManager AGGREGATED_PROCESS_STATE_IMPORTANT_FOREGROUND = 5; // Various background processes; IMPORTANT_BACKGROUND, TRANSIENT_BACKGROUND, BACKUP, SERVICE, // HEAVY_WEIGHT in ActivityManager AGGREGATED_PROCESS_STATE_BACKGROUND = 6; // Process running a receiver; RECEIVER in ActivityManager AGGREGATED_PROCESS_STATE_RECEIVER = 7; // Various cached processes; HOME, LAST_ACTIVITY, CACHED_ACTIVITY, CACHED_RECENT, // CACHED_ACTIVITY_CLIENT, CACHED_EMPTY in ActivityManager AGGREGATED_PROCESS_STATE_CACHED = 8; } No newline at end of file Loading
core/java/com/android/internal/app/procstats/DumpUtils.java +86 −2 Original line number Diff line number Diff line Loading @@ -16,14 +16,39 @@ package com.android.internal.app.procstats; import static com.android.internal.app.procstats.ProcessStats.ADJ_COUNT; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_COUNT; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_CRITICAL; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_LOW; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_MODERATE; import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_NORMAL; import static com.android.internal.app.procstats.ProcessStats.ADJ_NOTHING; 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_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_COUNT; 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; import static com.android.internal.app.procstats.ProcessStats.STATE_IMPORTANT_FOREGROUND; import static com.android.internal.app.procstats.ProcessStats.STATE_LAST_ACTIVITY; import static com.android.internal.app.procstats.ProcessStats.STATE_NOTHING; import static com.android.internal.app.procstats.ProcessStats.STATE_PERSISTENT; import static com.android.internal.app.procstats.ProcessStats.STATE_RECEIVER; import static com.android.internal.app.procstats.ProcessStats.STATE_SERVICE; import static com.android.internal.app.procstats.ProcessStats.STATE_SERVICE_RESTARTING; import static com.android.internal.app.procstats.ProcessStats.STATE_TOP; import android.os.UserHandle; import android.service.procstats.ProcessStatsEnums; import android.service.procstats.ProcessStatsStateProto; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import static com.android.internal.app.procstats.ProcessStats.*; import java.io.PrintWriter; import java.util.ArrayList; Loading @@ -38,6 +63,7 @@ public final class DumpUtils { public static final String[] STATE_NAMES_CSV; static final String[] STATE_TAGS; static final int[] STATE_PROTO_ENUMS; private static final int[] PROCESS_STATS_STATE_TO_AGGREGATED_STATE; // Make the mapping easy to update. static { Loading Loading @@ -126,6 +152,39 @@ public final class DumpUtils { STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY_CLIENT] = ProcessStatsEnums.PROCESS_STATE_CACHED_ACTIVITY_CLIENT; STATE_PROTO_ENUMS[STATE_CACHED_EMPTY] = ProcessStatsEnums.PROCESS_STATE_CACHED_EMPTY; // Remap states, as defined by ProcessStats.java, to a reduced subset of states for data // aggregation / size reduction purposes. PROCESS_STATS_STATE_TO_AGGREGATED_STATE = new int[STATE_COUNT]; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_PERSISTENT] = 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_IMPORTANT_FOREGROUND] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_IMPORTANT_FOREGROUND; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_IMPORTANT_BACKGROUND] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_BACKGROUND; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_BACKUP] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_BACKGROUND; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_SERVICE] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_BACKGROUND; // "Restarting" is not a real state, so this shouldn't exist. PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_SERVICE_RESTARTING] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_UNKNOWN; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_RECEIVER] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_RECEIVER; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_HEAVY_WEIGHT] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_BACKGROUND; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_HOME] = 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] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED; PROCESS_STATS_STATE_TO_AGGREGATED_STATE[STATE_CACHED_EMPTY] = ProcessStatsEnums.AGGREGATED_PROCESS_STATE_CACHED; } public static final String[] ADJ_SCREEN_NAMES_CSV = new String[] { Loading Loading @@ -455,4 +514,29 @@ public final class DumpUtils { } return itemName; } /** * Aggregate process states to reduce size of statistics logs. * * <p>Involves unpacking the three parts of state (process state / device memory state / * screen state), manipulating the elements, then re-packing the new values into a single * int. This integer is guaranteed to be unique for any given combination of state elements. * * @param curState current state as used in mCurState in {@class ProcessState} ie. a value * combined from the process's state, the device's memory pressure state, and * the device's screen on/off state. * @return an integer representing the combination of screen state and process state, where * process state has been aggregated. */ public static int aggregateCurrentProcessState(int curState) { int screenStateIndex = curState / (ADJ_SCREEN_MOD * STATE_COUNT); // extract process state from the compound state variable (discarding memory state) int procStateIndex = curState % STATE_COUNT; // Remap process state per array above. procStateIndex = PROCESS_STATS_STATE_TO_AGGREGATED_STATE[procStateIndex]; // Pack screen & process state using bit shifting return (procStateIndex << 8) | screenStateIndex; } }
core/proto/android/service/procstats_enum.proto +24 −0 Original line number Diff line number Diff line Loading @@ -76,3 +76,27 @@ enum ServiceOperationState { SERVICE_OPERATION_STATE_BOUND = 4; SERVICE_OPERATION_STATE_EXECUTING = 5; } // this enum list is from frameworks/base/core/java/com/android/internal/app/procstats/ProcessStats.java // and not frameworks/base/core/java/android/app/ActivityManager.java enum AggregatedProcessState { AGGREGATED_PROCESS_STATE_UNKNOWN = 0; // Persistent system process; PERSISTENT or PERSISTENT_UI in ActivityManager AGGREGATED_PROCESS_STATE_PERSISTENT = 1; // Top activity; actually any visible activity; TOP or TOP_SLEEPING in ActivityManager AGGREGATED_PROCESS_STATE_TOP = 2; // Bound top foreground process; BOUND_TOP or BOUND_FOREGROUND_SERVICE in ActivityManager AGGREGATED_PROCESS_STATE_BOUND_TOP_OR_FGS = 3; // Important foreground process; FOREGROUND_SERVICE in ActivityManager AGGREGATED_PROCESS_STATE_FGS = 4; // Important foreground process ; IMPORTANT_FOREGROUND in ActivityManager AGGREGATED_PROCESS_STATE_IMPORTANT_FOREGROUND = 5; // Various background processes; IMPORTANT_BACKGROUND, TRANSIENT_BACKGROUND, BACKUP, SERVICE, // HEAVY_WEIGHT in ActivityManager AGGREGATED_PROCESS_STATE_BACKGROUND = 6; // Process running a receiver; RECEIVER in ActivityManager AGGREGATED_PROCESS_STATE_RECEIVER = 7; // Various cached processes; HOME, LAST_ACTIVITY, CACHED_ACTIVITY, CACHED_RECENT, // CACHED_ACTIVITY_CLIENT, CACHED_EMPTY in ActivityManager AGGREGATED_PROCESS_STATE_CACHED = 8; } No newline at end of file