diff options
| author | 2023-10-16 07:24:35 +0000 | |
|---|---|---|
| committer | 2023-10-16 07:24:35 +0000 | |
| commit | 740da9179139a3ec13299287121af3310c4e643c (patch) | |
| tree | e4149d36dcb762e9f89de9dd122ae00e606c5f2f | |
| parent | d64b75d565d7430e856cd5c563193c7decec80d8 (diff) | |
| parent | 08ad2e5d947dfab0db01fff620fd73f43835b5a3 (diff) | |
Merge "Reduce unnecessary surface operation of setting trusted overlay" into main
4 files changed, 22 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java index c21930dab5eb..1fa7d2a2aa13 100644 --- a/services/core/java/com/android/server/wm/InputConsumerImpl.java +++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java @@ -51,7 +51,8 @@ class InputConsumerImpl implements IBinder.DeathRecipient { private final Rect mOldWindowCrop = new Rect(); InputConsumerImpl(WindowManagerService service, IBinder token, String name, - InputChannel inputChannel, int clientPid, UserHandle clientUser, int displayId) { + InputChannel inputChannel, int clientPid, UserHandle clientUser, int displayId, + SurfaceControl.Transaction t) { mService = service; mToken = token; mName = name; @@ -82,6 +83,7 @@ class InputConsumerImpl implements IBinder.DeathRecipient { .setName("Input Consumer " + name) .setCallsite("InputConsumerImpl") .build(); + mWindowHandle.setTrustedOverlay(t, mInputSurface, true); } void linkToDeathRecipient() { @@ -129,14 +131,12 @@ class InputConsumerImpl implements IBinder.DeathRecipient { void show(SurfaceControl.Transaction t, WindowContainer w) { t.show(mInputSurface); - mWindowHandle.setTrustedOverlay(t, mInputSurface, true); t.setInputWindowInfo(mInputSurface, mWindowHandle); t.setRelativeLayer(mInputSurface, w.getSurfaceControl(), 1); } void show(SurfaceControl.Transaction t, int layer) { t.show(mInputSurface); - mWindowHandle.setTrustedOverlay(t, mInputSurface, true); t.setInputWindowInfo(mInputSurface, mWindowHandle); t.setLayer(mInputSurface, layer); } diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index af307ec3c2a9..5c0bc28779a8 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -224,7 +224,7 @@ final class InputMonitor { } final InputConsumerImpl consumer = new InputConsumerImpl(mService, token, name, - inputChannel, clientPid, clientUser, mDisplayId); + inputChannel, clientPid, clientUser, mDisplayId, mInputTransaction); switch (name) { case INPUT_CONSUMER_WALLPAPER: consumer.mWindowHandle.inputConfig |= InputConfig.DUPLICATE_TOUCH_TO_WALLPAPER; @@ -675,11 +675,6 @@ final class InputMonitor { w.getKeyInterceptionInfo()); if (w.mWinAnimator.hasSurface()) { - // Update trusted overlay changes here because they are tied to input info. Input - // changes can be updated even if surfaces aren't. - inputWindowHandle.setTrustedOverlay(mInputTransaction, - w.mWinAnimator.mSurfaceController.mSurfaceControl, - w.isWindowTrustedOverlay()); populateInputWindowHandle(inputWindowHandle, w); setInputWindowInfoIfNeeded(mInputTransaction, w.mWinAnimator.mSurfaceController.mSurfaceControl, inputWindowHandle); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index f339d249e272..405f1579481a 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2261,6 +2261,7 @@ public class WindowManagerService extends IWindowManager.Stub } } + final boolean wasTrustedOverlay = win.isWindowTrustedOverlay(); flagChanges = win.mAttrs.flags ^ attrs.flags; privateFlagChanges = win.mAttrs.privateFlags ^ attrs.privateFlags; attrChanges = win.mAttrs.copyFrom(attrs); @@ -2273,6 +2274,9 @@ public class WindowManagerService extends IWindowManager.Stub if (layoutChanged && win.providesDisplayDecorInsets()) { configChanged = displayPolicy.updateDecorInsetsInfo(); } + if (wasTrustedOverlay != win.isWindowTrustedOverlay()) { + win.updateTrustedOverlay(); + } if (win.mActivityRecord != null && ((flagChanges & FLAG_SHOW_WHEN_LOCKED) != 0 || (flagChanges & FLAG_DISMISS_KEYGUARD) != 0)) { win.mActivityRecord.checkKeyguardFlagsChanged(); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 726d4d7c34e7..87312a37743d 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1189,7 +1189,20 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } - public boolean isWindowTrustedOverlay() { + @Override + void setInitialSurfaceControlProperties(SurfaceControl.Builder b) { + super.setInitialSurfaceControlProperties(b); + if (surfaceTrustedOverlay() && isWindowTrustedOverlay()) { + getPendingTransaction().setTrustedOverlay(mSurfaceControl, true); + } + } + + void updateTrustedOverlay() { + mInputWindowHandle.setTrustedOverlay(getPendingTransaction(), mSurfaceControl, + isWindowTrustedOverlay()); + } + + boolean isWindowTrustedOverlay() { return InputMonitor.isTrustedOverlay(mAttrs.type) || ((mAttrs.privateFlags & PRIVATE_FLAG_TRUSTED_OVERLAY) != 0 && mSession.mCanAddInternalSystemWindow) @@ -5205,9 +5218,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP updateFrameRateSelectionPriorityIfNeeded(); updateScaleIfNeeded(); mWinAnimator.prepareSurfaceLocked(getSyncTransaction()); - if (surfaceTrustedOverlay()) { - getSyncTransaction().setTrustedOverlay(mSurfaceControl, isWindowTrustedOverlay()); - } } super.prepareSurfaces(); } |