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

Commit 62dea294 authored by Jing Ji's avatar Jing Ji
Browse files

Throttle the dropbox logs per event-type

We'd still need to log other type of events if a specfic type of
event occurred too frequently and got throttled

Bug: 156871564
Test: Manual
Change-Id: I94ce76834f8d8e90f7d4e20091786382dfcbc05b
parent 7f357072
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -10153,8 +10153,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        }
    }
    private volatile long mWtfClusterStart;
    private volatile int mWtfClusterCount;
    private volatile ArrayMap<String, long[]> mErrorClusterRecords = new ArrayMap<>();
    /**
     * Write a description of an error (crash, WTF, ANR) to the drop box.
@@ -10185,13 +10184,18 @@ public class ActivityManagerService extends IActivityManager.Stub
        if (dbox == null || !dbox.isTagEnabled(dropboxTag)) return;
        // Rate-limit how often we're willing to do the heavy lifting below to
        // collect and record logs; currently 5 logs per 10 second period.
        // collect and record logs; currently 5 logs per 10 second period per eventType.
        final long now = SystemClock.elapsedRealtime();
        if (now - mWtfClusterStart > 10 * DateUtils.SECOND_IN_MILLIS) {
            mWtfClusterStart = now;
            mWtfClusterCount = 1;
        long[] errRecord = mErrorClusterRecords.get(eventType);
        if (errRecord == null) {
            errRecord = new long[2]; // [0]: startTime, [1]: count
            mErrorClusterRecords.put(eventType, errRecord);
        }
        if (now - errRecord[0] > 10 * DateUtils.SECOND_IN_MILLIS) {
            errRecord[0] = now;
            errRecord[1] = 1L;
        } else {
            if (mWtfClusterCount++ >= 5) return;
            if (errRecord[1]++ >= 5) return;
        }
        final StringBuilder sb = new StringBuilder(1024);