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

Commit 0e3d092e authored by Lyn Han's avatar Lyn Han Committed by Android (Google) Code Review
Browse files

Merge "Move update/delete debug logs to logbuffers" into main

parents 3e7d8f33 f33b3c76
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ class AvalancheControllerTest : SysuiTestCase() {
    // For creating TestableHeadsUpManager
    @Mock private val mAccessibilityMgr: AccessibilityManagerWrapper? = null
    private val mUiEventLoggerFake = UiEventLoggerFake()
    @Mock private lateinit var mHeadsUpManagerLogger: HeadsUpManagerLogger

    @Mock private lateinit var mBgHandler: Handler

@@ -82,7 +83,8 @@ class AvalancheControllerTest : SysuiTestCase() {

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

        testableHeadsUpManager =
            TestableHeadsUpManager(
+3 −1
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ public class BaseHeadsUpManagerTest extends SysuiTestCase {
    static final int TEST_A11Y_AUTO_DISMISS_TIME = 1_000;

    private UiEventLoggerFake mUiEventLoggerFake = new UiEventLoggerFake();

    private final HeadsUpManagerLogger mLogger = spy(new HeadsUpManagerLogger(logcatLogBuffer()));
    @Mock private Handler mBgHandler;
    @Mock private DumpManager dumpManager;
@@ -149,7 +150,8 @@ public class BaseHeadsUpManagerTest extends SysuiTestCase {
    @Override
    public void SysuiSetup() throws Exception {
        super.SysuiSetup();
        mAvalancheController = new AvalancheController(dumpManager, mUiEventLoggerFake, mBgHandler);
        mAvalancheController = new AvalancheController(dumpManager, mUiEventLoggerFake, mLogger,
                mBgHandler);
    }

    @Test
+2 −1
Original line number Diff line number Diff line
@@ -179,7 +179,8 @@ class HeadsUpManagerPhoneTest(flags: FlagsParameterization) : BaseHeadsUpManager
        mContext
            .getOrCreateTestableResources()
            .addOverride(R.integer.ambient_notification_extension_time, 500)
        mAvalancheController = AvalancheController(dumpManager, mUiEventLogger, mBgHandler)
        mAvalancheController = AvalancheController(dumpManager, mUiEventLogger,
                mHeadsUpManagerLogger, mBgHandler)
    }

    @Test
+42 −42
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ class AvalancheController
constructor(
        dumpManager: DumpManager,
        private val uiEventLogger: UiEventLogger,
        private val headsUpManagerLogger: HeadsUpManagerLogger,
        @Background private val bgHandler: Handler
) : Dumpable {

@@ -109,32 +110,36 @@ constructor(
    }

    /** Run or delay Runnable for given HeadsUpEntry */
    fun update(entry: HeadsUpEntry?, runnable: Runnable?, label: String) {
    fun update(entry: HeadsUpEntry?, runnable: Runnable?, caller: String) {
        val isEnabled = isEnabled()
        val key = getKey(entry)

        if (runnable == null) {
            log { "Runnable is NULL, stop update." }
            headsUpManagerLogger.logAvalancheUpdate(caller, isEnabled, key, "Runnable NULL, stop")
            return
        }
        if (!isEnabled()) {
        if (!isEnabled) {
            headsUpManagerLogger.logAvalancheUpdate(caller, isEnabled, key,
                    "NOT ENABLED, run runnable")
            runnable.run()
            return
        }
        log { "\n " }
        val fn = "$label => AvalancheController.update ${getKey(entry)}"
        if (entry == null) {
            log { "Entry is NULL, stop update." }
            headsUpManagerLogger.logAvalancheUpdate(caller, isEnabled, key, "Entry NULL, stop")
            return
        }
        if (debug) {
            debugRunnableLabelMap[runnable] = label
            debugRunnableLabelMap[runnable] = caller
        }
        var outcome = ""
        if (isShowing(entry)) {
            log { "\n$fn => update showing" }
            outcome = "update showing"
            runnable.run()
        } else if (entry in nextMap) {
            log { "\n$fn => update next" }
            outcome = "update next"
            nextMap[entry]?.add(runnable)
        } else if (headsUpEntryShowing == null) {
            log { "\n$fn => showNow" }
            outcome = "show now"
            showNow(entry, arrayListOf(runnable))
        } else {
            // Clean up invalid state when entry is in list but not map and vice versa
@@ -156,7 +161,8 @@ constructor(
                )
            }
        }
        logState("after $fn")
        outcome += getStateStr()
        headsUpManagerLogger.logAvalancheUpdate(caller, isEnabled, key, outcome)
    }

    @VisibleForTesting
@@ -169,32 +175,37 @@ constructor(
     * Run or ignore Runnable for given HeadsUpEntry. If entry was never shown, ignore and delete
     * all Runnables associated with that entry.
     */
    fun delete(entry: HeadsUpEntry?, runnable: Runnable?, label: String) {
    fun delete(entry: HeadsUpEntry?, runnable: Runnable?, caller: String) {
        val isEnabled = isEnabled()
        val key = getKey(entry)

        if (runnable == null) {
            log { "Runnable is NULL, stop delete." }
            headsUpManagerLogger.logAvalancheDelete(caller, isEnabled, key, "Runnable NULL, stop")
            return
        }
        if (!isEnabled()) {
        if (!isEnabled) {
            headsUpManagerLogger.logAvalancheDelete(caller, isEnabled, key,
                    "NOT ENABLED, run runnable")
            runnable.run()
            return
        }
        log { "\n " }
        val fn = "$label => AvalancheController.delete " + getKey(entry)
        if (entry == null) {
            log { "$fn => entry NULL, running runnable" }
            headsUpManagerLogger.logAvalancheDelete(caller, isEnabled, key,
                    "Entry NULL, run runnable")
            runnable.run()
            return
        }
        var outcome = ""
        if (entry in nextMap) {
            log { "$fn => remove from next" }
            outcome = "remove from next"
            if (entry in nextMap) nextMap.remove(entry)
            if (entry in nextList) nextList.remove(entry)
            uiEventLogger.log(ThrottleEvent.AVALANCHE_THROTTLING_HUN_REMOVED)
        } else if (entry in debugDropSet) {
            log { "$fn => remove from dropset" }
            outcome = "remove from dropset"
            debugDropSet.remove(entry)
        } else if (isShowing(entry)) {
            log { "$fn => remove showing ${getKey(entry)}" }
            outcome = "remove showing"
            previousHunKey = getKey(headsUpEntryShowing)
            // Show the next HUN before removing this one, so that we don't tell listeners
            // onHeadsUpPinnedModeChanged, which causes
@@ -203,10 +214,10 @@ constructor(
            showNext()
            runnable.run()
        } else {
            log { "$fn => run runnable for untracked shown ${getKey(entry)}" }
            outcome = "run runnable for untracked shown"
            runnable.run()
        }
        logState("after $fn")
        headsUpManagerLogger.logAvalancheDelete(caller, isEnabled(), getKey(entry), outcome)
    }

    /**
@@ -384,23 +395,12 @@ constructor(
    }

    private fun getStateStr(): String {
        return "SHOWING: [${getKey(headsUpEntryShowing)}]" +
            "\nPREVIOUS: [$previousHunKey]" +
            "\nNEXT LIST: $nextListStr" +
            "\nNEXT MAP: $nextMapStr" +
            "\nDROPPED: $dropSetStr" +
            "\nENABLED: $enableAtRuntime"
    }

    private fun logState(reason: String) {
        log {
            "\n================================================================================="
        }
        log { "STATE $reason" }
        log { getStateStr() }
        log {
            "=================================================================================\n"
        }
        return "\navalanche state:" +
                "\n\tshowing: [${getKey(headsUpEntryShowing)}]" +
                "\n\tprevious: [$previousHunKey]" +
                "\n\tnext list: $nextListStr" +
                "\n\tnext map: $nextMapStr" +
                "\n\tdropped: $dropSetStr"
    }

    private val dropSetStr: String
+24 −0
Original line number Diff line number Diff line
@@ -66,6 +66,30 @@ class HeadsUpManagerLogger @Inject constructor(
        })
    }

    fun logAvalancheUpdate(caller: String, isEnabled: Boolean, notifEntryKey: String,
                           outcome: String) {
        buffer.log(TAG, INFO, {
            str1 = caller
            str2 = notifEntryKey
            str3 = outcome
            bool1 = isEnabled
        }, {
            "$str1\n\t=> AC[isEnabled:$bool1] update: $str2\n\t=> $str3"
        })
    }

    fun logAvalancheDelete(caller: String, isEnabled: Boolean, notifEntryKey: String,
                           outcome: String) {
        buffer.log(TAG, INFO, {
            str1 = caller
            str2 = notifEntryKey
            str3 = outcome
            bool1 = isEnabled
        }, {
            "$str1\n\t=> AC[isEnabled:$bool1] delete: $str2\n\t=> $str3"
        })
    }

    fun logShowNotification(entry: NotificationEntry) {
        buffer.log(TAG, INFO, {
            str1 = entry.logKey