diff options
12 files changed, 107 insertions, 32 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeDisplayChangeLatencyTracker.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeDisplayChangeLatencyTracker.kt index 4d35d0eba178..e358dcec8b10 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeDisplayChangeLatencyTracker.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeDisplayChangeLatencyTracker.kt @@ -24,7 +24,6 @@ import com.android.systemui.common.ui.view.ChoreographerUtils import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.scene.ui.view.WindowRootView -import com.android.systemui.shade.ShadeDisplayChangeLatencyTracker.Companion.TIMEOUT import com.android.systemui.shade.data.repository.ShadeDisplaysRepository import com.android.systemui.util.kotlin.getOrNull import java.util.Optional @@ -33,7 +32,6 @@ import javax.inject.Inject import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job -import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.filter @@ -135,7 +133,7 @@ constructor( private companion object { const val TAG = "ShadeDisplayLatency" - val t = TrackTracer(trackName = TAG) + val t = TrackTracer(trackName = TAG, trackGroup = "shade") val TIMEOUT = 3.seconds const val SHADE_MOVE_ACTION = LatencyTracker.ACTION_SHADE_WINDOW_DISPLAY_CHANGE } diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt index 359ddd86f115..5fab889735a6 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt @@ -18,13 +18,16 @@ package com.android.systemui.shade import android.annotation.IntDef import android.os.Trace +import android.os.Trace.TRACE_TAG_APP as TRACE_TAG import android.util.Log import androidx.annotation.FloatRange +import com.android.app.tracing.TraceStateLogger +import com.android.app.tracing.TrackGroupUtils.trackGroup +import com.android.app.tracing.coroutines.TrackTracer import com.android.systemui.dagger.SysUISingleton import com.android.systemui.util.Compile import java.util.concurrent.CopyOnWriteArrayList import javax.inject.Inject -import android.os.Trace.TRACE_TAG_APP as TRACE_TAG /** * A class responsible for managing the notification panel's current state. @@ -38,6 +41,8 @@ class ShadeExpansionStateManager @Inject constructor() { private val expansionListeners = CopyOnWriteArrayList<ShadeExpansionListener>() private val stateListeners = CopyOnWriteArrayList<ShadeStateListener>() + private val stateLogger = TraceStateLogger(trackGroup("shade", TRACK_NAME)) + @PanelState private var state: Int = STATE_CLOSED @FloatRange(from = 0.0, to = 1.0) private var fraction: Float = 0f private var expanded: Boolean = false @@ -75,7 +80,7 @@ class ShadeExpansionStateManager @Inject constructor() { fun onPanelExpansionChanged( @FloatRange(from = 0.0, to = 1.0) fraction: Float, expanded: Boolean, - tracking: Boolean + tracking: Boolean, ) { require(!fraction.isNaN()) { "fraction cannot be NaN" } val oldState = state @@ -113,11 +118,8 @@ class ShadeExpansionStateManager @Inject constructor() { ) if (Trace.isTagEnabled(TRACE_TAG)) { - Trace.traceCounter(TRACE_TAG, "panel_expansion", (fraction * 100).toInt()) - if (state != oldState) { - Trace.asyncTraceForTrackEnd(TRACE_TAG, TRACK_NAME, 0) - Trace.asyncTraceForTrackBegin(TRACE_TAG, TRACK_NAME, state.panelStateToString(), 0) - } + TrackTracer.instantForGroup("shade", "panel_expansion", fraction) + stateLogger.log(state.panelStateToString()) } val expansionChangeEvent = ShadeExpansionChangeEvent(fraction, expanded, tracking) diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeStateTraceLogger.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeStateTraceLogger.kt new file mode 100644 index 000000000000..2705cdafb4de --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeStateTraceLogger.kt @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.shade + +import com.android.app.tracing.TraceStateLogger +import com.android.app.tracing.TrackGroupUtils.trackGroup +import com.android.app.tracing.coroutines.TrackTracer.Companion.instantForGroup +import com.android.app.tracing.coroutines.launchTraced +import com.android.systemui.CoreStartable +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.shade.data.repository.ShadeDisplaysRepository +import com.android.systemui.shade.domain.interactor.ShadeInteractor +import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch + +@SysUISingleton +class ShadeStateTraceLogger +@Inject +constructor( + private val shadeInteractor: ShadeInteractor, + private val shadeDisplaysRepository: ShadeDisplaysRepository, + @Application private val scope: CoroutineScope, +) : CoreStartable { + override fun start() { + scope.launchTraced("ShadeStateTraceLogger") { + launch { + val stateLogger = createTraceStateLogger("isShadeLayoutWide") + shadeInteractor.isShadeLayoutWide.collect { stateLogger.log(it.toString()) } + } + launch { + val stateLogger = createTraceStateLogger("shadeMode") + shadeInteractor.shadeMode.collect { stateLogger.log(it.toString()) } + } + launch { + shadeInteractor.shadeExpansion.collect { + instantForGroup(TRACK_GROUP_NAME, "shadeExpansion", it) + } + } + launch { + shadeDisplaysRepository.displayId.collect { + instantForGroup(TRACK_GROUP_NAME, "displayId", it) + } + } + } + } + + private fun createTraceStateLogger(trackName: String): TraceStateLogger { + return TraceStateLogger(trackGroup(TRACK_GROUP_NAME, trackName)) + } + + private companion object { + const val TRACK_GROUP_NAME = "shade" + } +} diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeTraceLogger.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeTraceLogger.kt index a36c56eafbfc..11805992fd6a 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeTraceLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeTraceLogger.kt @@ -27,7 +27,7 @@ import com.android.app.tracing.coroutines.TrackTracer * them across various threads' logs. */ object ShadeTraceLogger { - private val t = TrackTracer(trackName = "ShadeTraceLogger") + private val t = TrackTracer(trackName = "ShadeTraceLogger", trackGroup = "shade") @JvmStatic fun logOnMovedToDisplay(displayId: Int, config: Configuration) { diff --git a/packages/SystemUI/src/com/android/systemui/shade/StartShadeModule.kt b/packages/SystemUI/src/com/android/systemui/shade/StartShadeModule.kt index c4de78b8a28e..570a7853c394 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/StartShadeModule.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/StartShadeModule.kt @@ -40,4 +40,9 @@ internal abstract class StartShadeModule { @IntoMap @ClassKey(ShadeStartable::class) abstract fun provideShadeStartable(startable: ShadeStartable): CoreStartable + + @Binds + @IntoMap + @ClassKey(ShadeStateTraceLogger::class) + abstract fun provideShadeStateTraceLogger(startable: ShadeStateTraceLogger): CoreStartable } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LightRevealScrim.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LightRevealScrim.kt index 37989f56d559..2885ce80bda9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/LightRevealScrim.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/LightRevealScrim.kt @@ -11,13 +11,13 @@ import android.graphics.PorterDuffColorFilter import android.graphics.PorterDuffXfermode import android.graphics.RadialGradient import android.graphics.Shader -import android.os.Trace import android.util.AttributeSet import android.util.MathUtils.lerp import android.view.MotionEvent import android.view.View import android.view.animation.PathInterpolator import com.android.app.animation.Interpolators +import com.android.app.tracing.coroutines.TrackTracer import com.android.keyguard.logging.ScrimLogger import com.android.systemui.shade.TouchLogger import com.android.systemui.statusbar.LightRevealEffect.Companion.getPercentPastThreshold @@ -321,9 +321,8 @@ constructor( } revealEffect.setRevealAmountOnScrim(value, this) updateScrimOpaque() - Trace.traceCounter( - Trace.TRACE_TAG_APP, - "light_reveal_amount $logString", + TrackTracer.instantForGroup( + "scrim", { "light_reveal_amount $logString" }, (field * 100).toInt() ) invalidate() diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt index e83cded4e2ce..75117936c090 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt @@ -22,7 +22,6 @@ import android.animation.ValueAnimator import android.content.Context import android.content.res.Configuration import android.os.SystemClock -import android.os.Trace import android.util.IndentingPrintWriter import android.util.Log import android.util.MathUtils @@ -33,6 +32,7 @@ import androidx.dynamicanimation.animation.FloatPropertyCompat import androidx.dynamicanimation.animation.SpringAnimation import androidx.dynamicanimation.animation.SpringForce import com.android.app.animation.Interpolators +import com.android.app.tracing.coroutines.TrackTracer import com.android.systemui.Dumpable import com.android.systemui.animation.ShadeInterpolation import com.android.systemui.dagger.SysUISingleton @@ -263,7 +263,7 @@ constructor( updateScheduled = false val (blur, zoomOutFromShadeRadius) = computeBlurAndZoomOut() val opaque = shouldBlurBeOpaque - Trace.traceCounter(Trace.TRACE_TAG_APP, "shade_blur_radius", blur) + TrackTracer.instantForGroup("shade", "shade_blur_radius", blur) blurUtils.applyBlur(root.viewRootImpl, blur, opaque) onBlurApplied(blur, zoomOutFromShadeRadius) } @@ -384,7 +384,7 @@ constructor( windowRootViewBlurInteractor.onBlurAppliedEvent.collect { appliedBlurRadius -> if (updateScheduled) { // Process the blur applied event only if we scheduled the update - Trace.traceCounter(Trace.TRACE_TAG_APP, "shade_blur_radius", appliedBlurRadius) + TrackTracer.instantForGroup("shade", "shade_blur_radius", appliedBlurRadius) updateScheduled = false onBlurApplied(appliedBlurRadius, zoomOutCalculatedFromShadeRadius) } else { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java index a7ad46296e08..ead8f6a1123e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java @@ -37,6 +37,7 @@ import android.view.animation.Interpolator; import androidx.annotation.NonNull; import com.android.app.animation.Interpolators; +import com.android.app.tracing.coroutines.TrackTracer; import com.android.compose.animation.scene.OverlayKey; import com.android.compose.animation.scene.SceneKey; import com.android.internal.annotations.GuardedBy; @@ -671,7 +672,7 @@ public class StatusBarStateControllerImpl implements } private void recordHistoricalState(int newState, int lastState, boolean upcoming) { - Trace.traceCounter(Trace.TRACE_TAG_APP, "statusBarState", newState); + TrackTracer.instantForGroup("statusBar", "state", newState); mHistoryIndex = (mHistoryIndex + 1) % HISTORY_SIZE; HistoricalState state = mHistoricalRecords[mHistoryIndex]; state.mNewState = newState; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java index c6832bc20e6d..cc4be57168cc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java @@ -20,7 +20,6 @@ import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; -import android.os.Trace; import android.service.notification.NotificationListenerService; import android.util.ArrayMap; import android.util.ArraySet; @@ -29,6 +28,7 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.app.tracing.coroutines.TrackTracer; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.IStatusBarService; @@ -152,8 +152,8 @@ public class NotificationLogger implements StateListener, CoreStartable, mExpansionStateLogger.onVisibilityChanged( mTmpCurrentlyVisibleNotifications, mTmpCurrentlyVisibleNotifications); - Trace.traceCounter(Trace.TRACE_TAG_APP, "Notifications [Active]", N); - Trace.traceCounter(Trace.TRACE_TAG_APP, "Notifications [Visible]", + TrackTracer.instantForGroup("Notifications", "Active", N); + TrackTracer.instantForGroup("Notifications", "Visible", mCurrentlyVisibleNotifications.size()); recycleAllVisibilityObjects(mTmpNoLongerVisibleNotifications); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationStatsLoggerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationStatsLoggerImpl.kt index 53749ff24394..c8c798d00a06 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationStatsLoggerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationStatsLoggerImpl.kt @@ -16,9 +16,9 @@ package com.android.systemui.statusbar.notification.stack.ui.view -import android.os.Trace import android.service.notification.NotificationListenerService import androidx.annotation.VisibleForTesting +import com.android.app.tracing.coroutines.TrackTracer import com.android.internal.statusbar.IStatusBarService import com.android.internal.statusbar.NotificationVisibility import com.android.systemui.dagger.SysUISingleton @@ -183,8 +183,8 @@ constructor( maybeLogVisibilityChanges(newlyVisible, noLongerVisible, activeNotifCount) updateExpansionStates(newlyVisible, noLongerVisible) - Trace.traceCounter(Trace.TRACE_TAG_APP, "Notifications [Active]", activeNotifCount) - Trace.traceCounter(Trace.TRACE_TAG_APP, "Notifications [Visible]", newVisibilities.size) + TrackTracer.instantForGroup("Notifications", "Active", activeNotifCount) + TrackTracer.instantForGroup("Notifications", "Visible", newVisibilities.size) lastLoggedVisibilities.clear() lastLoggedVisibilities.putAll(newVisibilities) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 324db79a4078..d43fed0cbf59 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -43,6 +43,7 @@ import android.view.animation.Interpolator; import androidx.annotation.FloatRange; import androidx.annotation.Nullable; +import com.android.app.tracing.coroutines.TrackTracer; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.internal.graphics.ColorUtils; @@ -554,7 +555,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump final ScrimState oldState = mState; mState = state; - Trace.traceCounter(Trace.TRACE_TAG_APP, "scrim_state", mState.ordinal()); + TrackTracer.instantForGroup("scrim", "state", mState.ordinal()); if (mCallback != null) { mCallback.onCancelled(); @@ -1279,10 +1280,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump tint = getDebugScrimTint(scrimView); } - Trace.traceCounter(Trace.TRACE_TAG_APP, getScrimName(scrimView) + "_alpha", + TrackTracer.instantForGroup("scrim", getScrimName(scrimView) + "_alpha", (int) (alpha * 255)); - - Trace.traceCounter(Trace.TRACE_TAG_APP, getScrimName(scrimView) + "_tint", + TrackTracer.instantForGroup("scrim", getScrimName(scrimView) + "_tint", Color.alpha(tint)); scrimView.setTint(tint); if (!mIsBouncerToGoneTransitionRunning) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java index 198859a9013d..8dcb66312558 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java @@ -17,8 +17,8 @@ package com.android.systemui.statusbar.phone; import android.graphics.Color; -import android.os.Trace; +import com.android.app.tracing.coroutines.TrackTracer; import com.android.systemui.dock.DockManager; import com.android.systemui.res.R; import com.android.systemui.scrim.ScrimView; @@ -425,11 +425,11 @@ public enum ScrimState { tint = scrim == mScrimInFront ? ScrimController.DEBUG_FRONT_TINT : ScrimController.DEBUG_BEHIND_TINT; } - Trace.traceCounter(Trace.TRACE_TAG_APP, + TrackTracer.instantForGroup("scrim", scrim == mScrimInFront ? "front_scrim_alpha" : "back_scrim_alpha", (int) (alpha * 255)); - Trace.traceCounter(Trace.TRACE_TAG_APP, + TrackTracer.instantForGroup("scrim", scrim == mScrimInFront ? "front_scrim_tint" : "back_scrim_tint", Color.alpha(tint)); |