Optimize latency when closing panel with animation
The interpolator we chose had a very slow easy out where it generated out frame with mExpandedHeight=0.3 pixels. We add a check there and stop the animation immediately if this happens. Furthermore, we just use a simple post when closing the panel to not add to much latency. The frame will be shown in any case since we are already in animation/input callback, such that a post will be executed after the frame has been sent to RT. Test: Capture trace, unlock phone, make sure no delays Change-Id: I9fc45f4b081bd6143da1ba99e9bc652a9f64e4a7 Fixes: 38294347
This commit is contained in:
@@ -34,10 +34,9 @@ import android.view.animation.Interpolator;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.systemui.DejankUtils;
|
||||
import com.android.systemui.EventLogTags;
|
||||
import com.android.systemui.Interpolators;
|
||||
import com.android.keyguard.LatencyTracker;
|
||||
import com.android.systemui.DejankUtils;
|
||||
import com.android.systemui.Interpolators;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.classifier.FalsingManager;
|
||||
import com.android.systemui.doze.DozeLog;
|
||||
@@ -833,6 +832,14 @@ public abstract class PanelView extends FrameLayout {
|
||||
}
|
||||
}
|
||||
|
||||
// If we are closing the panel and we are almost there due to a slow decelerating
|
||||
// interpolator, abort the animation.
|
||||
if (mExpandedHeight < 1f && mExpandedHeight != 0f && mClosing) {
|
||||
mExpandedHeight = 0f;
|
||||
if (mHeightAnimator != null) {
|
||||
mHeightAnimator.end();
|
||||
}
|
||||
}
|
||||
mExpandedFraction = Math.min(1f,
|
||||
fhWithoutOverExpansion == 0 ? 0 : mExpandedHeight / fhWithoutOverExpansion);
|
||||
onHeightUpdated(mExpandedHeight);
|
||||
|
||||
@@ -121,12 +121,12 @@ public class PhoneStatusBarView extends PanelBar {
|
||||
public void onPanelCollapsed() {
|
||||
super.onPanelCollapsed();
|
||||
// Close the status bar in the next frame so we can show the end of the animation.
|
||||
DejankUtils.postAfterTraversal(mHideExpandedRunnable);
|
||||
post(mHideExpandedRunnable);
|
||||
mIsFullyOpenedPanel = false;
|
||||
}
|
||||
|
||||
public void removePendingHideExpandedRunnables() {
|
||||
DejankUtils.removeCallbacks(mHideExpandedRunnable);
|
||||
removeCallbacks(mHideExpandedRunnable);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user