Merge "setBoundsChangeTransaction: Fix two issues" into rvc-dev am: c46f3e0fb5
Change-Id: I8034ad1feca8895fef2d0238dcce755179d261ec
This commit is contained in:
@@ -846,6 +846,23 @@ class WindowStateAnimator {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean shouldConsumeMainWindowSizeTransaction() {
|
||||
// We only consume the transaction when the client is calling relayout
|
||||
// because this is the only time we know the frameNumber will be valid
|
||||
// due to the client renderer being paused. Put otherwise, only when
|
||||
// mInRelayout is true can we guarantee the next frame will contain
|
||||
// the most recent configuration.
|
||||
if (!mWin.mInRelayout) return false;
|
||||
// Since we can only do this for one window, we focus on the main application window
|
||||
if (mAttrType != TYPE_BASE_APPLICATION) return false;
|
||||
final Task task = mWin.getTask();
|
||||
if (task == null) return false;
|
||||
if (task.getMainWindowSizeChangeTransaction() == null) return false;
|
||||
// Likewise we only focus on the task root, since we can only use one window
|
||||
if (!mWin.mActivityRecord.isRootOfTask()) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void setSurfaceBoundariesLocked(final boolean recoveringMemory) {
|
||||
if (mSurfaceController == null) {
|
||||
return;
|
||||
@@ -886,8 +903,9 @@ class WindowStateAnimator {
|
||||
clipRect = mTmpClipRect;
|
||||
}
|
||||
|
||||
if (w.mInRelayout && (mAttrType == TYPE_BASE_APPLICATION) && (task != null)
|
||||
&& (task.getMainWindowSizeChangeTransaction() != null)) {
|
||||
if (shouldConsumeMainWindowSizeTransaction()) {
|
||||
task.getSurfaceControl().deferTransactionUntil(mWin.getClientViewRootSurface(),
|
||||
mWin.getFrameNumber());
|
||||
mSurfaceController.deferTransactionUntil(mWin.getClientViewRootSurface(),
|
||||
mWin.getFrameNumber());
|
||||
SurfaceControl.mergeToGlobalTransaction(task.getMainWindowSizeChangeTransaction());
|
||||
|
||||
Reference in New Issue
Block a user