diff options
5 files changed, 113 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java index 48a68be962dd..e3730af5a1b5 100644 --- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java @@ -102,6 +102,15 @@ public class LogModule { return factory.create("ShadeLog", 500, false); } + /** Provides a logging buffer for Shade height messages. */ + @Provides + @SysUISingleton + @ShadeHeightLog + public static LogBuffer provideShadeHeightLogBuffer(LogBufferFactory factory) { + return factory.create("ShadeHeightLog", 500 /* maxSize */); + } + + /** Provides a logging buffer for all logs related to managing notification sections. */ @Provides @SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/ShadeHeightLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/ShadeHeightLog.java new file mode 100644 index 000000000000..6fe868655ee6 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/ShadeHeightLog.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2022 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.log.dagger; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import com.android.systemui.plugins.log.LogBuffer; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import javax.inject.Qualifier; + +/** A {@link LogBuffer} for Shade height changes. */ +@Qualifier +@Documented +@Retention(RUNTIME) +public @interface ShadeHeightLog { +} diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index 84b836fec149..fcdde799267b 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -632,6 +632,7 @@ public final class NotificationPanelViewController implements Dumpable { private final KeyguardBottomAreaViewModel mKeyguardBottomAreaViewModel; private final KeyguardBottomAreaInteractor mKeyguardBottomAreaInteractor; private float mMinExpandHeight; + private ShadeHeightLogger mShadeHeightLogger; private boolean mPanelUpdateWhenAnimatorEnds; private boolean mHasVibratedOnOpen = false; private int mFixedDuration = NO_FIXED_DURATION; @@ -711,6 +712,7 @@ public final class NotificationPanelViewController implements Dumpable { KeyguardUpdateMonitor keyguardUpdateMonitor, MetricsLogger metricsLogger, ShadeLogger shadeLogger, + ShadeHeightLogger shadeHeightLogger, ConfigurationController configurationController, Provider<FlingAnimationUtils.Builder> flingAnimationUtilsBuilder, StatusBarTouchableRegionManager statusBarTouchableRegionManager, @@ -771,6 +773,7 @@ public final class NotificationPanelViewController implements Dumpable { mLockscreenGestureLogger = lockscreenGestureLogger; mShadeExpansionStateManager = shadeExpansionStateManager; mShadeLog = shadeLogger; + mShadeHeightLogger = shadeHeightLogger; mGutsManager = gutsManager; mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override @@ -1815,6 +1818,7 @@ public final class NotificationPanelViewController implements Dumpable { waiting = true; } else { resetViews(false /* animate */); + mShadeHeightLogger.logFunctionCall("collapsePanel"); setExpandedFraction(0); // just in case } if (!waiting) { @@ -3691,6 +3695,7 @@ public final class NotificationPanelViewController implements Dumpable { beginJankMonitoring(); fling(0 /* expand */); } else { + mShadeHeightLogger.logFunctionCall("expand"); setExpandedFraction(1f); } mInstantExpanding = false; @@ -4755,6 +4760,7 @@ public final class NotificationPanelViewController implements Dumpable { mInitialTouchFromKeyguard = mKeyguardStateController.isShowing(); if (startTracking) { mTouchSlopExceeded = true; + mShadeHeightLogger.logFunctionCall("startExpandMotion"); setExpandedHeight(mInitialOffsetOnTouch); onTrackingStarted(); } @@ -4900,6 +4906,7 @@ public final class NotificationPanelViewController implements Dumpable { @VisibleForTesting void setExpandedHeight(float height) { debugLog("setExpandedHeight(%.1f)", height); + mShadeHeightLogger.logFunctionCall("setExpandedHeight"); setExpandedHeightInternal(height); } @@ -4923,10 +4930,13 @@ public final class NotificationPanelViewController implements Dumpable { return; } + mShadeHeightLogger.logFunctionCall("updateExpandedHeightToMaxHeight"); setExpandedHeight(currentMaxPanelHeight); } private void setExpandedHeightInternal(float h) { + mShadeHeightLogger.logSetExpandedHeightInternal(h, mSystemClock.currentTimeMillis()); + if (isNaN(h)) { Log.wtf(TAG, "ExpandedHeight set to NaN"); } @@ -4983,7 +4993,9 @@ public final class NotificationPanelViewController implements Dumpable { /** Sets the expanded height relative to a number from 0 to 1. */ public void setExpandedFraction(float frac) { - setExpandedHeight(getMaxPanelTransitionDistance() * frac); + final int maxDist = getMaxPanelTransitionDistance(); + mShadeHeightLogger.logFunctionCall("setExpandedFraction"); + setExpandedHeight(maxDist * frac); } float getExpandedHeight() { @@ -5045,6 +5057,7 @@ public final class NotificationPanelViewController implements Dumpable { /** Collapses the shade instantly without animation. */ public void instantCollapse() { abortAnimations(); + mShadeHeightLogger.logFunctionCall("instantCollapse"); setExpandedFraction(0f); if (mExpanding) { notifyExpandingFinished(); @@ -5161,6 +5174,7 @@ public final class NotificationPanelViewController implements Dumpable { animator.getAnimatedFraction())); setOverExpansionInternal(expansion, false /* isFromGesture */); } + mShadeHeightLogger.logFunctionCall("height animator update"); setExpandedHeightInternal((float) animation.getAnimatedValue()); }); return animator; @@ -5635,6 +5649,7 @@ public final class NotificationPanelViewController implements Dumpable { mStatusBarStateController.setUpcomingState(KEYGUARD); mStatusBarStateListener.onStateChanged(KEYGUARD); mStatusBarStateListener.onDozeAmountChanged(1f, 1f); + mShadeHeightLogger.logFunctionCall("showAodUi"); setExpandedFraction(1f); } @@ -6181,6 +6196,7 @@ public final class NotificationPanelViewController implements Dumpable { // otherwise {@link NotificationStackScrollLayout} // wrongly enables stack height updates at the start of lockscreen swipe-up mAmbientState.setSwipingUp(h <= 0); + mShadeHeightLogger.logFunctionCall("ACTION_MOVE"); setExpandedHeightInternal(newHeight); } break; diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeightLogger.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeightLogger.kt new file mode 100644 index 000000000000..e610b985aef9 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeightLogger.kt @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2022 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.systemui.log.dagger.ShadeHeightLog +import com.android.systemui.plugins.log.LogBuffer +import com.android.systemui.plugins.log.LogLevel.DEBUG +import java.text.SimpleDateFormat +import javax.inject.Inject + +private const val TAG = "ShadeHeightLogger" + +/** + * Log the call stack for [NotificationPanelViewController] setExpandedHeightInternal. + * + * Tracking bug: b/261593829 + */ +class ShadeHeightLogger +@Inject constructor( + @ShadeHeightLog private val buffer: LogBuffer, +) { + + private val dateFormat = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS") + + fun logFunctionCall(functionName: String) { + buffer.log(TAG, DEBUG, { + str1 = functionName + }, { + "$str1" + }) + } + + fun logSetExpandedHeightInternal(h: Float, time: Long) { + buffer.log(TAG, DEBUG, { + double1 = h.toDouble() + long1 = time + }, { + "setExpandedHeightInternal=$double1 time=${dateFormat.format(long1)}" + }) + } +}
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java index d629d8b61ad4..01f13e665318 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java @@ -219,6 +219,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { @Mock private KeyguardStateController mKeyguardStateController; @Mock private DozeLog mDozeLog; @Mock private ShadeLogger mShadeLog; + @Mock private ShadeHeightLogger mShadeHeightLogger; @Mock private CommandQueue mCommandQueue; @Mock private VibratorHelper mVibratorHelper; @Mock private LatencyTracker mLatencyTracker; @@ -455,6 +456,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { mLatencyTracker, mPowerManager, mAccessibilityManager, 0, mUpdateMonitor, mMetricsLogger, mShadeLog, + mShadeHeightLogger, mConfigurationController, () -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager, mConversationNotificationManager, mMediaHierarchyManager, |