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

Commit 35f49c59 authored by Chris Wren's avatar Chris Wren Committed by android-build-merger
Browse files

Merge "make the notification enqueue rate threshold a setting" into nyc-dev

am: 43c3a7e5

* commit '43c3a7e5':
  make the notification enqueue rate threshold a setting

Change-Id: I3e8c37aead7e1f2d5dc9fc89b72f82294bd16cfe
parents 140fe982 43c3a7e5
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -8981,6 +8981,14 @@ public final class Settings {
         * @hide
         */
        public static final String ENABLE_CELLULAR_ON_BOOT = "enable_cellular_on_boot";

        /**
         * The maximum allowed notification enqueue rate in Hertz.
         *
         * Should be a float, and includes both posts and updates.
         * @hide
         */
        public static final String MAX_NOTIFICATION_ENQUEUE_RATE = "max_notification_enqueue_rate";
    }

    /**
+16 −2
Original line number Diff line number Diff line
@@ -181,7 +181,7 @@ public class NotificationManagerService extends SystemService {
            = SystemProperties.getBoolean("debug.child_notifs", true);

    static final int MAX_PACKAGE_NOTIFICATIONS = 50;
    static final float MAX_PACKAGE_ENQUEUE_RATE = 50f;
    static final float DEFAULT_MAX_NOTIFICATION_ENQUEUE_RATE = 50f;

    // message codes
    static final int MESSAGE_TIMEOUT = 2;
@@ -305,6 +305,7 @@ public class NotificationManagerService extends SystemService {
    private static final int MY_PID = Process.myPid();
    private RankingHandler mRankingHandler;
    private long mLastOverRateLogTime;
    private float mMaxPackageEnqueueRate = DEFAULT_MAX_NOTIFICATION_ENQUEUE_RATE;

    private static class Archive {
        final int mBufferSize;
@@ -817,6 +818,8 @@ public class NotificationManagerService extends SystemService {
    private final class SettingsObserver extends ContentObserver {
        private final Uri NOTIFICATION_LIGHT_PULSE_URI
                = Settings.System.getUriFor(Settings.System.NOTIFICATION_LIGHT_PULSE);
        private final Uri NOTIFICATION_RATE_LIMIT_URI
                = Settings.Global.getUriFor(Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE);

        SettingsObserver(Handler handler) {
            super(handler);
@@ -826,6 +829,8 @@ public class NotificationManagerService extends SystemService {
            ContentResolver resolver = getContext().getContentResolver();
            resolver.registerContentObserver(NOTIFICATION_LIGHT_PULSE_URI,
                    false, this, UserHandle.USER_ALL);
            resolver.registerContentObserver(NOTIFICATION_RATE_LIMIT_URI,
                    false, this, UserHandle.USER_ALL);
            update(null);
        }

@@ -843,6 +848,10 @@ public class NotificationManagerService extends SystemService {
                    updateNotificationPulse();
                }
            }
            if (uri == null || NOTIFICATION_RATE_LIMIT_URI.equals(uri)) {
                mMaxPackageEnqueueRate = Settings.Global.getFloat(resolver,
                            Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE, mMaxPackageEnqueueRate);
            }
        }
    }

@@ -899,6 +908,10 @@ public class NotificationManagerService extends SystemService {
    public void onStart() {
        Resources resources = getContext().getResources();

        mMaxPackageEnqueueRate = Settings.Global.getFloat(getContext().getContentResolver(),
                Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE,
                DEFAULT_MAX_NOTIFICATION_ENQUEUE_RATE);

        mAm = ActivityManagerNative.getDefault();
        mAppOps = (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE);
        mVibrator = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE);
@@ -2369,6 +2382,7 @@ public class NotificationManagerService extends SystemService {
                    pw.println("  mDisableNotificationEffects=" + mDisableNotificationEffects);
                    pw.println("  mCallState=" + callStateToString(mCallState));
                    pw.println("  mSystemReady=" + mSystemReady);
                    pw.println("  mMaxPackageEnqueueRate=" + mMaxPackageEnqueueRate);
                }
                pw.println("  mArchive=" + mArchive.toString());
                Iterator<StatusBarNotification> iter = mArchive.descendingIterator();
@@ -2512,7 +2526,7 @@ public class NotificationManagerService extends SystemService {
        if (!isSystemNotification && !isNotificationFromListener) {
            synchronized (mNotificationList) {
                final float appEnqueueRate = mUsageStats.getAppEnqueueRate(pkg);
                if (appEnqueueRate > MAX_PACKAGE_ENQUEUE_RATE) {
                if (appEnqueueRate > mMaxPackageEnqueueRate) {
                    mUsageStats.registerOverRateQuota(pkg);
                    final long now = SystemClock.elapsedRealtime();
                    if ((now - mLastOverRateLogTime) > MIN_PACKAGE_OVERRATE_LOG_INTERVAL) {