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

Commit 2cd97e53 authored by Ale Nijamkin's avatar Ale Nijamkin
Browse files

Revert "rememberViewModel defaults to Dispatchers.Default"

This reverts commit 72b23ed8.

Reason for revert: the experiment to move rememberViewModel work off the main thread has had no meaningful impact on performance metrics. Reverting this change will reduce complexity.

Change-Id: I456bdf2ee0be484b956eb8d91b6e004160c93a40
parent d738d7a5
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.display.domain.interactor.displayWindowPropertiesInteractor
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.statusbar.RankingBuilder
@@ -58,7 +57,6 @@ class ConnectedDisplaysStatusBarNotificationIconViewStoreTest : SysuiTestCase()
            kosmos.iconManager,
            kosmos.displayWindowPropertiesInteractor,
            kosmos.notifPipeline,
            kosmos.testDispatcher,
        )

    private val notifCollectionListeners = mutableListOf<NotifCollectionListener>()
+2 −24
Original line number Diff line number Diff line
@@ -21,13 +21,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.app.tracing.coroutines.launchTraced
import com.android.app.tracing.coroutines.traceCoroutine
import com.android.systemui.Flags.rememberViewModelOffMainThread
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers

/**
 * Returns a remembered view-model of the type [T]. If the returned instance is also an
@@ -41,27 +36,10 @@ import kotlinx.coroutines.Dispatchers
 * of some complex concatenation or templating scheme.
 */
@Composable
fun <T> rememberViewModel(
    traceName: String,
    key: Any = Unit,
    context: CoroutineContext = EmptyCoroutineContext,
    factory: () -> T,
): T {
fun <T> rememberViewModel(traceName: String, key: Any = Unit, factory: () -> T): T {
    val instance = remember(key) { factory() }
    if (instance is Activatable) {
        LaunchedEffect(instance) {
            launchTraced(
                spanName = traceName,
                context =
                    when {
                        context != EmptyCoroutineContext -> context
                        rememberViewModelOffMainThread() -> Dispatchers.Default
                        else -> coroutineContext
                    },
            ) {
                instance.activate()
            }
        }
        LaunchedEffect(instance) { traceCoroutine(traceName) { instance.activate() } }
    }
    return instance
}
+5 −14
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.systemui.statusbar.notification.icon.ui.viewbinder

import android.util.Log
import com.android.dream.lowlight.dagger.qualifiers.Main
import com.android.systemui.display.domain.interactor.DisplayWindowPropertiesInteractor
import com.android.systemui.lifecycle.Activatable
import com.android.systemui.statusbar.StatusBarIconView
@@ -31,10 +30,8 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import java.util.concurrent.ConcurrentHashMap
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.withContext

/** [IconViewStore] for the status bar on multiple displays. */
class ConnectedDisplaysStatusBarNotificationIconViewStore
@@ -45,7 +42,6 @@ constructor(
    private val iconManager: IconManager,
    private val displayWindowPropertiesInteractor: DisplayWindowPropertiesInteractor,
    private val notifPipeline: NotifPipeline,
    @Main private val mainDispatcher: CoroutineDispatcher,
) : IconViewStore, Activatable {

    private val cachedIcons = ConcurrentHashMap<String, StatusBarIconView>()
@@ -83,10 +79,6 @@ constructor(
    }

    override suspend fun activate() = coroutineScope {
        // In case activate is being invoked off the main thread, make sure to switch to the main
        // thread to do the work here as some of the downstream calls assert they've been called on
        // the main thread.
        withContext(mainDispatcher) {
        start()
        try {
            awaitCancellation()
@@ -94,7 +86,6 @@ constructor(
            stop()
        }
    }
    }

    private fun start() {
        notifPipeline.addCollectionListener(notifCollectionListener)
+0 −2
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar.notification.icon.ui.viewbinder
import android.content.testableContext
import com.android.systemui.display.domain.interactor.displayWindowPropertiesInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.statusbar.notification.collection.mockNotifCollection
import com.android.systemui.statusbar.notification.collection.notifPipeline
import com.android.systemui.statusbar.notification.icon.iconManager
@@ -37,7 +36,6 @@ var Kosmos.connectedDisplaysStatusBarNotificationIconViewStoreFactory:
                    iconManager,
                    displayWindowPropertiesInteractor,
                    notifPipeline,
                    testDispatcher,
                )
            }
        }