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

Commit b29199a6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Refine procstats metric protos."

parents 1169af15 bac82323
Loading
Loading
Loading
Loading
+26 −15
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@ package com.android.internal.app.procstats;
import android.os.Parcel;
import android.os.SystemClock;
import android.os.UserHandle;
import android.service.procstats.ProcessStatsAssociationStateProto;
import android.service.procstats.ProcessStatsStateProto;
import android.service.procstats.PackageAssociationProcessStatsProto;
import android.service.procstats.PackageAssociationSourceProcessStatsProto;
import android.util.ArrayMap;
import android.util.Slog;
import android.util.TimeUtils;
@@ -662,22 +662,23 @@ public final class AssociationState {
    public void writeToProto(ProtoOutputStream proto, long fieldId, long now) {
        final long token = proto.start(fieldId);

        proto.write(ProcessStatsAssociationStateProto.COMPONENT_NAME, mName);
        proto.write(PackageAssociationProcessStatsProto.COMPONENT_NAME, mName);

        final int NSRC = mSources.size();
        for (int isrc = 0; isrc < NSRC; isrc++) {
            final SourceKey key = mSources.keyAt(isrc);
            final SourceState src = mSources.valueAt(isrc);
            final long sourceToken = proto.start(ProcessStatsAssociationStateProto.SOURCES);
            proto.write(ProcessStatsAssociationStateProto.Source.PROCESS, key.mProcess);
            proto.write(ProcessStatsAssociationStateProto.Source.UID, key.mUid);
            proto.write(ProcessStatsAssociationStateProto.Source.TOTAL_COUNT, src.mCount);
            final long sourceToken = proto.start(PackageAssociationProcessStatsProto.SOURCES);
            proto.write(PackageAssociationSourceProcessStatsProto.PROCESS_NAME, key.mProcess);
            proto.write(PackageAssociationSourceProcessStatsProto.PROCESS_UID, key.mUid);
            proto.write(PackageAssociationSourceProcessStatsProto.TOTAL_COUNT, src.mCount);
            long duration = src.mDuration;
            if (src.mNesting > 0) {
                duration += now - src.mStartUptime;
            }
            proto.write(ProcessStatsAssociationStateProto.Source.TOTAL_DURATION_MS, duration);
            proto.write(PackageAssociationSourceProcessStatsProto.TOTAL_DURATION_MS, duration);
            if (src.mActiveCount != 0) {
                proto.write(ProcessStatsAssociationStateProto.Source.ACTIVE_COUNT,
                proto.write(PackageAssociationSourceProcessStatsProto.ACTIVE_COUNT,
                        src.mActiveCount);
            }
            final long timeNow = src.mActiveStartUptime != 0 ? (now-src.mActiveStartUptime) : 0;
@@ -690,16 +691,26 @@ public final class AssociationState {
                        duration += timeNow;
                    }
                    final int procState = SparseMappingTable.getIdFromKey(dkey);
                    DumpUtils.printProcStateDurationProto(proto,
                            ProcessStatsAssociationStateProto.Source.ACTIVE_STATES,
                            procState, duration);
                    final long stateToken = proto.start(
                            PackageAssociationSourceProcessStatsProto.ACTIVE_STATE_STATS);
                    DumpUtils.printProto(proto,
                            PackageAssociationSourceProcessStatsProto.StateStats.PROCESS_STATE,
                            DumpUtils.STATE_PROTO_ENUMS, procState, 1);
                    proto.write(PackageAssociationSourceProcessStatsProto.StateStats.DURATION_MS,
                            duration);
                    proto.end(stateToken);
                }
            } else {
                duration = src.mActiveDuration + timeNow;
                if (duration != 0) {
                    DumpUtils.printProcStateDurationProto(proto,
                            ProcessStatsAssociationStateProto.Source.ACTIVE_STATES,
                            src.mActiveProcState, duration);
                    final long stateToken = proto.start(
                            PackageAssociationSourceProcessStatsProto.ACTIVE_STATE_STATS);
                    DumpUtils.printProto(proto,
                            PackageAssociationSourceProcessStatsProto.StateStats.PROCESS_STATE,
                            DumpUtils.STATE_PROTO_ENUMS, src.mActiveProcState, 1);
                    proto.write(PackageAssociationSourceProcessStatsProto.StateStats.DURATION_MS,
                            duration);
                    proto.end(stateToken);
                }
            }
            proto.end(sourceToken);
+25 −21
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.internal.app.procstats;

import android.os.UserHandle;
import android.service.procstats.ProcessStatsEnums;
import android.service.procstats.ProcessStatsStateProto;
import android.util.TimeUtils;
import android.util.proto.ProtoOutputStream;
@@ -107,20 +108,24 @@ public final class DumpUtils {
        STATE_TAGS[STATE_CACHED_EMPTY]              = "e";

        STATE_PROTO_ENUMS = new int[STATE_COUNT];
        STATE_PROTO_ENUMS[STATE_PERSISTENT] = ProcessStatsStateProto.PERSISTENT;
        STATE_PROTO_ENUMS[STATE_TOP] = ProcessStatsStateProto.TOP;
        STATE_PROTO_ENUMS[STATE_IMPORTANT_FOREGROUND] = ProcessStatsStateProto.IMPORTANT_FOREGROUND;
        STATE_PROTO_ENUMS[STATE_IMPORTANT_BACKGROUND] = ProcessStatsStateProto.IMPORTANT_BACKGROUND;
        STATE_PROTO_ENUMS[STATE_BACKUP] = ProcessStatsStateProto.BACKUP;
        STATE_PROTO_ENUMS[STATE_SERVICE] = ProcessStatsStateProto.SERVICE;
        STATE_PROTO_ENUMS[STATE_SERVICE_RESTARTING] = ProcessStatsStateProto.SERVICE_RESTARTING;
        STATE_PROTO_ENUMS[STATE_RECEIVER] = ProcessStatsStateProto.RECEIVER;
        STATE_PROTO_ENUMS[STATE_HEAVY_WEIGHT] = ProcessStatsStateProto.HEAVY_WEIGHT;
        STATE_PROTO_ENUMS[STATE_HOME] = ProcessStatsStateProto.HOME;
        STATE_PROTO_ENUMS[STATE_LAST_ACTIVITY] = ProcessStatsStateProto.LAST_ACTIVITY;
        STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY] = ProcessStatsStateProto.CACHED_ACTIVITY;
        STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY_CLIENT] = ProcessStatsStateProto.CACHED_ACTIVITY_CLIENT;
        STATE_PROTO_ENUMS[STATE_CACHED_EMPTY] = ProcessStatsStateProto.CACHED_EMPTY;
        STATE_PROTO_ENUMS[STATE_PERSISTENT] = ProcessStatsEnums.PROCESS_STATE_PERSISTENT;
        STATE_PROTO_ENUMS[STATE_TOP] = ProcessStatsEnums.PROCESS_STATE_TOP;
        STATE_PROTO_ENUMS[STATE_IMPORTANT_FOREGROUND] =
                ProcessStatsEnums.PROCESS_STATE_IMPORTANT_FOREGROUND;
        STATE_PROTO_ENUMS[STATE_IMPORTANT_BACKGROUND] =
                ProcessStatsEnums.PROCESS_STATE_IMPORTANT_BACKGROUND;
        STATE_PROTO_ENUMS[STATE_BACKUP] = ProcessStatsEnums.PROCESS_STATE_BACKUP;
        STATE_PROTO_ENUMS[STATE_SERVICE] = ProcessStatsEnums.PROCESS_STATE_SERVICE;
        STATE_PROTO_ENUMS[STATE_SERVICE_RESTARTING] =
                ProcessStatsEnums.PROCESS_STATE_SERVICE_RESTARTING;
        STATE_PROTO_ENUMS[STATE_RECEIVER] = ProcessStatsEnums.PROCESS_STATE_RECEIVER;
        STATE_PROTO_ENUMS[STATE_HEAVY_WEIGHT] = ProcessStatsEnums.PROCESS_STATE_HEAVY_WEIGHT;
        STATE_PROTO_ENUMS[STATE_HOME] = ProcessStatsEnums.PROCESS_STATE_HOME;
        STATE_PROTO_ENUMS[STATE_LAST_ACTIVITY] = ProcessStatsEnums.PROCESS_STATE_LAST_ACTIVITY;
        STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY] = ProcessStatsEnums.PROCESS_STATE_CACHED_ACTIVITY;
        STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY_CLIENT] =
                ProcessStatsEnums.PROCESS_STATE_CACHED_ACTIVITY_CLIENT;
        STATE_PROTO_ENUMS[STATE_CACHED_EMPTY] = ProcessStatsEnums.PROCESS_STATE_CACHED_EMPTY;
    }

    public static final String[] ADJ_SCREEN_NAMES_CSV = new String[] {
@@ -138,8 +143,8 @@ public final class DumpUtils {
    };

    static final int[] ADJ_SCREEN_PROTO_ENUMS = new int[] {
            ProcessStatsStateProto.OFF,
            ProcessStatsStateProto.ON
            ProcessStatsEnums.SCREEN_STATE_OFF,
            ProcessStatsEnums.SCREEN_STATE_ON
    };

    static final String[] ADJ_MEM_TAGS = new String[] {
@@ -147,10 +152,10 @@ public final class DumpUtils {
    };

    static final int[] ADJ_MEM_PROTO_ENUMS = new int[] {
            ProcessStatsStateProto.NORMAL,
            ProcessStatsStateProto.MODERATE,
            ProcessStatsStateProto.LOW,
            ProcessStatsStateProto.CRITICAL
            ProcessStatsEnums.MEMORY_STATE_NORMAL,
            ProcessStatsEnums.MEMORY_STATE_MODERATE,
            ProcessStatsEnums.MEMORY_STATE_LOW,
            ProcessStatsEnums.MEMORY_STATE_CRITICAL
    };

    static final String CSV_SEP = "\t";
@@ -278,7 +283,6 @@ public final class DumpUtils {
                DumpUtils.STATE_PROTO_ENUMS, procState, 1);
        proto.write(ProcessStatsStateProto.DURATION_MS, duration);
        proto.end(stateToken);

    }

    public static void printProcStateTagAndValue(PrintWriter pw, int state, long value) {
+21 −19
Original line number Diff line number Diff line
@@ -31,36 +31,38 @@ import android.util.TimeUtils;
import android.util.proto.ProtoOutputStream;
import android.util.proto.ProtoUtils;

import com.android.internal.app.procstats.ProcessStats.PackageState;
import com.android.internal.app.procstats.ProcessStats.ProcessStateHolder;
import com.android.internal.app.procstats.ProcessStats.TotalMemoryUseCollection;
import static com.android.internal.app.procstats.ProcessStats.PSS_SAMPLE_COUNT;
import static com.android.internal.app.procstats.ProcessStats.PSS_MINIMUM;

import static com.android.internal.app.procstats.ProcessStats.PSS_AVERAGE;
import static com.android.internal.app.procstats.ProcessStats.PSS_COUNT;
import static com.android.internal.app.procstats.ProcessStats.PSS_MAXIMUM;
import static com.android.internal.app.procstats.ProcessStats.PSS_RSS_MINIMUM;
import static com.android.internal.app.procstats.ProcessStats.PSS_MINIMUM;
import static com.android.internal.app.procstats.ProcessStats.PSS_RSS_AVERAGE;
import static com.android.internal.app.procstats.ProcessStats.PSS_RSS_MAXIMUM;
import static com.android.internal.app.procstats.ProcessStats.PSS_USS_MINIMUM;
import static com.android.internal.app.procstats.ProcessStats.PSS_RSS_MINIMUM;
import static com.android.internal.app.procstats.ProcessStats.PSS_SAMPLE_COUNT;
import static com.android.internal.app.procstats.ProcessStats.PSS_USS_AVERAGE;
import static com.android.internal.app.procstats.ProcessStats.PSS_USS_MAXIMUM;
import static com.android.internal.app.procstats.ProcessStats.PSS_COUNT;
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_TOP;
import static com.android.internal.app.procstats.ProcessStats.STATE_IMPORTANT_FOREGROUND;
import static com.android.internal.app.procstats.ProcessStats.STATE_IMPORTANT_BACKGROUND;
import static com.android.internal.app.procstats.ProcessStats.PSS_USS_MINIMUM;
import static com.android.internal.app.procstats.ProcessStats.STATE_BACKUP;
import static com.android.internal.app.procstats.ProcessStats.STATE_HEAVY_WEIGHT;
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_RECEIVER;
import static com.android.internal.app.procstats.ProcessStats.STATE_HOME;
import static com.android.internal.app.procstats.ProcessStats.STATE_LAST_ACTIVITY;
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 com.android.internal.app.procstats.ProcessStats.PackageState;
import com.android.internal.app.procstats.ProcessStats.ProcessStateHolder;
import com.android.internal.app.procstats.ProcessStats.TotalMemoryUseCollection;

import java.io.PrintWriter;
import java.util.Comparator;
+4 −2
Original line number Diff line number Diff line
@@ -2126,12 +2126,14 @@ public final class ProcessStats implements Parcelable {

            for (int is = 0; is < mServices.size(); is++) {
                final ServiceState serviceState = mServices.valueAt(is);
                serviceState.writeToProto(proto, ProcessStatsPackageProto.PROCESS_STATS, now);
                serviceState.writeToProto(proto, ProcessStatsPackageProto.SERVICE_STATS,
                        now);
            }

            for (int ia=0; ia<mAssociations.size(); ia++) {
                final AssociationState ascState = mAssociations.valueAt(ia);
                ascState.writeToProto(proto, ProcessStatsPackageProto.ASSOCIATION_STATS, now);
                ascState.writeToProto(proto, ProcessStatsPackageProto.ASSOCIATION_STATS,
                        now);
            }

            proto.end(token);
+36 −22
Original line number Diff line number Diff line
@@ -19,16 +19,13 @@ package com.android.internal.app.procstats;

import android.os.Parcel;
import android.os.SystemClock;
import android.service.procstats.ProcessStatsProto;
import android.service.procstats.ProcessStatsServiceStateProto;
import android.service.procstats.ProcessStatsStateProto;
import android.service.procstats.PackageServiceOperationStatsProto;
import android.service.procstats.PackageServiceStatsProto;
import android.service.procstats.ProcessStatsEnums;
import android.util.Slog;
import android.util.SparseLongArray;
import android.util.TimeUtils;
import android.util.proto.ProtoOutputStream;
import android.util.proto.ProtoUtils;

import static com.android.internal.app.procstats.ProcessStats.PSS_SAMPLE_COUNT;
import static com.android.internal.app.procstats.ProcessStats.STATE_NOTHING;

import java.io.PrintWriter;
@@ -559,29 +556,45 @@ public final class ServiceState {

    public void writeToProto(ProtoOutputStream proto, long fieldId, long now) {
        final long token = proto.start(fieldId);
        proto.write(ProcessStatsServiceStateProto.SERVICE_NAME, mName);
        writeTypeToProto(proto, ProcessStatsServiceStateProto.RUNNING_OP,
        proto.write(PackageServiceStatsProto.SERVICE_NAME, mName);

        writeTypeToProto(proto, PackageServiceStatsProto.OPERATION_STATS,
                ProcessStatsEnums.SERVICE_OPERATION_STATE_RUNNING,
                ServiceState.SERVICE_RUN, mRunCount, mRunState, mRunStartTime, now);
        writeTypeToProto(proto, ProcessStatsServiceStateProto.STARTED_OP,

        writeTypeToProto(proto, PackageServiceStatsProto.OPERATION_STATS,
                ProcessStatsEnums.SERVICE_OPERATION_STATE_STARTED,
                ServiceState.SERVICE_STARTED, mStartedCount, mStartedState, mStartedStartTime, now);
        writeTypeToProto(proto, ProcessStatsServiceStateProto.FOREGROUND_OP,

        writeTypeToProto(proto, PackageServiceStatsProto.OPERATION_STATS,
                ProcessStatsEnums.SERVICE_OPERATION_STATE_FOREGROUND,
                ServiceState.SERVICE_FOREGROUND, mForegroundCount, mForegroundState,
                mForegroundStartTime, now);
        writeTypeToProto(proto, ProcessStatsServiceStateProto.BOUND_OP,

        writeTypeToProto(proto, PackageServiceStatsProto.OPERATION_STATS,
                ProcessStatsEnums.SERVICE_OPERATION_STATE_BOUND,
                ServiceState.SERVICE_BOUND, mBoundCount, mBoundState, mBoundStartTime, now);
        writeTypeToProto(proto, ProcessStatsServiceStateProto.EXECUTING_OP,

        writeTypeToProto(proto, PackageServiceStatsProto.OPERATION_STATS,
                ProcessStatsEnums.SERVICE_OPERATION_STATE_EXECUTING,
                ServiceState.SERVICE_EXEC, mExecCount, mExecState, mExecStartTime, now);

        proto.end(token);
    }

    public void writeTypeToProto(ProtoOutputStream proto, long fieldId, int serviceType,
    /**
     * write the metrics to proto for each operation type.
     */
    public void writeTypeToProto(ProtoOutputStream proto, long fieldId, int opType, int serviceType,
            int opCount, int curState, long curStartTime, long now) {
        if (opCount <= 0) {
            return;
        }
        final long token = proto.start(fieldId);

        proto.write(ProcessStatsServiceStateProto.OperationInfo.COUNT, opCount);
        proto.write(PackageServiceOperationStatsProto.OPERATION, opType);
        proto.write(PackageServiceOperationStatsProto.COUNT, opCount);

        boolean didCurState = false;
        final int N = mDurations.getKeyCount();
        for (int i=0; i<N; i++) {
@@ -597,21 +610,22 @@ public final class ServiceState {
                didCurState = true;
                time += now - curStartTime;
            }
            final long stateToken = proto.start(ProcessStatsServiceStateProto.OperationInfo.STATES);
            final long stateToken = proto.start(PackageServiceOperationStatsProto.STATE_STATS);
            DumpUtils.printProcStateAdjTagProto(proto,
                    ProcessStatsStateProto.SCREEN_STATE,
                    ProcessStatsStateProto.MEMORY_STATE,
                    PackageServiceOperationStatsProto.StateStats.SCREEN_STATE,
                    PackageServiceOperationStatsProto.StateStats.MEMORY_STATE,
                    type);
            proto.write(ProcessStatsStateProto.DURATION_MS, time);
            proto.write(PackageServiceOperationStatsProto.StateStats.DURATION_MS, time);
            proto.end(stateToken);
        }
        if (!didCurState && curState != STATE_NOTHING) {
            final long stateToken = proto.start(ProcessStatsServiceStateProto.OperationInfo.STATES);
            final long stateToken = proto.start(PackageServiceOperationStatsProto.STATE_STATS);
            DumpUtils.printProcStateAdjTagProto(proto,
                    ProcessStatsStateProto.SCREEN_STATE,
                    ProcessStatsStateProto.MEMORY_STATE,
                    PackageServiceOperationStatsProto.StateStats.SCREEN_STATE,
                    PackageServiceOperationStatsProto.StateStats.MEMORY_STATE,
                    curState);
            proto.write(ProcessStatsStateProto.DURATION_MS, now - curStartTime);
            proto.write(PackageServiceOperationStatsProto.StateStats.DURATION_MS,
                    now - curStartTime);
            proto.end(stateToken);
        }

Loading