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

Commit 7afcba06 authored by Lyn's avatar Lyn
Browse files

Move logDroppedHuns to background

Fixes: 350792993
Test: treehugger
Flag: com.android.systemui.notification_avalanche_throttle_hun
Change-Id: I492c227ec31deb1028f77a3521d83451f7a1d597
parent a8fdd28e
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.policy

import android.app.Notification
import android.os.Handler
import android.platform.test.annotations.EnableFlags
import android.testing.TestableLooper.RunWithLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -59,6 +60,9 @@ class AvalancheControllerTest : SysuiTestCase() {
    // For creating TestableHeadsUpManager
    @Mock private val mAccessibilityMgr: AccessibilityManagerWrapper? = null
    private val mUiEventLoggerFake = UiEventLoggerFake()

    @Mock private lateinit var mBgHandler: Handler

    private val mLogger = Mockito.spy(HeadsUpManagerLogger(logcatLogBuffer()))
    private val mGlobalSettings = FakeGlobalSettings()
    private val mSystemClock = FakeSystemClock()
@@ -78,7 +82,7 @@ class AvalancheControllerTest : SysuiTestCase() {

        // Initialize AvalancheController and TestableHeadsUpManager during setUp instead of
        // declaration, where mocks are null
        mAvalancheController = AvalancheController(dumpManager, mUiEventLoggerFake)
        mAvalancheController = AvalancheController(dumpManager, mUiEventLoggerFake, mBgHandler)

        testableHeadsUpManager =
            TestableHeadsUpManager(
+3 −2
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import static org.mockito.Mockito.when;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Person;
import android.os.Handler;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.FlagsParameterization;
@@ -81,7 +82,7 @@ public class BaseHeadsUpManagerTest extends SysuiTestCase {

    private UiEventLoggerFake mUiEventLoggerFake = new UiEventLoggerFake();
    private final HeadsUpManagerLogger mLogger = spy(new HeadsUpManagerLogger(logcatLogBuffer()));

    @Mock private Handler mBgHandler;
    @Mock private DumpManager dumpManager;
    private AvalancheController mAvalancheController;

@@ -148,7 +149,7 @@ public class BaseHeadsUpManagerTest extends SysuiTestCase {
    @Override
    public void SysuiSetup() throws Exception {
        super.SysuiSetup();
        mAvalancheController = new AvalancheController(dumpManager, mUiEventLoggerFake);
        mAvalancheController = new AvalancheController(dumpManager, mUiEventLoggerFake, mBgHandler);
    }

    @Test
+4 −7
Original line number Diff line number Diff line
@@ -104,8 +104,7 @@ public class HeadsUpManagerPhoneTest extends BaseHeadsUpManagerTest {
                UiEventLogger uiEventLogger,
                JavaAdapter javaAdapter,
                ShadeInteractor shadeInteractor,
                AvalancheController avalancheController,
                Handler bgHandler
                AvalancheController avalancheController
        ) {
            super(
                    context,
@@ -123,8 +122,7 @@ public class HeadsUpManagerPhoneTest extends BaseHeadsUpManagerTest {
                    uiEventLogger,
                    javaAdapter,
                    shadeInteractor,
                    avalancheController,
                    bgHandler
                    avalancheController
            );
            mMinimumDisplayTime = TEST_MINIMUM_DISPLAY_TIME;
            mAutoDismissTime = TEST_AUTO_DISMISS_TIME;
@@ -147,8 +145,7 @@ public class HeadsUpManagerPhoneTest extends BaseHeadsUpManagerTest {
                mUiEventLogger,
                mJavaAdapter,
                mShadeInteractor,
                mAvalancheController,
                mBgHandler
                mAvalancheController
        );
    }

@@ -173,7 +170,7 @@ public class HeadsUpManagerPhoneTest extends BaseHeadsUpManagerTest {
        mContext.getOrCreateTestableResources().addOverride(
                R.integer.ambient_notification_extension_time, 500);

        mAvalancheController = new AvalancheController(dumpManager, mUiEventLogger);
        mAvalancheController = new AvalancheController(dumpManager, mUiEventLogger, mBgHandler);
    }

    @Test
+3 −9
Original line number Diff line number Diff line
@@ -107,7 +107,6 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements
    private int mStatusBarState;
    private AnimationStateHandler mAnimationStateHandler;

    private Handler mBgHandler;
    private int mHeadsUpInset;

    // Used for determining the region for touch interaction
@@ -152,8 +151,7 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements
            UiEventLogger uiEventLogger,
            JavaAdapter javaAdapter,
            ShadeInteractor shadeInteractor,
            AvalancheController avalancheController,
            @Background Handler bgHandler) {
            AvalancheController avalancheController) {
        super(context, logger, handler, globalSettings, systemClock, executor,
                accessibilityManagerWrapper, uiEventLogger, avalancheController);
        Resources resources = mContext.getResources();
@@ -163,7 +161,6 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements
        mGroupMembershipManager = groupMembershipManager;
        mVisualStabilityProvider = visualStabilityProvider;
        mAvalancheController = avalancheController;
        mBgHandler = bgHandler;
        updateResources();
        configurationController.addCallback(new ConfigurationController.ConfigurationListener() {
            @Override
@@ -405,11 +402,8 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements
            // Waiting HUNs in AvalancheController are still promoted to the HUN section and thus
            // seen in open shade; clear them so we don't show them again when the shade closes and
            // reordering is allowed again.
            int waitingKeysSize = mAvalancheController.getWaitingKeys().size();
            mBgHandler.post(() -> {
                // Do this in the background to avoid missing frames when closing the shade
                mAvalancheController.logDroppedHuns(waitingKeysSize);
            });
            final int numDropped = mAvalancheController.getWaitingKeys().size();
            mAvalancheController.logDroppedHunsInBackground(numDropped);
            mAvalancheController.clearNext();

            // In open shade the first HUN is pinned, and visual stability logic prevents us from
+14 −6
Original line number Diff line number Diff line
@@ -15,12 +15,14 @@
 */
package com.android.systemui.statusbar.policy

import android.os.Handler
import android.util.Log
import androidx.annotation.VisibleForTesting
import com.android.internal.logging.UiEvent
import com.android.internal.logging.UiEventLogger
import com.android.systemui.Dumpable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.notification.shared.NotificationThrottleHun
import com.android.systemui.statusbar.policy.BaseHeadsUpManager.HeadsUpEntry
@@ -35,7 +37,10 @@ import javax.inject.Inject
@SysUISingleton
class AvalancheController
@Inject
constructor(dumpManager: DumpManager, private val uiEventLogger: UiEventLogger) : Dumpable {
constructor(dumpManager: DumpManager,
            private val uiEventLogger: UiEventLogger,
            @Background private val bgHandler: Handler
) : Dumpable {

    private val tag = "AvalancheController"
    private val debug = Compile.IS_DEBUG && Log.isLoggable(tag, Log.DEBUG)
@@ -315,7 +320,7 @@ constructor(dumpManager: DumpManager, private val uiEventLogger: UiEventLogger)

        // Remove runnable labels for dropped huns
        val listToDrop = nextList.subList(1, nextList.size)
        logDroppedHuns(listToDrop.size)
        logDroppedHunsInBackground(listToDrop.size)

        if (debug) {
            // Clear runnable labels
@@ -332,10 +337,13 @@ constructor(dumpManager: DumpManager, private val uiEventLogger: UiEventLogger)
        showNow(headsUpEntryShowing!!, headsUpEntryShowingRunnableList)
    }

    fun logDroppedHuns(numDropped: Int) {
    fun logDroppedHunsInBackground(numDropped: Int) {
        bgHandler.post(Runnable {
            // Do this in the background to avoid missing frames when closing the shade
            for (n in 1..numDropped) {
                uiEventLogger.log(ThrottleEvent.AVALANCHE_THROTTLING_HUN_DROPPED)
            }
        })
    }

    fun clearNext() {