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
This commit is contained in:
ryanlwlin
2022-07-28 23:27:24 +08:00
parent 563b92d6c6
commit 9686160be0
2 changed files with 11 additions and 7 deletions

View File

@@ -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);
}
}

View File

@@ -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);