Merge "Add aggregation method to dumputils" into rvc-dev am: c498e5d6ee

Change-Id: I5e503961c297c089fbcd41cebad1c81d5791926a
This commit is contained in:
TreeHugger Robot
2020-04-16 08:14:12 +00:00
committed by Automerger Merge Worker
2 changed files with 110 additions and 2 deletions

View File

@@ -16,14 +16,39 @@
package com.android.internal.app.procstats; 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.os.UserHandle;
import android.service.procstats.ProcessStatsEnums; import android.service.procstats.ProcessStatsEnums;
import android.service.procstats.ProcessStatsStateProto; import android.service.procstats.ProcessStatsStateProto;
import android.util.TimeUtils; import android.util.TimeUtils;
import android.util.proto.ProtoOutputStream; import android.util.proto.ProtoOutputStream;
import static com.android.internal.app.procstats.ProcessStats.*;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
@@ -38,6 +63,7 @@ public final class DumpUtils {
public static final String[] STATE_NAMES_CSV; public static final String[] STATE_NAMES_CSV;
static final String[] STATE_TAGS; static final String[] STATE_TAGS;
static final int[] STATE_PROTO_ENUMS; static final int[] STATE_PROTO_ENUMS;
private static final int[] PROCESS_STATS_STATE_TO_AGGREGATED_STATE;
// Make the mapping easy to update. // Make the mapping easy to update.
static { static {
@@ -126,6 +152,39 @@ public final class DumpUtils {
STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY_CLIENT] = STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY_CLIENT] =
ProcessStatsEnums.PROCESS_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_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[] { public static final String[] ADJ_SCREEN_NAMES_CSV = new String[] {
@@ -455,4 +514,29 @@ public final class DumpUtils {
} }
return itemName; 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;
}
} }

View File

@@ -76,3 +76,27 @@ enum ServiceOperationState {
SERVICE_OPERATION_STATE_BOUND = 4; SERVICE_OPERATION_STATE_BOUND = 4;
SERVICE_OPERATION_STATE_EXECUTING = 5; 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;
}