Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7135876 authored by Richard Gaywood's avatar Richard Gaywood Committed by Android (Google) Code Review
Browse files

Merge "Add aggregation method to dumputils"

parents 3efe1dea b832e988
Loading
Loading
Loading
Loading
+86 −2
Original line number Diff line number Diff line
@@ -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;

@@ -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 {
@@ -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[] {
@@ -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;
    }
}
+24 −0
Original line number Diff line number Diff line
@@ -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