Merge "Add aggregation method to dumputils" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c498e5d6ee
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user