pull procstats package process stats section
Test: cts
BUG: b/113075820
Change-Id: Iad37427227181ff41b3630a3c907c7bb7f3efa2b
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index 8ab67e3..9d83afd 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -181,6 +181,7 @@
NumFingerprints num_fingerprints = 10031;
DiskIo disk_io = 10032;
PowerProfile power_profile = 10033;
+ ProcStats proc_stats_pkg_proc = 10034;
}
// DO NOT USE field numbers above 100,000 in AOSP.
diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp
index cd215b4..dab64ca 100644
--- a/cmds/statsd/src/external/StatsPullerManager.cpp
+++ b/cmds/statsd/src/external/StatsPullerManager.cpp
@@ -211,6 +211,9 @@
// ProcStats.
{android::util::PROC_STATS,
{{}, {}, 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::PROC_STATS)}},
+ // ProcStatsPkgProc.
+ {android::util::PROC_STATS_PKG_PROC,
+ {{}, {}, 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::PROC_STATS_PKG_PROC)}},
// Disk I/O stats per uid.
{android::util::DISK_IO,
{{2,3,4,5,6,7,8,9,10,11},
diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java
index 97992cf..1abaaf2 100644
--- a/services/core/java/com/android/server/stats/StatsCompanionService.java
+++ b/services/core/java/com/android/server/stats/StatsCompanionService.java
@@ -1259,18 +1259,19 @@
Binder.restoreCallingIdentity(token);
}
- long mLastProcStatsHighWaterMark = readProcStatsHighWaterMark();
-
- private long readProcStatsHighWaterMark() {
+ // read high watermark for section
+ private long readProcStatsHighWaterMark(int section) {
try {
- File[] files = mBaseDir.listFiles();
+ File[] files = mBaseDir.listFiles((d, name) -> {
+ return name.toLowerCase().startsWith(String.valueOf(section) + '_');
+ });
if (files == null || files.length == 0) {
return 0;
}
if (files.length > 1) {
Log.e(TAG, "Only 1 file expected for high water mark. Found " + files.length);
}
- return Long.valueOf(files[0].getName());
+ return Long.valueOf(files[0].getName().split("_")[1]);
} catch (SecurityException e) {
Log.e(TAG, "Failed to get procstats high watermark file.", e);
} catch (NumberFormatException e) {
@@ -1282,13 +1283,13 @@
private IProcessStats mProcessStats =
IProcessStats.Stub.asInterface(ServiceManager.getService(ProcessStats.SERVICE_NAME));
- private void pullProcessStats(
- int tagId, long elapsedNanos, long wallClockNanos,
+ private void pullProcessStats(int section, int tagId, long elapsedNanos, long wallClockNanos,
List<StatsLogEventWrapper> pulledData) {
try {
+ long lastHighWaterMark = readProcStatsHighWaterMark(section);
List<ParcelFileDescriptor> statsFiles = new ArrayList<>();
long highWaterMark = mProcessStats.getCommittedStats(
- mLastProcStatsHighWaterMark, ProcessStats.REPORT_ALL, true, statsFiles);
+ lastHighWaterMark, section, true, statsFiles);
if (statsFiles.size() != 1) {
return;
}
@@ -1298,10 +1299,10 @@
StatsLogEventWrapper e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos);
e.writeStorage(Arrays.copyOf(stats, len[0]));
pulledData.add(e);
- new File(mBaseDir.getAbsolutePath() + "/" + mLastProcStatsHighWaterMark).delete();
- mLastProcStatsHighWaterMark = highWaterMark;
+ new File(mBaseDir.getAbsolutePath() + "/" + section + "_" + lastHighWaterMark).delete();
new File(
- mBaseDir.getAbsolutePath() + "/" + mLastProcStatsHighWaterMark).createNewFile();
+ mBaseDir.getAbsolutePath() + "/" + section + "_"
+ + highWaterMark).createNewFile();
} catch (IOException e) {
Log.e(TAG, "Getting procstats failed: ", e);
} catch (RemoteException e) {
@@ -1490,7 +1491,12 @@
break;
}
case StatsLog.PROC_STATS: {
- pullProcessStats(tagId, elapsedNanos, wallClockNanos, ret);
+ pullProcessStats(ProcessStats.REPORT_ALL, tagId, elapsedNanos, wallClockNanos, ret);
+ break;
+ }
+ case StatsLog.PROC_STATS_PKG_PROC: {
+ pullProcessStats(ProcessStats.REPORT_PKG_PROC_STATS, tagId, elapsedNanos,
+ wallClockNanos, ret);
break;
}
case StatsLog.DISK_IO: {