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

Commit 10a2f232 authored by Tony Huang's avatar Tony Huang Committed by Automerger Merge Worker
Browse files

Merge "Reduce setBounds if bounds not really change" into sc-v2-dev am: 5020a15a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15674519

Change-Id: Id9cae30e6e7303a5962d0c92f07545b2c81db0b6
parents b921eb12 5020a15a
Loading
Loading
Loading
Loading
+12 −0
Original line number Original line Diff line number Diff line
@@ -68,6 +68,10 @@ public final class SyncTransactionQueue {
     * Queues a sync transaction to be sent serially to WM.
     * Queues a sync transaction to be sent serially to WM.
     */
     */
    public void queue(WindowContainerTransaction wct) {
    public void queue(WindowContainerTransaction wct) {
        if (wct.isEmpty()) {
            if (DEBUG) Slog.d(TAG, "Skip queue due to transaction change is empty");
            return;
        }
        SyncCallback cb = new SyncCallback(wct);
        SyncCallback cb = new SyncCallback(wct);
        synchronized (mQueue) {
        synchronized (mQueue) {
            if (DEBUG) Slog.d(TAG, "Queueing up " + wct);
            if (DEBUG) Slog.d(TAG, "Queueing up " + wct);
@@ -83,6 +87,10 @@ public final class SyncTransactionQueue {
     */
     */
    public void queue(LegacyTransitions.ILegacyTransition transition,
    public void queue(LegacyTransitions.ILegacyTransition transition,
            @WindowManager.TransitionType int type, WindowContainerTransaction wct) {
            @WindowManager.TransitionType int type, WindowContainerTransaction wct) {
        if (wct.isEmpty()) {
            if (DEBUG) Slog.d(TAG, "Skip queue due to transaction change is empty");
            return;
        }
        SyncCallback cb = new SyncCallback(transition, type, wct);
        SyncCallback cb = new SyncCallback(transition, type, wct);
        synchronized (mQueue) {
        synchronized (mQueue) {
            if (DEBUG) Slog.d(TAG, "Queueing up legacy transition " + wct);
            if (DEBUG) Slog.d(TAG, "Queueing up legacy transition " + wct);
@@ -99,6 +107,10 @@ public final class SyncTransactionQueue {
     * @return {@code true} if queued, {@code false} if not.
     * @return {@code true} if queued, {@code false} if not.
     */
     */
    public boolean queueIfWaiting(WindowContainerTransaction wct) {
    public boolean queueIfWaiting(WindowContainerTransaction wct) {
        if (wct.isEmpty()) {
            if (DEBUG) Slog.d(TAG, "Skip queueIfWaiting due to transaction change is empty");
            return false;
        }
        synchronized (mQueue) {
        synchronized (mQueue) {
            if (mQueue.isEmpty()) {
            if (mQueue.isEmpty()) {
                if (DEBUG) Slog.d(TAG, "Nothing in queue, so skip queueing up " + wct);
                if (DEBUG) Slog.d(TAG, "Nothing in queue, so skip queueing up " + wct);
+16 −5
Original line number Original line Diff line number Diff line
@@ -94,7 +94,8 @@ public final class SplitLayout {
    private final Rect mDividerBounds = new Rect();
    private final Rect mDividerBounds = new Rect();
    private final Rect mBounds1 = new Rect();
    private final Rect mBounds1 = new Rect();
    private final Rect mBounds2 = new Rect();
    private final Rect mBounds2 = new Rect();
    private final Rect mTmpBounds = new Rect();
    private final Rect mWinBounds1 = new Rect();
    private final Rect mWinBounds2 = new Rect();
    private final SplitLayoutHandler mSplitLayoutHandler;
    private final SplitLayoutHandler mSplitLayoutHandler;
    private final SplitWindowManager mSplitWindowManager;
    private final SplitWindowManager mSplitWindowManager;
    private final DisplayImeController mDisplayImeController;
    private final DisplayImeController mDisplayImeController;
@@ -104,6 +105,8 @@ public final class SplitLayout {


    private Context mContext;
    private Context mContext;
    private DividerSnapAlgorithm mDividerSnapAlgorithm;
    private DividerSnapAlgorithm mDividerSnapAlgorithm;
    private WindowContainerToken mWinToken1;
    private WindowContainerToken mWinToken2;
    private int mDividePosition;
    private int mDividePosition;
    private boolean mInitialized = false;
    private boolean mInitialized = false;
    private int mOrientation;
    private int mOrientation;
@@ -190,10 +193,10 @@ public final class SplitLayout {
        final int rotation = configuration.windowConfiguration.getRotation();
        final int rotation = configuration.windowConfiguration.getRotation();
        final Rect rootBounds = configuration.windowConfiguration.getBounds();
        final Rect rootBounds = configuration.windowConfiguration.getBounds();
        if (rotation != mRotation || !mRootBounds.equals(rootBounds)) {
        if (rotation != mRotation || !mRootBounds.equals(rootBounds)) {
            mTmpBounds.set(mRootBounds);
            mTempRect.set(mRootBounds);
            mRootBounds.set(rootBounds);
            mRootBounds.set(rootBounds);
            mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds);
            mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds);
            initDividerPosition(mTmpBounds);
            initDividerPosition(mTempRect);
            affectsLayout = true;
            affectsLayout = true;
        }
        }


@@ -406,8 +409,16 @@ public final class SplitLayout {
            return;
            return;
        }
        }


        wct.setBounds(task1.token, mBounds1)
        if (!mBounds1.equals(mWinBounds1) || !task1.token.equals(mWinToken1)) {
                .setBounds(task2.token, mBounds2);
            wct.setBounds(task1.token, mBounds1);
            mWinBounds1.set(mBounds1);
            mWinToken1 = task1.token;
        }
        if (!mBounds2.equals(mWinBounds2) || !task2.token.equals(mWinToken2)) {
            wct.setBounds(task2.token, mBounds2);
            mWinBounds2.set(mBounds2);
            mWinToken2 = task2.token;
        }
    }
    }


    /**
    /**
+29 −18
Original line number Original line Diff line number Diff line
@@ -62,6 +62,7 @@ public class LegacySplitDisplayLayout {
    Rect mSecondary = null;
    Rect mSecondary = null;
    Rect mAdjustedPrimary = null;
    Rect mAdjustedPrimary = null;
    Rect mAdjustedSecondary = null;
    Rect mAdjustedSecondary = null;
    final Rect mTmpBounds = new Rect();


    public LegacySplitDisplayLayout(Context ctx, DisplayLayout dl,
    public LegacySplitDisplayLayout(Context ctx, DisplayLayout dl,
            LegacySplitScreenTaskListener taskTiles) {
            LegacySplitScreenTaskListener taskTiles) {
@@ -136,14 +137,33 @@ public class LegacySplitDisplayLayout {
        return mMinimizedSnapAlgorithm;
        return mMinimizedSnapAlgorithm;
    }
    }


    void resizeSplits(int position) {
    /**
     * Resize primary bounds and secondary bounds by divider position.
     *
     * @param position divider position.
     * @return true if calculated bounds changed.
     */
    boolean resizeSplits(int position) {
        mPrimary = mPrimary == null ? new Rect() : mPrimary;
        mPrimary = mPrimary == null ? new Rect() : mPrimary;
        mSecondary = mSecondary == null ? new Rect() : mSecondary;
        mSecondary = mSecondary == null ? new Rect() : mSecondary;
        calcSplitBounds(position, mPrimary, mSecondary);
        int dockSide = getPrimarySplitSide();
        boolean boundsChanged;

        mTmpBounds.set(mPrimary);
        DockedDividerUtils.calculateBoundsForPosition(position, dockSide, mPrimary,
                mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize);
        boundsChanged = !mPrimary.equals(mTmpBounds);

        mTmpBounds.set(mSecondary);
        DockedDividerUtils.calculateBoundsForPosition(position,
                DockedDividerUtils.invertDockSide(dockSide), mSecondary, mDisplayLayout.width(),
                mDisplayLayout.height(), mDividerSize);
        boundsChanged |= !mSecondary.equals(mTmpBounds);
        return boundsChanged;
    }
    }


    void resizeSplits(int position, WindowContainerTransaction t) {
    void resizeSplits(int position, WindowContainerTransaction t) {
        resizeSplits(position);
        if (resizeSplits(position)) {
            t.setBounds(mTiles.mPrimary.token, mPrimary);
            t.setBounds(mTiles.mPrimary.token, mPrimary);
            t.setBounds(mTiles.mSecondary.token, mSecondary);
            t.setBounds(mTiles.mSecondary.token, mSecondary);


@@ -152,15 +172,6 @@ public class LegacySplitDisplayLayout {
            t.setSmallestScreenWidthDp(mTiles.mSecondary.token,
            t.setSmallestScreenWidthDp(mTiles.mSecondary.token,
                    getSmallestWidthDpForBounds(mContext, mDisplayLayout, mSecondary));
                    getSmallestWidthDpForBounds(mContext, mDisplayLayout, mSecondary));
        }
        }

    void calcSplitBounds(int position, @NonNull Rect outPrimary, @NonNull Rect outSecondary) {
        int dockSide = getPrimarySplitSide();
        DockedDividerUtils.calculateBoundsForPosition(position, dockSide, outPrimary,
                mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize);

        DockedDividerUtils.calculateBoundsForPosition(position,
                DockedDividerUtils.invertDockSide(dockSide), outSecondary, mDisplayLayout.width(),
                mDisplayLayout.height(), mDividerSize);
    }
    }


    Rect calcResizableMinimizedHomeStackBounds() {
    Rect calcResizableMinimizedHomeStackBounds() {