From 4f58dc16bfc9c3a17594285b751c841a59a19e8a Mon Sep 17 00:00:00 2001 From: Brett Chabot Date: Thu, 25 Aug 2022 14:34:42 -0700 Subject: [PATCH] Fix input when hardware renderer drawing is disabled. When drawing is disabled the window's layer won't have a valid buffer. This causes surfaceflinger to set the window's touchableRegion to zero. This commit sets a window crop when drawing is disabled, so surfaceflinger set touchableregion from crop instead of buffer. And it modifies LetterboxUiController to not reset the crop. Test: cts and perf tests as documented in go/android-slimulator-dev-env Bug: 229870984 (cherry picked from commit 32dfc9838243cb1a20f2262864fb884b536eb58e) Merged-In: I4d6ca513c3daf5818ded03eae00e551fc319ad69 Change-Id: Ic8e1b17af825951505d448509530edf3ea81af5b --- core/java/android/view/ViewRootImpl.java | 7 +++++++ .../java/com/android/server/wm/LetterboxUiController.java | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index ec6b4acd6aff5..96e910c8305a6 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -8152,6 +8152,7 @@ public final class ViewRootImpl implements ViewParent, mLastSyncSeqId, mTmpFrames, mPendingMergedConfiguration, mSurfaceControl, mTempInsets, mTempControls, mRelayoutBundle); mRelayoutRequested = true; + final int maybeSyncSeqId = mRelayoutBundle.getInt("seqid"); if (maybeSyncSeqId > 0) { mSyncSeqId = maybeSyncSeqId; @@ -8191,6 +8192,12 @@ public final class ViewRootImpl implements ViewParent, } } + if (mSurfaceControl.isValid() && !HardwareRenderer.isDrawingEnabled()) { + // When drawing is disabled the window layer won't have a valid buffer. + // Set a window crop so input can get delivered to the window. + mTransaction.setWindowCrop(mSurfaceControl, mSurfaceSize.x, mSurfaceSize.y).apply(); + } + mLastTransformHint = transformHint; mSurfaceControl.setTransformHint(transformHint); diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java index 317c93e634593..ea82417a2389b 100644 --- a/services/core/java/com/android/server/wm/LetterboxUiController.java +++ b/services/core/java/com/android/server/wm/LetterboxUiController.java @@ -481,7 +481,7 @@ final class LetterboxUiController { } private void updateRoundedCorners(WindowState mainWindow) { - final SurfaceControl windowSurface = mainWindow.getClientViewRootSurface(); + final SurfaceControl windowSurface = mainWindow.getSurfaceControl(); if (windowSurface != null && windowSurface.isValid()) { final Transaction transaction = mActivityRecord.getSyncTransaction();