Merge "Avoid waiting for drawn window without change" into udc-qpr-dev

This commit is contained in:
Riddle Hsu
2023-07-25 16:16:23 +00:00
committed by Android (Google) Code Review
5 changed files with 11 additions and 10 deletions

View File

@@ -5703,8 +5703,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
// window becomes visible while the sync group is still active. // window becomes visible while the sync group is still active.
return true; return true;
} }
if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mWinAnimator.mDrawState == HAS_DRAWN if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mLastConfigReportedToClient && isDrawn()) {
&& !mRedrawForSyncReported && !mWmService.mResizingWindows.contains(this)) {
// Complete the sync state immediately for a drawn window that doesn't need to redraw. // Complete the sync state immediately for a drawn window that doesn't need to redraw.
onSyncFinishedDrawing(); onSyncFinishedDrawing();
} }

View File

@@ -40,9 +40,7 @@ import static org.mockito.ArgumentMatchers.notNull;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import android.platform.test.annotations.Presubmit; import android.platform.test.annotations.Presubmit;
import android.util.MergedConfiguration;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import android.window.ClientWindowFrames;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
@@ -333,8 +331,7 @@ public class SyncEngineTests extends WindowTestsBase {
w.reparent(botChildWC, POSITION_TOP); w.reparent(botChildWC, POSITION_TOP);
parentWC.prepareSync(); parentWC.prepareSync();
// Assume the window has drawn with the latest configuration. // Assume the window has drawn with the latest configuration.
w.fillClientWindowFramesAndConfiguration(new ClientWindowFrames(), makeLastConfigReportedToClient(w, true /* visible */);
new MergedConfiguration(), true /* useLatestConfig */, true /* relayoutVisible */);
assertTrue(w.onSyncFinishedDrawing()); assertTrue(w.onSyncFinishedDrawing());
assertEquals(SYNC_STATE_READY, w.mSyncState); assertEquals(SYNC_STATE_READY, w.mSyncState);
w.reparent(topChildWC, POSITION_TOP); w.reparent(topChildWC, POSITION_TOP);

View File

@@ -52,7 +52,6 @@ import android.graphics.Rect;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.platform.test.annotations.Presubmit; import android.platform.test.annotations.Presubmit;
import android.util.MergedConfiguration;
import android.view.DisplayCutout; import android.view.DisplayCutout;
import android.view.DisplayInfo; import android.view.DisplayInfo;
import android.view.DisplayShape; import android.view.DisplayShape;
@@ -63,7 +62,6 @@ import android.view.RoundedCorners;
import android.view.Surface; import android.view.Surface;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import android.view.WindowManager; import android.view.WindowManager;
import android.window.ClientWindowFrames;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
@@ -380,8 +378,7 @@ public class WallpaperControllerTests extends WindowTestsBase {
wallpaperWindow.mLayoutSeq = mDisplayContent.mLayoutSeq; wallpaperWindow.mLayoutSeq = mDisplayContent.mLayoutSeq;
// Assume the token was invisible and the latest config was reported. // Assume the token was invisible and the latest config was reported.
wallpaperToken.commitVisibility(false); wallpaperToken.commitVisibility(false);
wallpaperWindow.fillClientWindowFramesAndConfiguration(new ClientWindowFrames(), makeLastConfigReportedToClient(wallpaperWindow, false /* visible */);
new MergedConfiguration(), true /* useLatestConfig */, false /* relayoutVisible */);
assertTrue(wallpaperWindow.isLastConfigReportedToClient()); assertTrue(wallpaperWindow.isLastConfigReportedToClient());
final Rect bounds = wallpaperToken.getBounds(); final Rect bounds = wallpaperToken.getBounds();

View File

@@ -1247,6 +1247,7 @@ public class WindowOrganizerTests extends WindowTestsBase {
// A drawn window can complete the sync state automatically. // A drawn window can complete the sync state automatically.
w1.mWinAnimator.mDrawState = WindowStateAnimator.HAS_DRAWN; w1.mWinAnimator.mDrawState = WindowStateAnimator.HAS_DRAWN;
makeLastConfigReportedToClient(w1, true /* visible */);
mWm.mSyncEngine.onSurfacePlacement(); mWm.mSyncEngine.onSurfacePlacement();
verify(mockCallback).onTransactionReady(anyInt(), any()); verify(mockCallback).onTransactionReady(anyInt(), any());
assertFalse(w1.useBLASTSync()); assertFalse(w1.useBLASTSync());

View File

@@ -85,6 +85,7 @@ import android.os.RemoteException;
import android.os.UserHandle; import android.os.UserHandle;
import android.provider.Settings; import android.provider.Settings;
import android.service.voice.IVoiceInteractionSession; import android.service.voice.IVoiceInteractionSession;
import android.util.MergedConfiguration;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.Display; import android.view.Display;
import android.view.DisplayInfo; import android.view.DisplayInfo;
@@ -102,6 +103,7 @@ import android.view.WindowInsets;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.WindowManager.DisplayImePolicy; import android.view.WindowManager.DisplayImePolicy;
import android.view.inputmethod.ImeTracker; import android.view.inputmethod.ImeTracker;
import android.window.ClientWindowFrames;
import android.window.ITransitionPlayer; import android.window.ITransitionPlayer;
import android.window.ScreenCapture; import android.window.ScreenCapture;
import android.window.StartingWindowInfo; import android.window.StartingWindowInfo;
@@ -624,6 +626,11 @@ class WindowTestsBase extends SystemServiceTestsBase {
} }
} }
static void makeLastConfigReportedToClient(WindowState w, boolean visible) {
w.fillClientWindowFramesAndConfiguration(new ClientWindowFrames(),
new MergedConfiguration(), true /* useLatestConfig */, visible);
}
/** /**
* Gets the order of the given {@link Task} as its z-order in the hierarchy below this TDA. * Gets the order of the given {@link Task} as its z-order in the hierarchy below this TDA.
* The Task can be a direct child of a child TaskDisplayArea. {@code -1} if not found. * The Task can be a direct child of a child TaskDisplayArea. {@code -1} if not found.