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

Commit 9f8b4653 authored by Nicolo' Mazzucato's avatar Nicolo' Mazzucato
Browse files

Use utilities to trace callbackFlow

With the additional tracing we will be able to better understand what is causing jank during lockscreen unlock.

Bug: 350931144
Test: Perfetto trace
Flag: NONE simple logging
Change-Id: I6732c4f64550ae607366c9e2c78308789339f6a7
parent 4cdcc67c
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -18,10 +18,10 @@ package com.android.systemui.accessibility.data.repository

import android.view.accessibility.AccessibilityManager
import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener
import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import com.android.app.tracing.FlowTracing.tracedAwaitClose
import com.android.app.tracing.FlowTracing.tracedConflatedCallbackFlow
import dagger.Module
import dagger.Provides
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged

@@ -38,24 +38,28 @@ interface AccessibilityRepository {
    }
}

private const val TAG = "AccessibilityRepository"

private class AccessibilityRepositoryImpl(
    manager: AccessibilityManager,
) : AccessibilityRepository {
    override val isTouchExplorationEnabled: Flow<Boolean> =
        conflatedCallbackFlow {
        tracedConflatedCallbackFlow(TAG) {
                val listener = TouchExplorationStateChangeListener(::trySend)
                manager.addTouchExplorationStateChangeListener(listener)
                trySend(manager.isTouchExplorationEnabled)
                awaitClose { manager.removeTouchExplorationStateChangeListener(listener) }
                tracedAwaitClose(TAG) {
                    manager.removeTouchExplorationStateChangeListener(listener)
                }
            }
            .distinctUntilChanged()

    override val isEnabled: Flow<Boolean> =
        conflatedCallbackFlow {
        tracedConflatedCallbackFlow(TAG) {
                val listener = AccessibilityManager.AccessibilityStateChangeListener(::trySend)
                manager.addAccessibilityStateChangeListener(listener)
                trySend(manager.isEnabled)
                awaitClose { manager.removeAccessibilityStateChangeListener(listener) }
                tracedAwaitClose(TAG) { manager.removeAccessibilityStateChangeListener(listener) }
            }
            .distinctUntilChanged()
}
+6 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.os.DeadObjectException
import android.os.Handler
import android.os.PowerManager
import android.os.RemoteException
import android.os.Trace
import android.util.Log
import android.view.RemoteAnimationTarget
import android.view.SurfaceControl
@@ -385,10 +386,15 @@ class KeyguardUnlockAnimationController @Inject constructor(
                        valueAnimator.animatedValue as Float, openingWallpaperTargets)
            }
            addListener(object : AnimatorListenerAdapter() {
                override fun onAnimationStart(animation: Animator) {
                    super.onAnimationStart(animation)
                    Trace.asyncTraceBegin(Trace.TRACE_TAG_APP, "WallpaperAlphaAnimation", 0)
                }
                override fun onAnimationEnd(animation: Animator) {
                    Log.d(TAG, "wallpaperCannedUnlockAnimator#onAnimationEnd")
                    keyguardViewMediator.get().exitKeyguardAndFinishSurfaceBehindRemoteAnimation(
                        false /* cancelled */)
                    Trace.asyncTraceEnd(Trace.TRACE_TAG_APP, "WallpaperAlphaAnimation", 0)
                }
            })
        }
+13 −12
Original line number Diff line number Diff line
@@ -19,8 +19,9 @@ package com.android.systemui.keyguard.data.quickaffordance

import android.content.Context
import android.os.UserHandle
import com.android.app.tracing.FlowTracing.tracedAwaitClose
import com.android.app.tracing.FlowTracing.tracedConflatedCallbackFlow
import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.settings.UserTracker
@@ -28,7 +29,6 @@ import com.android.systemui.shared.customization.data.content.CustomizationProvi
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
@@ -55,7 +55,8 @@ constructor(
    private val userHandle: UserHandle,
) : KeyguardQuickAffordanceSelectionManager {

    private val userId: Flow<Int> = conflatedCallbackFlow {
    private val userId: Flow<Int> =
        tracedConflatedCallbackFlow("userId") {
            val callback =
                object : UserTracker.Callback {
                    override fun onUserChanged(newUser: Int, userContext: Context) {
@@ -66,7 +67,7 @@ constructor(
            userTracker.addCallback(callback) { it.run() }
            trySendWithFailureLogging(userTracker.userId, TAG)

        awaitClose { userTracker.removeCallback(callback) }
            tracedAwaitClose("userId") { userTracker.removeCallback(callback) }
        }

    private val clientOrNull: StateFlow<CustomizationProviderClient?> =
+15 −15
Original line number Diff line number Diff line
@@ -23,9 +23,10 @@ import android.app.StatusBarManager
import android.graphics.Point
import android.util.MathUtils
import com.android.app.animation.Interpolators
import com.android.app.tracing.FlowTracing.tracedAwaitClose
import com.android.app.tracing.FlowTracing.tracedConflatedCallbackFlow
import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository
import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
import com.android.systemui.common.shared.model.NotificationContainerBounds
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.dagger.SysUISingleton
@@ -57,7 +58,6 @@ import javax.inject.Inject
import javax.inject.Provider
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
@@ -197,21 +197,21 @@ constructor(
    val isActiveDreamLockscreenHosted: StateFlow<Boolean> = repository.isActiveDreamLockscreenHosted

    /** Event for when the camera gesture is detected */
    val onCameraLaunchDetected: Flow<CameraLaunchSourceModel> = conflatedCallbackFlow {
    val onCameraLaunchDetected: Flow<CameraLaunchSourceModel> =
        tracedConflatedCallbackFlow("KeyguardInteractor#onCameraLaunchDetected") {
            val callback =
                object : CommandQueue.Callbacks {
                    override fun onCameraLaunchGestureDetected(source: Int) {
                        trySendWithFailureLogging(
                            cameraLaunchSourceIntToModel(source),
                            TAG,
                        "updated onCameraLaunchGestureDetected"
                    )
                            "updated onCameraLaunchGestureDetected")
                    }
                }

            commandQueue.addCallback(callback)

        awaitClose { commandQueue.removeCallback(callback) }
            tracedAwaitClose("onCameraLaunchDetected") { commandQueue.removeCallback(callback) }
        }

    /**
+2 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
package com.android.systemui.keyguard.ui.viewmodel

import androidx.annotation.VisibleForTesting
import com.android.app.tracing.FlowTracing.traceEmissionCount
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardQuickAffordanceInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
@@ -229,7 +230,7 @@ constructor(
                    )
                }
                .distinctUntilChanged()
        }
        }.traceEmissionCount({"QuickAfforcances#button${position.toSlotId()}"})
    }

    private fun KeyguardQuickAffordanceModel.toViewModel(