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

Commit 4d44d130 authored by Edgar Arriaga's avatar Edgar Arriaga
Browse files

Add app compaction westworld stat logging

Bug: 233415647
Test: am compact full <process> <uid>

Change-Id: I7109afb7024a8c7de23d226938b4e37abba542c8
parent 129bc371
Loading
Loading
Loading
Loading
+15 −16
Original line number Original line Diff line number Diff line
@@ -1478,9 +1478,12 @@ public final class CachedAppOptimizer {


    @VisibleForTesting
    @VisibleForTesting
    static final class SingleCompactionStats {
    static final class SingleCompactionStats {
        private static final float STATSD_SAMPLE_RATE = 0.1f;
        private static final Random mRandom = new Random();
        private final long[] mRssAfterCompaction;
        private final long[] mRssAfterCompaction;
        public CompactSource mSourceType;
        public CompactSource mSourceType;
        public String mProcessName;
        public String mProcessName;
        public final int mUid;
        public long mDeltaAnonRssKBs;
        public long mDeltaAnonRssKBs;
        public long mZramConsumedKBs;
        public long mZramConsumedKBs;
        public long mAnonMemFreedKBs;
        public long mAnonMemFreedKBs;
@@ -1493,10 +1496,11 @@ public final class CachedAppOptimizer {
        SingleCompactionStats(long[] rss, CompactSource source, String processName,
        SingleCompactionStats(long[] rss, CompactSource source, String processName,
                long deltaAnonRss, long zramConsumed, long anonMemFreed, long origAnonRss,
                long deltaAnonRss, long zramConsumed, long anonMemFreed, long origAnonRss,
                long cpuTimeMillis, int procState, int oomAdj,
                long cpuTimeMillis, int procState, int oomAdj,
                @OomAdjuster.OomAdjReason int oomAdjReason) {
                @OomAdjuster.OomAdjReason int oomAdjReason, int uid) {
            mRssAfterCompaction = rss;
            mRssAfterCompaction = rss;
            mSourceType = source;
            mSourceType = source;
            mProcessName = processName;
            mProcessName = processName;
            mUid = uid;
            mDeltaAnonRssKBs = deltaAnonRss;
            mDeltaAnonRssKBs = deltaAnonRss;
            mZramConsumedKBs = zramConsumed;
            mZramConsumedKBs = zramConsumed;
            mAnonMemFreedKBs = anonMemFreed;
            mAnonMemFreedKBs = anonMemFreed;
@@ -1524,6 +1528,14 @@ public final class CachedAppOptimizer {
                    + "," + getCompactCost() + "," + mProcState + "," + mOomAdj + ","
                    + "," + getCompactCost() + "," + mProcState + "," + mOomAdj + ","
                    + OomAdjuster.oomAdjReasonToString(mOomAdjReason) + ")");
                    + 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 {
    private final class MemCompactionHandler extends Handler {
@@ -1811,10 +1823,11 @@ public final class CachedAppOptimizer {
                                SingleCompactionStats memStats = new SingleCompactionStats(rssAfter,
                                SingleCompactionStats memStats = new SingleCompactionStats(rssAfter,
                                        compactSource, name, anonRssSavings, zramConsumed, memFreed,
                                        compactSource, name, anonRssSavings, zramConsumed, memFreed,
                                        origAnonRss, totalCpuTimeMillis, procState, newOomAdj,
                                        origAnonRss, totalCpuTimeMillis, procState, newOomAdj,
                                        oomAdjReason);
                                        oomAdjReason, proc.uid);
                                mLastCompactionStats.remove(pid);
                                mLastCompactionStats.remove(pid);
                                mLastCompactionStats.put(pid, memStats);
                                mLastCompactionStats.put(pid, memStats);
                                mCompactionStatsHistory.add(memStats);
                                mCompactionStatsHistory.add(memStats);
                                memStats.sendStat();
                                break;
                                break;
                            default:
                            default:
                                // We likely missed adding this category, it needs to be added
                                // We likely missed adding this category, it needs to be added
@@ -1830,20 +1843,6 @@ public final class CachedAppOptimizer {
                                deltaAnonRss, deltaSwapRss, time, lastCompactProfile.name(),
                                deltaAnonRss, deltaSwapRss, time, lastCompactProfile.name(),
                                lastCompactTime, newOomAdj, procState, zramUsedKbBefore,
                                lastCompactTime, newOomAdj, procState, zramUsedKbBefore,
                                zramUsedKbBefore - zramUsedKbAfter);
                                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) {
                        synchronized (mProcLock) {
                            opt.setLastCompactTime(end);
                            opt.setLastCompactTime(end);
                            opt.setLastCompactProfile(requestedProfile);
                            opt.setLastCompactProfile(requestedProfile);