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

Commit 30f8bfcd authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

Extend health checks to monitor excessive pending broadcasts.

Bug: 378654721
Test: manual
Flag: EXEMPT bugfix
Change-Id: I638e4a93e17b272fbd52ddc87b4db3317dd71e84
parent aa763b87
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -298,6 +298,15 @@ public class BroadcastConstants {
    private static final long DEFAULT_PENDING_COLD_START_ABANDON_TIMEOUT_MILLIS =
            TimeUnit.MINUTES.toMillis(5);

    /**
     * For {@link BroadcastQueueImpl}: Threshold of pending broadcasts for triggering a trace
     * event indicating a potential issue.
     */
    public int EXCESSIVE_PENDING_BROADCASTS = DEFAULT_EXCESSIVE_PENDING_BROADCASTS;
    private static final String KEY_EXCESSIVE_PENDING_BROADCASTS =
            "excessive_pending_broadcasts";
    private static final int DEFAULT_EXCESSIVE_PENDING_BROADCASTS = 5000;

    // Settings override tracking for this instance
    private String mSettingsKey;
    private SettingsObserver mSettingsObserver;
@@ -450,6 +459,8 @@ public class BroadcastConstants {
                    KEY_PENDING_COLD_START_ABANDON_TIMEOUT_MILLIS,
                    DEFAULT_PENDING_COLD_START_ABANDON_TIMEOUT_MILLIS)
                            * Build.HW_TIMEOUT_MULTIPLIER;
            EXCESSIVE_PENDING_BROADCASTS = getDeviceConfigInt(KEY_EXCESSIVE_PENDING_BROADCASTS,
                    DEFAULT_EXCESSIVE_PENDING_BROADCASTS);
        }

        // TODO: migrate BroadcastRecord to accept a BroadcastConstants
@@ -509,6 +520,7 @@ public class BroadcastConstants {
                    MAX_FROZEN_OUTGOING_BROADCASTS).println();
            pw.print(KEY_PENDING_COLD_START_ABANDON_TIMEOUT_MILLIS,
                    PENDING_COLD_START_ABANDON_TIMEOUT_MILLIS).println();
            pw.print(KEY_EXCESSIVE_PENDING_BROADCASTS, EXCESSIVE_PENDING_BROADCASTS).println();
            pw.decreaseIndent();
            pw.println();
        }
+4 −0
Original line number Diff line number Diff line
@@ -151,6 +151,10 @@ public class BroadcastHistory {
        mSummaryHistoryNext = ringAdvance(mSummaryHistoryNext, 1, MAX_BROADCAST_SUMMARY_HISTORY);
    }

    public int getPendingBroadcastsCount() {
        return mPendingBroadcasts.size();
    }

    private int ringAdvance(int x, final int increment, final int ringSize) {
        x += increment;
        if (x < 0) return (ringSize - 1);
+3 −1
Original line number Diff line number Diff line
@@ -77,7 +77,6 @@ import android.text.format.DateUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.IndentingPrintWriter;
import android.util.MathUtils;
import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
@@ -1996,6 +1995,9 @@ class BroadcastQueueImpl extends BroadcastQueue {
                leaf = leaf.processNameNext;
            }
        }

        checkState(mHistory.getPendingBroadcastsCount() < mConstants.EXCESSIVE_PENDING_BROADCASTS,
                "excessive pending broadcasts");
    }

    @SuppressWarnings("CheckResult")