Clean up the procstats dump enums and change component to use message.
Bug: 72415114
Test: manually flashed and run: dumpsys procstats --proto
Change-Id: Iea47fa41c04c3c6e8335e040086a0b5d65c22aaf
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index acbdf14..4923171 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -9451,7 +9451,7 @@
proto.write(IntentProto.PACKAGE, mPackage);
}
if (comp && mComponent != null) {
- proto.write(IntentProto.COMPONENT, mComponent.flattenToShortString());
+ mComponent.writeToProto(proto, IntentProto.COMPONENT);
}
if (mSourceBounds != null) {
proto.write(IntentProto.SOURCE_BOUNDS, mSourceBounds.toShortString());
diff --git a/core/java/com/android/internal/app/procstats/DumpUtils.java b/core/java/com/android/internal/app/procstats/DumpUtils.java
index 0bc8c483..e38a844 100644
--- a/core/java/com/android/internal/app/procstats/DumpUtils.java
+++ b/core/java/com/android/internal/app/procstats/DumpUtils.java
@@ -21,6 +21,7 @@
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
+import android.service.procstats.ProcessStatsProto;
import android.text.format.DateFormat;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -46,12 +47,77 @@
* Utilities for dumping.
*/
public final class DumpUtils {
- public static final String[] STATE_NAMES = new String[] {
- "Persist", "Top ", "ImpFg ", "ImpBg ",
- "Backup ", "HeavyWt", "Service", "ServRst",
- "Receivr", "Home ",
- "LastAct", "CchAct ", "CchCAct", "CchEmty"
- };
+ public static final String[] STATE_NAMES;
+ public static final String[] STATE_NAMES_CSV;
+ static final String[] STATE_TAGS;
+ static final int[] STATE_PROTO_ENUMS;
+
+ // Make the mapping easy to update.
+ static {
+ STATE_NAMES = new String[STATE_COUNT];
+ STATE_NAMES[STATE_PERSISTENT] = "Persist";
+ STATE_NAMES[STATE_TOP] = "Top";
+ STATE_NAMES[STATE_IMPORTANT_FOREGROUND] = "ImpFg";
+ STATE_NAMES[STATE_IMPORTANT_BACKGROUND] = "ImpBg";
+ STATE_NAMES[STATE_BACKUP] = "Backup";
+ STATE_NAMES[STATE_SERVICE] = "Service";
+ STATE_NAMES[STATE_SERVICE_RESTARTING] = "ServRst";
+ STATE_NAMES[STATE_RECEIVER] = "Receivr";
+ STATE_NAMES[STATE_HEAVY_WEIGHT] = "HeavyWt";
+ STATE_NAMES[STATE_HOME] = "Home";
+ STATE_NAMES[STATE_LAST_ACTIVITY] = "LastAct";
+ STATE_NAMES[STATE_CACHED_ACTIVITY] = "CchAct";
+ STATE_NAMES[STATE_CACHED_ACTIVITY_CLIENT] = "CchCAct";
+ STATE_NAMES[STATE_CACHED_EMPTY] = "CchEmty";
+
+ STATE_NAMES_CSV = new String[STATE_COUNT];
+ STATE_NAMES_CSV[STATE_PERSISTENT] = "pers";
+ STATE_NAMES_CSV[STATE_TOP] = "top";
+ STATE_NAMES_CSV[STATE_IMPORTANT_FOREGROUND] = "impfg";
+ STATE_NAMES_CSV[STATE_IMPORTANT_BACKGROUND] = "impbg";
+ STATE_NAMES_CSV[STATE_BACKUP] = "backup";
+ STATE_NAMES_CSV[STATE_SERVICE] = "service";
+ STATE_NAMES_CSV[STATE_SERVICE_RESTARTING] = "service-rs";
+ STATE_NAMES_CSV[STATE_RECEIVER] = "receiver";
+ STATE_NAMES_CSV[STATE_HEAVY_WEIGHT] = "heavy";
+ STATE_NAMES_CSV[STATE_HOME] = "home";
+ STATE_NAMES_CSV[STATE_LAST_ACTIVITY] = "lastact";
+ STATE_NAMES_CSV[STATE_CACHED_ACTIVITY] = "cch-activity";
+ STATE_NAMES_CSV[STATE_CACHED_ACTIVITY_CLIENT] = "cch-aclient";
+ STATE_NAMES_CSV[STATE_CACHED_EMPTY] = "cch-empty";
+
+ STATE_TAGS = new String[STATE_COUNT];
+ STATE_TAGS[STATE_PERSISTENT] = "p";
+ STATE_TAGS[STATE_TOP] = "t";
+ STATE_TAGS[STATE_IMPORTANT_FOREGROUND] = "f";
+ STATE_TAGS[STATE_IMPORTANT_BACKGROUND] = "b";
+ STATE_TAGS[STATE_BACKUP] = "u";
+ STATE_TAGS[STATE_SERVICE] = "s";
+ STATE_TAGS[STATE_SERVICE_RESTARTING] = "x";
+ STATE_TAGS[STATE_RECEIVER] = "r";
+ STATE_TAGS[STATE_HEAVY_WEIGHT] = "w";
+ STATE_TAGS[STATE_HOME] = "h";
+ STATE_TAGS[STATE_LAST_ACTIVITY] = "l";
+ STATE_TAGS[STATE_CACHED_ACTIVITY] = "a";
+ STATE_TAGS[STATE_CACHED_ACTIVITY_CLIENT] = "c";
+ STATE_TAGS[STATE_CACHED_EMPTY] = "e";
+
+ STATE_PROTO_ENUMS = new int[STATE_COUNT];
+ STATE_PROTO_ENUMS[STATE_PERSISTENT] = ProcessStatsProto.State.PERSISTENT;
+ STATE_PROTO_ENUMS[STATE_TOP] = ProcessStatsProto.State.TOP;
+ STATE_PROTO_ENUMS[STATE_IMPORTANT_FOREGROUND] = ProcessStatsProto.State.IMPORTANT_FOREGROUND;
+ STATE_PROTO_ENUMS[STATE_IMPORTANT_BACKGROUND] = ProcessStatsProto.State.IMPORTANT_BACKGROUND;
+ STATE_PROTO_ENUMS[STATE_BACKUP] = ProcessStatsProto.State.BACKUP;
+ STATE_PROTO_ENUMS[STATE_SERVICE] = ProcessStatsProto.State.SERVICE;
+ STATE_PROTO_ENUMS[STATE_SERVICE_RESTARTING] = ProcessStatsProto.State.SERVICE_RESTARTING;
+ STATE_PROTO_ENUMS[STATE_RECEIVER] = ProcessStatsProto.State.RECEIVER;
+ STATE_PROTO_ENUMS[STATE_HEAVY_WEIGHT] = ProcessStatsProto.State.HEAVY_WEIGHT;
+ STATE_PROTO_ENUMS[STATE_HOME] = ProcessStatsProto.State.HOME;
+ STATE_PROTO_ENUMS[STATE_LAST_ACTIVITY] = ProcessStatsProto.State.LAST_ACTIVITY;
+ STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY] = ProcessStatsProto.State.CACHED_ACTIVITY;
+ STATE_PROTO_ENUMS[STATE_CACHED_ACTIVITY_CLIENT] = ProcessStatsProto.State.CACHED_ACTIVITY_CLIENT;
+ STATE_PROTO_ENUMS[STATE_CACHED_EMPTY] = ProcessStatsProto.State.CACHED_EMPTY;
+ }
public static final String[] ADJ_SCREEN_NAMES_CSV = new String[] {
"off", "on"
@@ -61,25 +127,26 @@
"norm", "mod", "low", "crit"
};
- public static final String[] STATE_NAMES_CSV = new String[] {
- "pers", "top", "impfg", "impbg", "backup", "heavy",
- "service", "service-rs", "receiver", "home", "lastact",
- "cch-activity", "cch-aclient", "cch-empty"
- };
-
// State enum is defined in frameworks/base/core/proto/android/service/procstats.proto
// Update states must sync enum definition as well, the ordering must not be changed.
static final String[] ADJ_SCREEN_TAGS = new String[] {
"0", "1"
};
+ static final int[] ADJ_SCREEN_PROTO_ENUMS = new int[] {
+ ProcessStatsProto.State.OFF,
+ ProcessStatsProto.State.ON
+ };
+
static final String[] ADJ_MEM_TAGS = new String[] {
"n", "m", "l", "c"
};
- static final String[] STATE_TAGS = new String[] {
- "p", "t", "f", "b", "u", "w",
- "s", "x", "r", "h", "l", "a", "c", "e"
+ static final int[] ADJ_MEM_PROTO_ENUMS = new int[] {
+ ProcessStatsProto.State.NORMAL,
+ ProcessStatsProto.State.MODERATE,
+ ProcessStatsProto.State.LOW,
+ ProcessStatsProto.State.CRITICAL
};
static final String CSV_SEP = "\t";
@@ -182,9 +249,10 @@
public static void printProcStateTagProto(ProtoOutputStream proto, long screenId, long memId,
long stateId, int state) {
- state = printProto(proto, screenId, ADJ_SCREEN_TAGS, state, ADJ_SCREEN_MOD * STATE_COUNT);
- state = printProto(proto, memId, ADJ_MEM_TAGS, state, STATE_COUNT);
- printProto(proto, stateId, STATE_TAGS, state, 1);
+ state = printProto(proto, screenId, ADJ_SCREEN_PROTO_ENUMS,
+ state, ADJ_SCREEN_MOD * STATE_COUNT);
+ state = printProto(proto, memId, ADJ_MEM_PROTO_ENUMS, state, STATE_COUNT);
+ printProto(proto, stateId, STATE_PROTO_ENUMS, state, 1);
}
public static void printAdjTag(PrintWriter pw, int state) {
@@ -294,30 +362,6 @@
}
}
- /*
- * Doesn't seem to be used.
- *
- public static void dumpProcessList(PrintWriter pw, String prefix, ArrayList<ProcessState> procs,
- int[] screenStates, int[] memStates, int[] procStates, long now) {
- String innerPrefix = prefix + " ";
- for (int i=procs.size()-1; i>=0; i--) {
- ProcessState proc = procs.get(i);
- pw.print(prefix);
- pw.print(proc.mName);
- pw.print(" / ");
- UserHandle.formatUid(pw, proc.mUid);
- pw.print(" (");
- pw.print(proc.durations.getKeyCount());
- pw.print(" entries)");
- pw.println(":");
- proc.dumpProcessState(pw, innerPrefix, screenStates, memStates, procStates, now);
- if (proc.pssTable.getKeyCount() > 0) {
- proc.dumpPss(pw, innerPrefix, screenStates, memStates, procStates);
- }
- }
- }
- */
-
public static void dumpProcessSummaryLocked(PrintWriter pw, String prefix,
ArrayList<ProcessState> procs, int[] screenStates, int[] memStates, int[] procStates,
long now, long totalTime) {
@@ -362,11 +406,11 @@
return value - index*mod;
}
- public static int printProto(ProtoOutputStream proto, long fieldId, String[] array, int value, int mod) {
+ public static int printProto(ProtoOutputStream proto, long fieldId,
+ int[] enums, int value, int mod) {
int index = value/mod;
- if (index >= 0 && index < array.length) {
- // Valid state enum number starts at 1, 0 stands for unknown.
- proto.write(fieldId, index + 1);
+ if (index >= 0 && index < enums.length) {
+ proto.write(fieldId, enums[index]);
} // else enum default is always zero in proto3
return value - index*mod;
}
diff --git a/core/java/com/android/internal/app/procstats/ProcessState.java b/core/java/com/android/internal/app/procstats/ProcessState.java
index a0be64b..e0effb1 100644
--- a/core/java/com/android/internal/app/procstats/ProcessState.java
+++ b/core/java/com/android/internal/app/procstats/ProcessState.java
@@ -1191,7 +1191,9 @@
return sb.toString();
}
- public void toProto(ProtoOutputStream proto, String procName, int uid, long now) {
+ public void writeToProto(ProtoOutputStream proto, long fieldId,
+ String procName, int uid, long now) {
+ final long token = proto.start(fieldId);
proto.write(ProcessStatsProto.PROCESS, procName);
proto.write(ProcessStatsProto.UID, uid);
if (mNumExcessiveCpu > 0 || mNumCachedKill > 0 ) {
@@ -1261,5 +1263,6 @@
proto.write(ProcessStatsProto.State.DURATION_MS, entry.getValue());
proto.end(stateToken);
}
+ proto.end(token);
}
}
diff --git a/core/java/com/android/internal/app/procstats/ProcessStats.java b/core/java/com/android/internal/app/procstats/ProcessStats.java
index 35b2dd2..591a587 100644
--- a/core/java/com/android/internal/app/procstats/ProcessStats.java
+++ b/core/java/com/android/internal/app/procstats/ProcessStats.java
@@ -1776,10 +1776,11 @@
}
}
- public void toProto(ProtoOutputStream proto, long now) {
+ public void writeToProto(ProtoOutputStream proto, long fieldId, long now) {
final ArrayMap<String, SparseArray<LongSparseArray<PackageState>>> pkgMap =
mPackages.getMap();
+ final long token = proto.start(fieldId);
proto.write(ProcessStatsSectionProto.START_REALTIME_MS, mTimePeriodStartRealtime);
proto.write(ProcessStatsSectionProto.END_REALTIME_MS,
mRunning ? SystemClock.elapsedRealtime() : mTimePeriodEndRealtime);
@@ -1811,11 +1812,10 @@
for (int iu=0; iu<uids.size(); iu++) {
final int uid = uids.keyAt(iu);
final ProcessState procState = uids.valueAt(iu);
- final long processStateToken = proto.start(ProcessStatsSectionProto.PROCESS_STATS);
- procState.toProto(proto, procName, uid, now);
- proto.end(processStateToken);
+ procState.writeToProto(proto, ProcessStatsSectionProto.PROCESS_STATS, procName, uid, now);
}
}
+ proto.end(token);
}
final public static class ProcessStateHolder {
diff --git a/core/proto/android/content/intent.proto b/core/proto/android/content/intent.proto
index 1737b62..5e0ed11 100644
--- a/core/proto/android/content/intent.proto
+++ b/core/proto/android/content/intent.proto
@@ -20,6 +20,7 @@
option java_package = "android.content";
option java_multiple_files = true;
+import "frameworks/base/core/proto/android/content/component_name.proto";
import "frameworks/base/core/proto/android/os/patternmatcher.proto";
import "frameworks/base/libs/incident/proto/android/privacy.proto";
@@ -55,7 +56,7 @@
optional string type = 4;
optional string flag = 5;
optional string package = 6;
- optional string component = 7;
+ optional ComponentNameProto component = 7;
optional string source_bounds = 8;
optional string clip_data = 9 [ (.android.privacy).dest = DEST_EXPLICIT ];
optional string extras = 10 [ (.android.privacy).dest = DEST_EXPLICIT ];