mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 11:18:21 +00:00
Pause expensive view updates before setting hw/sw layers.
Prevents widgets from updating mid animation. Also pauses view updates during app close animation. Bug: 220939231 Bug: 230617085 Bug: 226171754 Test: manual Change-Id: I0138d57e6a7b2c22fd9a029e971b3e27c7e9f22e
This commit is contained in:
@@ -483,6 +483,9 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener
|
||||
? new float[]{1, mContentScale}
|
||||
: new float[]{mContentScale, 1};
|
||||
|
||||
// Pause expensive view updates as they can lead to layer thrashing and skipped frames.
|
||||
mLauncher.pauseExpensiveViewUpdates();
|
||||
|
||||
if (mLauncher.isInState(ALL_APPS)) {
|
||||
// All Apps in portrait mode is full screen, so we only animate AllAppsContainerView.
|
||||
final View appsView = mLauncher.getAppsView();
|
||||
@@ -581,9 +584,6 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener
|
||||
}
|
||||
}
|
||||
|
||||
// Pause expensive view updates as they can lead to layer thrashing and skipped frames.
|
||||
mLauncher.pauseExpensiveViewUpdates();
|
||||
|
||||
endListener = () -> {
|
||||
viewsToAnimate.forEach(view -> {
|
||||
SCALE_PROPERTY.set(view, 1f);
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.quickstep.util;
|
||||
import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y;
|
||||
import static com.android.launcher3.LauncherState.BACKGROUND_APP;
|
||||
import static com.android.launcher3.LauncherState.NORMAL;
|
||||
import static com.android.launcher3.anim.AnimatorListeners.forEndCallback;
|
||||
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||
import static com.android.launcher3.anim.PropertySetter.NO_ANIM_PROPERTY_SETTER;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.SKIP_DEPTH_CONTROLLER;
|
||||
@@ -148,6 +149,9 @@ public class StaggeredWorkspaceAnim {
|
||||
});
|
||||
}
|
||||
|
||||
launcher.pauseExpensiveViewUpdates();
|
||||
mAnimators.addListener(forEndCallback(launcher::resumeExpensiveViewUpdates));
|
||||
|
||||
if (animateOverviewScrim) {
|
||||
PendingAnimation pendingAnimation = new PendingAnimation(DURATION_MS);
|
||||
launcher.getWorkspace().getStateTransitionAnimation()
|
||||
|
||||
@@ -3229,11 +3229,24 @@ public class Launcher extends StatefulActivity<LauncherState>
|
||||
public void pauseExpensiveViewUpdates() {
|
||||
// Pause page indicator animations as they lead to layer trashing.
|
||||
getWorkspace().getPageIndicator().pauseAnimations();
|
||||
|
||||
getWorkspace().mapOverItems((info, view) -> {
|
||||
if (view instanceof LauncherAppWidgetHostView) {
|
||||
((LauncherAppWidgetHostView) view).beginDeferringUpdates();
|
||||
}
|
||||
return false; // Return false to continue iterating through all the items.
|
||||
});
|
||||
}
|
||||
|
||||
/** Resumes view updates at the end of the app launch animation. */
|
||||
public void resumeExpensiveViewUpdates() {
|
||||
getWorkspace().getPageIndicator().skipAnimationsToEnd();
|
||||
}
|
||||
|
||||
getWorkspace().mapOverItems((info, view) -> {
|
||||
if (view instanceof LauncherAppWidgetHostView) {
|
||||
((LauncherAppWidgetHostView) view).endDeferringUpdates();
|
||||
}
|
||||
return false; // Return false to continue iterating through all the items.
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3265,7 +3265,11 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
|
||||
}
|
||||
}
|
||||
|
||||
private View mapOverCellLayout(CellLayout layout, ItemOperator op) {
|
||||
/**
|
||||
* Perform {param operator} over all the items in a given {param layout}.
|
||||
* @return The first item that satisfies the operator or null.
|
||||
*/
|
||||
public View mapOverCellLayout(CellLayout layout, ItemOperator operator) {
|
||||
// TODO(b/128460496) Potential race condition where layout is not yet loaded
|
||||
if (layout == null) {
|
||||
return null;
|
||||
@@ -3275,7 +3279,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
|
||||
final int itemCount = container.getChildCount();
|
||||
for (int itemIdx = 0; itemIdx < itemCount; itemIdx++) {
|
||||
View item = container.getChildAt(itemIdx);
|
||||
if (op.evaluate((ItemInfo) item.getTag(), item)) {
|
||||
if (operator.evaluate((ItemInfo) item.getTag(), item)) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user