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

Commit e2ebee21 authored by Peter Kalauskas's avatar Peter Kalauskas
Browse files

Flow tracing for AOD

Bug: 334171711
Test: atest SystemUITests
Flag: com.android.systemui.coroutine_tracing
Change-Id: Ic23ac39047120f0d02fcb7f2fbd3132686bc8287
parent 8a4042e9
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -19,8 +19,10 @@ package com.android.systemui.keyguard.domain.interactor

import android.annotation.SuppressLint
import android.util.Log
import com.android.app.tracing.coroutines.flow.filterTraced
import com.android.app.tracing.coroutines.flow.traceAs
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.app.tracing.coroutines.traceCoroutine
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.Flags.keyguardTransitionForceFinishOnScreenOff
@@ -237,7 +239,7 @@ constructor(
        if (edge.isSceneWildcardEdge()) {
            return simulateTransitionStepsForSceneTransitions(edge)
        }
        return flow.filter { step ->
        return flow.filterTraced("stl-filter") { step ->
            val fromScene =
                when (edge) {
                    is Edge.StateToState -> edge.from?.mapToSceneContainerScene()
@@ -276,7 +278,7 @@ constructor(
                    step.transitionState == TransitionState.CANCELED) &&
                    sceneTransitionPair.value.previousValue.isTransitioning(fromScene, toScene)

            return@filter isTransitioningBetweenLockscreenStates ||
            return@filterTraced isTransitioningBetweenLockscreenStates ||
                isTransitioningBetweenDesiredScenes ||
                terminalStepBelongsToPreviousTransition ||
                belongsToInstantReversedTransition
@@ -365,27 +367,27 @@ constructor(

        coroutineScope {
            collect { value ->
                job?.cancelAndJoin()
                traceCoroutine("cancelAndJoin") { job?.cancelAndJoin() }

                job = launch {
                job = launch("inner") {
                    val innerFlow = transform(value)
                    try {
                        innerFlow.collect { step ->
                            if (step.transitionState == TransitionState.STARTED) {
                                startedEmitted = true
                            }
                            send(step)
                            traceCoroutine("send($step)") { send(step) }
                        }
                    } finally {
                        if (startedEmitted) {
                            send(
                            val step =
                                TransitionStep(
                                    from = UNDEFINED,
                                    to = UNDEFINED,
                                    value = 1f,
                                    transitionState = TransitionState.FINISHED,
                                )
                            )
                            traceCoroutine("send($step)") { send(step) }
                            startedEmitted = false
                        }
                    }
@@ -393,6 +395,7 @@ constructor(
            }
        }
    }
    .traceAs("flatMapLatestWithFinished")

    /**
     * Converts old KTF states to UNDEFINED when [SceneContainerFlag] is enabled.
@@ -548,6 +551,7 @@ constructor(
                }
            }
            .onStart { emit(false) }
            .traceAs("isInTransition-$edge-$edgeWithoutSceneContainer")
            .distinctUntilChanged()
    }

+0 −1
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.shared.Flags.ambientAod
import com.android.systemui.statusbar.LightRevealScrim
import com.android.systemui.wallpapers.ui.viewmodel.WallpaperViewModel
import com.android.app.tracing.coroutines.launchTraced as launch

object LightRevealScrimViewBinder {
    @JvmStatic
+9 −5
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.scene.domain.interactor

import com.android.app.tracing.coroutines.flow.stateInTraced
import com.android.compose.animation.scene.ContentKey
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.OverlayKey
@@ -52,7 +53,6 @@ import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch

@@ -124,7 +124,8 @@ constructor(
    val transitionState: StateFlow<ObservableTransitionState> =
        repository.transitionState
            .onEach { logger.logSceneTransition(it) }
            .stateIn(
            .stateInTraced(
                name = "transitionState",
                scope = applicationScope,
                started = SharingStarted.Eagerly,
                initialValue = repository.transitionState.value,
@@ -145,7 +146,8 @@ constructor(
                    is ObservableTransitionState.Transition -> state.toContent
                }
            }
            .stateIn(
            .stateInTraced(
                name = "transitioningTo",
                scope = applicationScope,
                started = SharingStarted.WhileSubscribed(),
                initialValue = null,
@@ -164,7 +166,8 @@ constructor(
                    is ObservableTransitionState.Idle -> flowOf(false)
                }
            }
            .stateIn(
            .stateInTraced(
                name = "isTransitionUserInputOngoing",
                scope = applicationScope,
                started = SharingStarted.WhileSubscribed(),
                initialValue = false,
@@ -183,7 +186,8 @@ constructor(
                    activeTransitionAnimationCount = activeTransitionAnimationCount,
                )
            }
            .stateIn(
            .stateInTraced(
                name = "isVisible",
                scope = applicationScope,
                started = SharingStarted.WhileSubscribed(),
                initialValue = isVisibleInternal(),