Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3be73abc authored by Craig Mautner's avatar Craig Mautner
Browse files

Fade recents thumbnail to transparent earlier.

Reduce the gpu load by fading the recents thumbnail to an alpha of
0.0 before the remaining animations are completed. When alpha hits
0 the gpu treats the layer as hidden and can merge the remaining
layers in time.

This is a partial fix for 7729214.

Change-Id: I9761bbd0554db6454c7eec0485be798b11672ff5
parent da013c48
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -268,6 +268,9 @@ public class WindowManagerService extends IWindowManager.Stub
    /** Amount of time (in milliseconds) to delay before declaring a window freeze timeout. */
    static final int WINDOW_FREEZE_TIMEOUT_DURATION = 2000;

    /** Fraction of animation at which the recents thumbnail becomes completely transparent */
    static final float RECENTS_THUMBNAIL_FADEOUT_FRACTION = 0.25f;

    /**
     * If true, the window manager will do its own custom freezing and general
     * management of the screen during rotation.
@@ -3383,13 +3386,24 @@ public class WindowManagerService extends IWindowManager.Stub
                Animation scale = new ScaleAnimation(1, scaleW, 1, scaleH,
                        computePivot(mNextAppTransitionStartX, 1 / scaleW),
                        computePivot(mNextAppTransitionStartY, 1 / scaleH));
                AnimationSet set = new AnimationSet(true);
                AnimationSet set = new AnimationSet(false);
                Animation alpha = new AlphaAnimation(1, 0);
                scale.setDuration(duration);
                scale.setInterpolator(
                        new DecelerateInterpolator(THUMBNAIL_ANIMATION_DECELERATE_FACTOR));
                scale.setInterpolator(AnimationUtils.loadInterpolator(mContext,
                        com.android.internal.R.interpolator.decelerate_quad));
                set.addAnimation(scale);
                alpha.setDuration(duration);
                alpha.setInterpolator(new Interpolator() {
                    @Override
                    public float getInterpolation(float input) {
                        if (input < RECENTS_THUMBNAIL_FADEOUT_FRACTION) {
                            // linear response
                            return input / RECENTS_THUMBNAIL_FADEOUT_FRACTION;
                        }
                        // complete
                        return 1;
                    }
                });
                set.addAnimation(alpha);
                set.setFillBefore(true);
                a = set;