Merge "Reduce setBounds if bounds not really change" into sc-v2-dev

This commit is contained in:
Tony Huang
2021-08-30 03:15:46 +00:00
committed by Android (Google) Code Review
3 changed files with 58 additions and 24 deletions

View File

@@ -68,6 +68,10 @@ public final class SyncTransactionQueue {
* Queues a sync transaction to be sent serially to WM.
*/
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);
synchronized (mQueue) {
if (DEBUG) Slog.d(TAG, "Queueing up " + wct);
@@ -83,6 +87,10 @@ public final class SyncTransactionQueue {
*/
public void queue(LegacyTransitions.ILegacyTransition transition,
@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);
synchronized (mQueue) {
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.
*/
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) {
if (mQueue.isEmpty()) {
if (DEBUG) Slog.d(TAG, "Nothing in queue, so skip queueing up " + wct);

View File

@@ -94,7 +94,8 @@ public final class SplitLayout {
private final Rect mDividerBounds = new Rect();
private final Rect mBounds1 = 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 SplitWindowManager mSplitWindowManager;
private final DisplayImeController mDisplayImeController;
@@ -104,6 +105,8 @@ public final class SplitLayout {
private Context mContext;
private DividerSnapAlgorithm mDividerSnapAlgorithm;
private WindowContainerToken mWinToken1;
private WindowContainerToken mWinToken2;
private int mDividePosition;
private boolean mInitialized = false;
private int mOrientation;
@@ -190,10 +193,10 @@ public final class SplitLayout {
final int rotation = configuration.windowConfiguration.getRotation();
final Rect rootBounds = configuration.windowConfiguration.getBounds();
if (rotation != mRotation || !mRootBounds.equals(rootBounds)) {
mTmpBounds.set(mRootBounds);
mTempRect.set(mRootBounds);
mRootBounds.set(rootBounds);
mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds);
initDividerPosition(mTmpBounds);
initDividerPosition(mTempRect);
affectsLayout = true;
}
@@ -406,8 +409,16 @@ public final class SplitLayout {
return;
}
wct.setBounds(task1.token, mBounds1)
.setBounds(task2.token, mBounds2);
if (!mBounds1.equals(mWinBounds1) || !task1.token.equals(mWinToken1)) {
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;
}
}
/**

View File

@@ -62,6 +62,7 @@ public class LegacySplitDisplayLayout {
Rect mSecondary = null;
Rect mAdjustedPrimary = null;
Rect mAdjustedSecondary = null;
final Rect mTmpBounds = new Rect();
public LegacySplitDisplayLayout(Context ctx, DisplayLayout dl,
LegacySplitScreenTaskListener taskTiles) {
@@ -136,31 +137,41 @@ public class LegacySplitDisplayLayout {
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;
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) {
resizeSplits(position);
t.setBounds(mTiles.mPrimary.token, mPrimary);
t.setBounds(mTiles.mSecondary.token, mSecondary);
if (resizeSplits(position)) {
t.setBounds(mTiles.mPrimary.token, mPrimary);
t.setBounds(mTiles.mSecondary.token, mSecondary);
t.setSmallestScreenWidthDp(mTiles.mPrimary.token,
getSmallestWidthDpForBounds(mContext, mDisplayLayout, mPrimary));
t.setSmallestScreenWidthDp(mTiles.mSecondary.token,
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);
t.setSmallestScreenWidthDp(mTiles.mPrimary.token,
getSmallestWidthDpForBounds(mContext, mDisplayLayout, mPrimary));
t.setSmallestScreenWidthDp(mTiles.mSecondary.token,
getSmallestWidthDpForBounds(mContext, mDisplayLayout, mSecondary));
}
}
Rect calcResizableMinimizedHomeStackBounds() {