Add app compaction westworld stat logging
Bug: 233415647
Test: am compact full <process> <uid>
Change-Id: I7109afb7024a8c7de23d226938b4e37abba542c8
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index d6cffe9..45265ac 100644
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -1478,9 +1478,12 @@
@VisibleForTesting
static final class SingleCompactionStats {
+ private static final float STATSD_SAMPLE_RATE = 0.1f;
+ private static final Random mRandom = new Random();
private final long[] mRssAfterCompaction;
public CompactSource mSourceType;
public String mProcessName;
+ public final int mUid;
public long mDeltaAnonRssKBs;
public long mZramConsumedKBs;
public long mAnonMemFreedKBs;
@@ -1493,10 +1496,11 @@
SingleCompactionStats(long[] rss, CompactSource source, String processName,
long deltaAnonRss, long zramConsumed, long anonMemFreed, long origAnonRss,
long cpuTimeMillis, int procState, int oomAdj,
- @OomAdjuster.OomAdjReason int oomAdjReason) {
+ @OomAdjuster.OomAdjReason int oomAdjReason, int uid) {
mRssAfterCompaction = rss;
mSourceType = source;
mProcessName = processName;
+ mUid = uid;
mDeltaAnonRssKBs = deltaAnonRss;
mZramConsumedKBs = zramConsumed;
mAnonMemFreedKBs = anonMemFreed;
@@ -1524,6 +1528,14 @@
+ "," + getCompactCost() + "," + mProcState + "," + mOomAdj + ","
+ OomAdjuster.oomAdjReasonToString(mOomAdjReason) + ")");
}
+
+ void sendStat() {
+ if (mRandom.nextFloat() < STATSD_SAMPLE_RATE) {
+ FrameworkStatsLog.write(FrameworkStatsLog.APP_COMPACTED_V2, mUid, mProcState,
+ mOomAdj, mDeltaAnonRssKBs, mZramConsumedKBs, mCpuTimeMillis, mOrigAnonRss,
+ mOomAdjReason);
+ }
+ }
}
private final class MemCompactionHandler extends Handler {
@@ -1811,10 +1823,11 @@
SingleCompactionStats memStats = new SingleCompactionStats(rssAfter,
compactSource, name, anonRssSavings, zramConsumed, memFreed,
origAnonRss, totalCpuTimeMillis, procState, newOomAdj,
- oomAdjReason);
+ oomAdjReason, proc.uid);
mLastCompactionStats.remove(pid);
mLastCompactionStats.put(pid, memStats);
mCompactionStatsHistory.add(memStats);
+ memStats.sendStat();
break;
default:
// We likely missed adding this category, it needs to be added
@@ -1830,20 +1843,6 @@
deltaAnonRss, deltaSwapRss, time, lastCompactProfile.name(),
lastCompactTime, newOomAdj, procState, zramUsedKbBefore,
zramUsedKbBefore - zramUsedKbAfter);
- // Note that as above not taking mPhenoTypeFlagLock here to avoid locking
- // on every single compaction for a flag that will seldom change and the
- // impact of reading the wrong value here is low.
- if (mRandom.nextFloat() < mCompactStatsdSampleRate) {
- FrameworkStatsLog.write(FrameworkStatsLog.APP_COMPACTED, pid, name,
- requestedProfile.ordinal(), rssBefore[RSS_TOTAL_INDEX],
- rssBefore[RSS_FILE_INDEX], rssBefore[RSS_ANON_INDEX],
- rssBefore[RSS_SWAP_INDEX], rssAfter[RSS_TOTAL_INDEX],
- rssAfter[RSS_FILE_INDEX], rssAfter[RSS_ANON_INDEX],
- rssAfter[RSS_SWAP_INDEX], time, lastCompactProfile.ordinal(),
- lastCompactTime, newOomAdj,
- ActivityManager.processStateAmToProto(procState),
- zramUsedKbBefore, zramUsedKbAfter);
- }
synchronized (mProcLock) {
opt.setLastCompactTime(end);
opt.setLastCompactProfile(requestedProfile);