diff options
4 files changed, 41 insertions, 11 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt index ac946cacdc5b..24e93efa09cb 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt @@ -30,6 +30,7 @@ import com.android.systemui.unfold.util.ScaleAwareTransitionProgressProvider import com.android.systemui.unfold.updates.DeviceFoldStateProvider import com.android.systemui.unfold.updates.hinge.EmptyHingeAngleProvider import com.android.systemui.unfold.updates.hinge.HingeSensorAngleProvider +import com.android.systemui.unfold.util.ATraceLoggerTransitionProgressListener import java.lang.IllegalStateException import java.util.concurrent.Executor @@ -46,7 +47,8 @@ fun createUnfoldTransitionProgressProvider( deviceStateManager: DeviceStateManager, sensorManager: SensorManager, mainHandler: Handler, - mainExecutor: Executor + mainExecutor: Executor, + tracingTagPrefix: String ): UnfoldTransitionProgressProvider { if (!config.isEnabled) { @@ -76,9 +78,12 @@ fun createUnfoldTransitionProgressProvider( FixedTimingTransitionProgressProvider(foldStateProvider) } return ScaleAwareTransitionProgressProvider( - unfoldTransitionProgressProvider, - context.contentResolver - ) + unfoldTransitionProgressProvider, + context.contentResolver + ).apply { + // Always present callback that logs animation beginning and end. + addCallback(ATraceLoggerTransitionProgressListener(tracingTagPrefix)) + } } fun createConfig(context: Context): UnfoldTransitionConfig = diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt index 51eae573f040..dc64f14b830d 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt @@ -32,12 +32,7 @@ import com.android.systemui.unfold.updates.FoldStateProvider import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener -/** - * Maps fold updates to unfold transition progress using DynamicAnimation. - * - * TODO(b/193793338) Current limitations: - * - doesn't handle postures - */ +/** Maps fold updates to unfold transition progress using DynamicAnimation. */ internal class PhysicsBasedUnfoldTransitionProgressProvider( private val foldStateProvider: FoldStateProvider ) : diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/util/ATraceLoggerTransitionProgressProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/util/ATraceLoggerTransitionProgressProvider.kt new file mode 100644 index 000000000000..f3eeb3210ece --- /dev/null +++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/util/ATraceLoggerTransitionProgressProvider.kt @@ -0,0 +1,29 @@ +package com.android.systemui.unfold.util + +import android.os.Trace +import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener + +/** + * Listener that logs start and end of the fold-unfold transition. + * + * [tracePrefix] arg helps in differentiating those. Currently, this is expected to be logged twice + * for each fold/unfold: in (1) systemui and (2) launcher process. + */ +class ATraceLoggerTransitionProgressListener(tracePrefix: String) : TransitionProgressListener { + + private val traceName = "$tracePrefix#$UNFOLD_TRANSITION_TRACE_NAME" + + override fun onTransitionStarted() { + Trace.beginAsyncSection(traceName, /* cookie= */ 0) + } + + override fun onTransitionFinished() { + Trace.endAsyncSection(traceName, /* cookie= */ 0) + } + + override fun onTransitionProgress(progress: Float) { + Trace.setCounter(traceName, (progress * 100).toLong()) + } +} + +private const val UNFOLD_TRANSITION_TRACE_NAME = "FoldUnfoldTransitionInProgress" diff --git a/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt b/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt index cd3e2d335f0b..75dfd48ad9f3 100644 --- a/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt +++ b/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt @@ -58,7 +58,8 @@ class UnfoldTransitionModule { deviceStateManager, sensorManager, handler, - executor + executor, + tracingTagPrefix = "systemui" ) ) } else { |