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

Commit f02561b2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

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

Merge "Add aggregation method to dumputils" into rvc-dev am: c498e5d6 am: b283a68d am: 60146079

Change-Id: I40c9c0b2d8957140c3d682a648ea7bce3f0c8c80
parents 0aaf8415 60146079
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