Loading core/java/android/window/ClientWindowFrames.java +10 −5 Original line number Diff line number Diff line Loading @@ -56,7 +56,16 @@ public class ClientWindowFrames implements Parcelable { public ClientWindowFrames() { } public ClientWindowFrames(ClientWindowFrames other) { public ClientWindowFrames(@NonNull ClientWindowFrames other) { setTo(other); } private ClientWindowFrames(@NonNull Parcel in) { readFromParcel(in); } /** Updates the current frames to the given frames. */ public void setTo(@NonNull ClientWindowFrames other) { frame.set(other.frame); displayFrame.set(other.displayFrame); parentFrame.set(other.parentFrame); Loading @@ -67,10 +76,6 @@ public class ClientWindowFrames implements Parcelable { compatScale = other.compatScale; } private ClientWindowFrames(Parcel in) { readFromParcel(in); } /** Needed for AIDL out parameters. */ public void readFromParcel(Parcel in) { frame.readFromParcel(in); Loading services/core/java/com/android/server/wm/WindowManagerService.java +3 −5 Original line number Diff line number Diff line Loading @@ -1927,7 +1927,7 @@ public class WindowManagerService extends IWindowManager.Stub displayContent.getInsetsStateController().updateAboveInsetsState( false /* notifyInsetsChanged */); outInsetsState.set(win.getCompatInsetsState(), true /* copySources */); win.fillInsetsState(outInsetsState, true /* copySources */); getInsetsSourceControls(win, outActiveControls); if (win.mLayoutAttached) { Loading Loading @@ -2680,7 +2680,7 @@ public class WindowManagerService extends IWindowManager.Stub } if (outInsetsState != null) { outInsetsState.set(win.getCompatInsetsState(), true /* copySources */); win.fillInsetsState(outInsetsState, true /* copySources */); } ProtoLog.v(WM_DEBUG_FOCUS, "Relayout of %s: focusMayChange=%b", Loading Loading @@ -2743,12 +2743,10 @@ public class WindowManagerService extends IWindowManager.Stub } private void getInsetsSourceControls(WindowState win, InsetsSourceControl.Array outArray) { final InsetsSourceControl[] controls = win.getDisplayContent().getInsetsStateController().getControlsForDispatch(win); // We will leave the critical section before returning the leash to the client, // so we need to copy the leash to prevent others release the one that we are // about to return. outArray.set(controls, true /* copyControls */); win.fillInsetsSourceControls(outArray, true /* copyControls */); // This source control is an extra copy if the client is not local. By setting // PARCELABLE_WRITE_RETURN_VALUE, the leash will be released at the end of // SurfaceControl.writeToParcel. Loading services/core/java/com/android/server/wm/WindowState.java +36 −16 Original line number Diff line number Diff line Loading @@ -434,7 +434,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP /** @see #isLastConfigReportedToClient() */ private boolean mLastConfigReportedToClient; // TODO(b/339380439): Ensure to use the same object for IWindowSession#relayout private final ClientWindowFrames mLastReportedFrames = new ClientWindowFrames(); private final InsetsState mLastReportedInsetsState = new InsetsState(); private final InsetsSourceControl.Array mLastReportedActiveControls = new InsetsSourceControl.Array(); Loading Loading @@ -495,8 +498,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP private final WindowFrames mWindowFrames = new WindowFrames(); private final ClientWindowFrames mClientWindowFrames = new ClientWindowFrames(); /** * List of rects where system gestures should be ignored. * Loading Loading @@ -3650,8 +3651,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP outFrames.attachedFrame.scale(mInvGlobalScale); } } outFrames.compatScale = getCompatScaleForClient(); if (mLastReportedFrames != outFrames) { mLastReportedFrames.setTo(outFrames); } // Note: in the cases where the window is tied to an activity, we should not send a // configuration update when the window has requested to be hidden. Doing so can lead to Loading @@ -3678,6 +3681,25 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mLastConfigReportedToClient = true; } void fillInsetsState(@NonNull InsetsState outInsetsState, boolean copySources) { outInsetsState.set(getCompatInsetsState(), copySources); if (outInsetsState != mLastReportedInsetsState) { // No need to copy for the recorded. mLastReportedInsetsState.set(outInsetsState, false /* copySources */); } } void fillInsetsSourceControls(@NonNull InsetsSourceControl.Array outArray, boolean copyControls) { final InsetsSourceControl[] controls = getDisplayContent().getInsetsStateController().getControlsForDispatch(this); outArray.set(controls, copyControls); if (outArray != mLastReportedActiveControls) { // No need to copy for the recorded. mLastReportedActiveControls.setTo(outArray, false /* copyControls */); } } void reportResized() { // If the activity is scheduled to relaunch, skip sending the resized to ViewRootImpl now // since it will be destroyed anyway. This also prevents the client from receiving Loading Loading @@ -3712,9 +3734,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP final int prevRotation = mLastReportedConfiguration .getMergedConfiguration().windowConfiguration.getRotation(); fillClientWindowFramesAndConfiguration(mClientWindowFrames, mLastReportedConfiguration, fillClientWindowFramesAndConfiguration(mLastReportedFrames, mLastReportedConfiguration, mLastReportedActivityWindowInfo, true /* useLatestConfig */, false /* relayoutVisible */); fillInsetsState(mLastReportedInsetsState, false /* copySources */); final boolean syncRedraw = shouldSendRedrawForSync(); final boolean syncWithBuffers = syncRedraw && shouldSyncWithBuffers(); final boolean reportDraw = syncRedraw || drawPending; Loading @@ -3734,8 +3757,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (Flags.bundleClientTransactionFlag()) { getProcess().scheduleClientTransactionItem( WindowStateResizeItem.obtain(mClient, mClientWindowFrames, reportDraw, mLastReportedConfiguration, getCompatInsetsState(), forceRelayout, WindowStateResizeItem.obtain(mClient, mLastReportedFrames, reportDraw, mLastReportedConfiguration, mLastReportedInsetsState, forceRelayout, alwaysConsumeSystemBars, displayId, syncWithBuffers ? mSyncSeqId : -1, isDragResizing, mLastReportedActivityWindowInfo)); Loading @@ -3743,8 +3766,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } else { // TODO(b/301870955): cleanup after launch try { mClient.resized(mClientWindowFrames, reportDraw, mLastReportedConfiguration, getCompatInsetsState(), forceRelayout, alwaysConsumeSystemBars, displayId, mClient.resized(mLastReportedFrames, reportDraw, mLastReportedConfiguration, mLastReportedInsetsState, forceRelayout, alwaysConsumeSystemBars, displayId, syncWithBuffers ? mSyncSeqId : -1, isDragResizing, mLastReportedActivityWindowInfo); onResizePostDispatched(drawPending, prevRotation, displayId); Loading Loading @@ -3817,17 +3840,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (mRemoved) { return; } final InsetsStateController stateController = getDisplayContent().getInsetsStateController(); final InsetsState insetsState = getCompatInsetsState(); mLastReportedActiveControls.set(stateController.getControlsForDispatch(this), false /* copyControls */); fillInsetsState(mLastReportedInsetsState, false /* copySources */); fillInsetsSourceControls(mLastReportedActiveControls, false /* copyControls */); if (Flags.insetsControlChangedItem()) { getProcess().scheduleClientTransactionItem(WindowStateInsetsControlChangeItem.obtain( mClient, insetsState, mLastReportedActiveControls)); mClient, mLastReportedInsetsState, mLastReportedActiveControls)); } else { try { mClient.insetsControlChanged(insetsState, mLastReportedActiveControls); mClient.insetsControlChanged(mLastReportedInsetsState, mLastReportedActiveControls); } catch (RemoteException e) { Slog.w(TAG, "Failed to deliver inset control state change to w=" + this, e); } Loading Loading
core/java/android/window/ClientWindowFrames.java +10 −5 Original line number Diff line number Diff line Loading @@ -56,7 +56,16 @@ public class ClientWindowFrames implements Parcelable { public ClientWindowFrames() { } public ClientWindowFrames(ClientWindowFrames other) { public ClientWindowFrames(@NonNull ClientWindowFrames other) { setTo(other); } private ClientWindowFrames(@NonNull Parcel in) { readFromParcel(in); } /** Updates the current frames to the given frames. */ public void setTo(@NonNull ClientWindowFrames other) { frame.set(other.frame); displayFrame.set(other.displayFrame); parentFrame.set(other.parentFrame); Loading @@ -67,10 +76,6 @@ public class ClientWindowFrames implements Parcelable { compatScale = other.compatScale; } private ClientWindowFrames(Parcel in) { readFromParcel(in); } /** Needed for AIDL out parameters. */ public void readFromParcel(Parcel in) { frame.readFromParcel(in); Loading
services/core/java/com/android/server/wm/WindowManagerService.java +3 −5 Original line number Diff line number Diff line Loading @@ -1927,7 +1927,7 @@ public class WindowManagerService extends IWindowManager.Stub displayContent.getInsetsStateController().updateAboveInsetsState( false /* notifyInsetsChanged */); outInsetsState.set(win.getCompatInsetsState(), true /* copySources */); win.fillInsetsState(outInsetsState, true /* copySources */); getInsetsSourceControls(win, outActiveControls); if (win.mLayoutAttached) { Loading Loading @@ -2680,7 +2680,7 @@ public class WindowManagerService extends IWindowManager.Stub } if (outInsetsState != null) { outInsetsState.set(win.getCompatInsetsState(), true /* copySources */); win.fillInsetsState(outInsetsState, true /* copySources */); } ProtoLog.v(WM_DEBUG_FOCUS, "Relayout of %s: focusMayChange=%b", Loading Loading @@ -2743,12 +2743,10 @@ public class WindowManagerService extends IWindowManager.Stub } private void getInsetsSourceControls(WindowState win, InsetsSourceControl.Array outArray) { final InsetsSourceControl[] controls = win.getDisplayContent().getInsetsStateController().getControlsForDispatch(win); // We will leave the critical section before returning the leash to the client, // so we need to copy the leash to prevent others release the one that we are // about to return. outArray.set(controls, true /* copyControls */); win.fillInsetsSourceControls(outArray, true /* copyControls */); // This source control is an extra copy if the client is not local. By setting // PARCELABLE_WRITE_RETURN_VALUE, the leash will be released at the end of // SurfaceControl.writeToParcel. Loading
services/core/java/com/android/server/wm/WindowState.java +36 −16 Original line number Diff line number Diff line Loading @@ -434,7 +434,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP /** @see #isLastConfigReportedToClient() */ private boolean mLastConfigReportedToClient; // TODO(b/339380439): Ensure to use the same object for IWindowSession#relayout private final ClientWindowFrames mLastReportedFrames = new ClientWindowFrames(); private final InsetsState mLastReportedInsetsState = new InsetsState(); private final InsetsSourceControl.Array mLastReportedActiveControls = new InsetsSourceControl.Array(); Loading Loading @@ -495,8 +498,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP private final WindowFrames mWindowFrames = new WindowFrames(); private final ClientWindowFrames mClientWindowFrames = new ClientWindowFrames(); /** * List of rects where system gestures should be ignored. * Loading Loading @@ -3650,8 +3651,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP outFrames.attachedFrame.scale(mInvGlobalScale); } } outFrames.compatScale = getCompatScaleForClient(); if (mLastReportedFrames != outFrames) { mLastReportedFrames.setTo(outFrames); } // Note: in the cases where the window is tied to an activity, we should not send a // configuration update when the window has requested to be hidden. Doing so can lead to Loading @@ -3678,6 +3681,25 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mLastConfigReportedToClient = true; } void fillInsetsState(@NonNull InsetsState outInsetsState, boolean copySources) { outInsetsState.set(getCompatInsetsState(), copySources); if (outInsetsState != mLastReportedInsetsState) { // No need to copy for the recorded. mLastReportedInsetsState.set(outInsetsState, false /* copySources */); } } void fillInsetsSourceControls(@NonNull InsetsSourceControl.Array outArray, boolean copyControls) { final InsetsSourceControl[] controls = getDisplayContent().getInsetsStateController().getControlsForDispatch(this); outArray.set(controls, copyControls); if (outArray != mLastReportedActiveControls) { // No need to copy for the recorded. mLastReportedActiveControls.setTo(outArray, false /* copyControls */); } } void reportResized() { // If the activity is scheduled to relaunch, skip sending the resized to ViewRootImpl now // since it will be destroyed anyway. This also prevents the client from receiving Loading Loading @@ -3712,9 +3734,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP final int prevRotation = mLastReportedConfiguration .getMergedConfiguration().windowConfiguration.getRotation(); fillClientWindowFramesAndConfiguration(mClientWindowFrames, mLastReportedConfiguration, fillClientWindowFramesAndConfiguration(mLastReportedFrames, mLastReportedConfiguration, mLastReportedActivityWindowInfo, true /* useLatestConfig */, false /* relayoutVisible */); fillInsetsState(mLastReportedInsetsState, false /* copySources */); final boolean syncRedraw = shouldSendRedrawForSync(); final boolean syncWithBuffers = syncRedraw && shouldSyncWithBuffers(); final boolean reportDraw = syncRedraw || drawPending; Loading @@ -3734,8 +3757,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (Flags.bundleClientTransactionFlag()) { getProcess().scheduleClientTransactionItem( WindowStateResizeItem.obtain(mClient, mClientWindowFrames, reportDraw, mLastReportedConfiguration, getCompatInsetsState(), forceRelayout, WindowStateResizeItem.obtain(mClient, mLastReportedFrames, reportDraw, mLastReportedConfiguration, mLastReportedInsetsState, forceRelayout, alwaysConsumeSystemBars, displayId, syncWithBuffers ? mSyncSeqId : -1, isDragResizing, mLastReportedActivityWindowInfo)); Loading @@ -3743,8 +3766,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } else { // TODO(b/301870955): cleanup after launch try { mClient.resized(mClientWindowFrames, reportDraw, mLastReportedConfiguration, getCompatInsetsState(), forceRelayout, alwaysConsumeSystemBars, displayId, mClient.resized(mLastReportedFrames, reportDraw, mLastReportedConfiguration, mLastReportedInsetsState, forceRelayout, alwaysConsumeSystemBars, displayId, syncWithBuffers ? mSyncSeqId : -1, isDragResizing, mLastReportedActivityWindowInfo); onResizePostDispatched(drawPending, prevRotation, displayId); Loading Loading @@ -3817,17 +3840,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (mRemoved) { return; } final InsetsStateController stateController = getDisplayContent().getInsetsStateController(); final InsetsState insetsState = getCompatInsetsState(); mLastReportedActiveControls.set(stateController.getControlsForDispatch(this), false /* copyControls */); fillInsetsState(mLastReportedInsetsState, false /* copySources */); fillInsetsSourceControls(mLastReportedActiveControls, false /* copyControls */); if (Flags.insetsControlChangedItem()) { getProcess().scheduleClientTransactionItem(WindowStateInsetsControlChangeItem.obtain( mClient, insetsState, mLastReportedActiveControls)); mClient, mLastReportedInsetsState, mLastReportedActiveControls)); } else { try { mClient.insetsControlChanged(insetsState, mLastReportedActiveControls); mClient.insetsControlChanged(mLastReportedInsetsState, mLastReportedActiveControls); } catch (RemoteException e) { Slog.w(TAG, "Failed to deliver inset control state change to w=" + this, e); } Loading