Merge "Force app to redraw when using bounds change transaction" into rvc-dev
This commit is contained in:
@@ -4515,6 +4515,7 @@ class Task extends WindowContainer<WindowContainer> {
|
||||
*/
|
||||
void setMainWindowSizeChangeTransaction(SurfaceControl.Transaction t) {
|
||||
setMainWindowSizeChangeTransaction(t, this);
|
||||
forAllWindows(WindowState::requestRedrawForSync, true);
|
||||
}
|
||||
|
||||
private void setMainWindowSizeChangeTransaction(SurfaceControl.Transaction t, Task origin) {
|
||||
|
||||
@@ -339,7 +339,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
private boolean mDragResizing;
|
||||
private boolean mDragResizingChangeReported = true;
|
||||
private int mResizeMode;
|
||||
private boolean mResizeForBlastSyncReported;
|
||||
private boolean mRedrawForSyncReported;
|
||||
|
||||
/**
|
||||
* Special mode that is intended only for the rounded corner overlay: during rotation
|
||||
@@ -1402,7 +1402,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
|| configChanged
|
||||
|| dragResizingChanged
|
||||
|| mReportOrientationChanged
|
||||
|| requestResizeForBlastSync()) {
|
||||
|| shouldSendRedrawForSync()) {
|
||||
ProtoLog.v(WM_DEBUG_RESIZE,
|
||||
"Resize reasons for w=%s: %s surfaceResized=%b configChanged=%b "
|
||||
+ "dragResizingChanged=%b reportOrientationChanged=%b",
|
||||
@@ -3564,7 +3564,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
mReportOrientationChanged = false;
|
||||
mDragResizingChangeReported = true;
|
||||
mWinAnimator.mSurfaceResized = false;
|
||||
mResizeForBlastSyncReported = true;
|
||||
mWindowFrames.resetInsetsChanged();
|
||||
|
||||
final Rect frame = mWindowFrames.mCompatFrame;
|
||||
@@ -3572,11 +3571,13 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
final Rect visibleInsets = mWindowFrames.mLastVisibleInsets;
|
||||
final Rect stableInsets = mWindowFrames.mLastStableInsets;
|
||||
final MergedConfiguration mergedConfiguration = mLastReportedConfiguration;
|
||||
final boolean reportDraw = mWinAnimator.mDrawState == DRAW_PENDING || useBLASTSync();
|
||||
final boolean forceRelayout = reportOrientation || isDragResizeChanged();
|
||||
final boolean reportDraw = mWinAnimator.mDrawState == DRAW_PENDING || useBLASTSync() || !mRedrawForSyncReported;
|
||||
final boolean forceRelayout = reportOrientation || isDragResizeChanged() || !mRedrawForSyncReported;
|
||||
final int displayId = getDisplayId();
|
||||
final DisplayCutout displayCutout = getWmDisplayCutout().getDisplayCutout();
|
||||
|
||||
mRedrawForSyncReported = true;
|
||||
|
||||
try {
|
||||
mClient.resized(frame, contentInsets, visibleInsets, stableInsets, reportDraw,
|
||||
mergedConfiguration, getBackdropFrame(frame), forceRelayout,
|
||||
@@ -5823,7 +5824,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
if (!willSync) {
|
||||
return false;
|
||||
}
|
||||
mResizeForBlastSyncReported = false;
|
||||
requestRedrawForSync();
|
||||
|
||||
mLocalSyncId = mBLASTSyncEngine.startSyncSet(this);
|
||||
addChildrenToSyncSet(mLocalSyncId);
|
||||
@@ -5884,7 +5885,20 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
notifyBlastSyncTransaction();
|
||||
}
|
||||
|
||||
private boolean requestResizeForBlastSync() {
|
||||
return useBLASTSync() && !mResizeForBlastSyncReported;
|
||||
/**
|
||||
* When using the two WindowOrganizer sync-primitives (BoundsChangeTransaction, BLASTSync)
|
||||
* it can be a little difficult to predict whether your change will actually trigger redrawing
|
||||
* on the client side. To ease the burden on shell developers, we force send MSG_RESIZED
|
||||
* for Windows involved in these Syncs
|
||||
*/
|
||||
private boolean shouldSendRedrawForSync() {
|
||||
final Task task = getTask();
|
||||
if (task != null && task.getMainWindowSizeChangeTransaction() != null)
|
||||
return !mRedrawForSyncReported;
|
||||
return useBLASTSync() && !mRedrawForSyncReported;
|
||||
}
|
||||
|
||||
void requestRedrawForSync() {
|
||||
mRedrawForSyncReported = false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user