Merge "Don't updateSurfacePosition with invalid window frames"

This commit is contained in:
Evan Rosky
2020-11-26 00:30:09 +00:00
committed by Android (Google) Code Review
2 changed files with 8 additions and 0 deletions

View File

@@ -5271,6 +5271,12 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
if (mSurfaceControl == null) {
return;
}
if (mWmService.mWindowPlacerLocked.isLayoutDeferred() || isGoneForLayout()) {
// Since this relies on mWindowFrames, changes made while layout is deferred are
// likely to be invalid. Similarly, if it's goneForLayout, mWindowFrames may not be
// up-to-date and thus can't be relied on.
return;
}
transformFrameToSurfacePosition(mWindowFrames.mFrame.left, mWindowFrames.mFrame.top,
mSurfacePosition);

View File

@@ -648,6 +648,8 @@ public class WindowStateTests extends WindowTestsBase {
win1.mSurfaceControl = mock(SurfaceControl.class);
win1.mAttrs.surfaceInsets.set(1, 2, 3, 4);
win1.getFrame().offsetTo(WINDOW_OFFSET, 0);
// Simulate layout
win1.mRelayoutCalled = true;
win1.updateSurfacePosition(t);
win1.getTransformationMatrix(values, matrix);