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

Commit 0e2515ba authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Use @NotifInflation thread for FooterView and EmptyShadeView

Switch FooterView and EmptyShadeView inflation to use the same thread as other notification inflation, to hopefully reduce resource cache race conditions.

Bug: 375320642
Flag: EXEMPT bugfix
Test: atest SystemUITests
Change-Id: I1852996e81b31fa61ef5c0e3becf2056bfca842b
parent 645fcbae
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -976,6 +976,16 @@ flag {
    }
}

flag {
    name: "use_notif_inflation_thread_for_footer"
    namespace: "systemui"
    description: "use the @NotifInflation thread for FooterView and EmptyShadeView inflation"
    bug: "375320642"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "notify_power_manager_user_activity_background"
    namespace: "systemui"
+4 −4
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import com.android.internal.logging.MetricsLogger
import com.android.internal.logging.nano.MetricsProto
import com.android.systemui.common.ui.ConfigurationState
import com.android.systemui.common.ui.view.setImportantForAccessibilityYesNo
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.NotifInflation
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.lifecycle.repeatWhenAttachedToWindow
import com.android.systemui.plugins.FalsingManager
@@ -76,7 +76,7 @@ import kotlinx.coroutines.flow.stateIn
class NotificationListViewBinder
@Inject
constructor(
    @Background private val backgroundDispatcher: CoroutineDispatcher,
    @NotifInflation private val inflationDispatcher: CoroutineDispatcher,
    private val hiderTracker: DisplaySwitchNotificationsHiderTracker,
    @ShadeDisplayAware private val configuration: ConfigurationState,
    private val falsingManager: FalsingManager,
@@ -155,7 +155,7 @@ constructor(
                parentView,
                attachToRoot = false,
            )
            .flowOn(backgroundDispatcher)
            .flowOn(inflationDispatcher)
            .collectLatest { footerView: FooterView ->
                traceAsync("bind FooterView") {
                    parentView.setFooterView(footerView)
@@ -240,7 +240,7 @@ constructor(
                parentView,
                attachToRoot = false,
            )
            .flowOn(backgroundDispatcher)
            .flowOn(inflationDispatcher)
            .collectLatest { emptyShadeView: EmptyShadeView ->
                traceAsync("bind EmptyShadeView") {
                    parentView.setEmptyShadeView(emptyShadeView)
+16 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.systemui.coroutines.newTracingContext
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.NotifInflation
import com.android.systemui.dagger.qualifiers.UiBackground
import com.android.systemui.util.settings.SettingsSingleThreadBackground
import dagger.Module
@@ -123,4 +124,19 @@ class SysUICoroutinesModule {
    ): CoroutineContext {
        return uiBgCoroutineDispatcher
    }

    /** Coroutine dispatcher for background notification inflation. */
    @Provides
    @NotifInflation
    @SysUISingleton
    fun notifInflationCoroutineDispatcher(
        @NotifInflation notifInflationExecutor: Executor,
        @Background bgCoroutineDispatcher: CoroutineDispatcher,
    ): CoroutineDispatcher {
        if (com.android.systemui.Flags.useNotifInflationThreadForFooter()) {
            return notifInflationExecutor.asCoroutineDispatcher()
        } else {
            return bgCoroutineDispatcher
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ import java.util.Optional

val Kosmos.notificationListViewBinder by Fixture {
    NotificationListViewBinder(
        backgroundDispatcher = testDispatcher,
        inflationDispatcher = testDispatcher,
        hiderTracker = displaySwitchNotificationsHiderTracker,
        configuration = configurationState,
        falsingManager = falsingManager,