summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2023-10-16 07:24:35 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-10-16 07:24:35 +0000
commit740da9179139a3ec13299287121af3310c4e643c (patch)
treee4149d36dcb762e9f89de9dd122ae00e606c5f2f
parentd64b75d565d7430e856cd5c563193c7decec80d8 (diff)
parent08ad2e5d947dfab0db01fff620fd73f43835b5a3 (diff)
Merge "Reduce unnecessary surface operation of setting trusted overlay" into main
-rw-r--r--services/core/java/com/android/server/wm/InputConsumerImpl.java6
-rw-r--r--services/core/java/com/android/server/wm/InputMonitor.java7
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java4
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java18
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();
}