From 9686160be0521e7f445f7fb09aef99c6e48d44f7 Mon Sep 17 00:00:00 2001 From: ryanlwlin Date: Thu, 28 Jul 2022 23:27:24 +0800 Subject: [PATCH] Fix PerfUnitTest Regression We send the accessibilityWindowAttribute while inputmethod window changes the layout to full-screen mode, which could slow the the performance. To fixt it, we cache the attributes in ViewRootImpl to avoid unncessary IPC connection Bug: 239288414 Test: use forrest to rerun the test Change-Id: I158236d79df51678fd168dc988fe565793ef4a09 --- core/java/android/view/ViewRootImpl.java | 11 +++++++++-- .../accessibility/AccessibilityWindowManager.java | 7 ++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index c1a5a3a256806..6ffe4d398c460 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -846,6 +846,8 @@ public final class ViewRootImpl implements ViewParent, private int mLastTransformHint = Integer.MIN_VALUE; + private AccessibilityWindowAttributes mAccessibilityWindowAttributes; + /** * A temporary object used so relayoutWindow can return the latest SyncSeqId * system. The SyncSeqId system was designed to work without synchronous relayout @@ -1397,8 +1399,12 @@ public final class ViewRootImpl implements ViewParent, if (registered) { final AccessibilityWindowAttributes attributes = new AccessibilityWindowAttributes( mWindowAttributes); - mAccessibilityManager.setAccessibilityWindowAttributes(getDisplayId(), - mAttachInfo.mAccessibilityWindowId, attributes); + if (!attributes.equals(mAccessibilityWindowAttributes)) { + mAccessibilityWindowAttributes = attributes; + mAccessibilityManager.setAccessibilityWindowAttributes(getDisplayId(), + mAttachInfo.mAccessibilityWindowId, attributes); + } + } } @@ -10345,6 +10351,7 @@ public final class ViewRootImpl implements ViewParent, != AccessibilityWindowInfo.UNDEFINED_WINDOW_ID; if (registered) { mAttachInfo.mAccessibilityWindowId = AccessibilityWindowInfo.UNDEFINED_WINDOW_ID; + mAccessibilityWindowAttributes = null; mAccessibilityManager.removeAccessibilityInteractionConnection(mWindow); } } diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java index 676bde7ed00f2..d33e7b2e4d873 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java @@ -146,11 +146,8 @@ public class AccessibilityWindowManager { if (getWindowTokenForUserAndWindowIdLocked(resolvedUserId, windowId) == null) { return; } - final AccessibilityWindowAttributes currentAttrs = mWindowAttributes.get(windowId); - if (currentAttrs == null || !currentAttrs.equals(attributes)) { - mWindowAttributes.put(windowId, attributes); - shouldComputeWindows = findWindowInfoByIdLocked(windowId) != null; - } + mWindowAttributes.put(windowId, attributes); + shouldComputeWindows = findWindowInfoByIdLocked(windowId) != null; } if (shouldComputeWindows) { mWindowManagerInternal.computeWindowsForAccessibility(displayId);