Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df407d1d authored by Jacky Kao's avatar Jacky Kao
Browse files

Revert "Apply display transform to window bounds and node bounds"

Revert submission 16249364-Surface Flinger

Reason for revert: Large increase (~200%) in system_server memory usage (b/214255324)
Reverted Changes:
I14c5e9889:Apply display transform to window bounds and node ...
I0ac0d0487:Use shellRoot to identify PIP menu window
I83e898d91:Uses SF callback windows for the A11yWindowInfo [2...
I94d7ed4fb:Uses SF callback windows for the A11yWindowInfo [1...

Change-Id: If4c4baeb0f8604d225e1cfab0cec486bb3395d64
parent 3b328cce
Loading
Loading
Loading
Loading
+12 −36
Original line number Diff line number Diff line
@@ -67,8 +67,6 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
    @GuardedBy("mLock")
    private final SparseArray<Matrix> mMagnificationSpecInverseMatrix = new SparseArray<>();
    @GuardedBy("mLock")
    private final SparseArray<DisplayInfo> mDisplayInfos = new SparseArray<>();
    @GuardedBy("mLock")
    private final List<InputWindowHandle> mVisibleWindows = new ArrayList<>();
    @GuardedBy("mLock")
    private boolean mWindowsNotificationEnabled = false;
@@ -95,7 +93,6 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
            List<AccessibilityWindow> outWindows) {
        List<InputWindowHandle> inputWindowHandles;
        final Matrix inverseMatrix = new Matrix();
        final Matrix displayMatrix = new Matrix();

        synchronized (mLock) {
            inputWindowHandles = mInputWindowHandlesOnDisplays.get(displayId);
@@ -104,34 +101,25 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {

                return;
            }
            inverseMatrix.set(mMagnificationSpecInverseMatrix.get(displayId));

            final DisplayInfo displayInfo = mDisplayInfos.get(displayId);
            if (displayInfo != null) {
                displayMatrix.set(displayInfo.mTransform);
            } else {
                Slog.w(TAG, "The displayInfo of this displayId (" + displayId + ") called "
                        + "back from the surface fligner is null");
            }
            inverseMatrix.set(mMagnificationSpecInverseMatrix.get(displayId));
        }

        final DisplayContent dc = mService.mRoot.getDisplayContent(displayId);
        final ShellRoot shellroot = dc.mShellRoots.get(WindowManager.SHELL_ROOT_LAYER_PIP);
        final IBinder pipMenuIBinder =
                shellroot != null ? shellroot.getAccessibilityWindowToken() : null;

        for (final InputWindowHandle windowHandle : inputWindowHandles) {
            final AccessibilityWindow accessibilityWindow =
                    AccessibilityWindow.initializeData(mService, windowHandle, inverseMatrix,
                            pipMenuIBinder, displayMatrix);
                            pipMenuIBinder);

            outWindows.add(accessibilityWindow);
        }
    }

    @Override
    public void onWindowInfosChanged(InputWindowHandle[] windowHandles,
            DisplayInfo[] displayInfos) {
    public void onWindowInfosChanged(InputWindowHandle[] windowHandles) {
        synchronized (mLock) {
            mVisibleWindows.clear();
            for (InputWindowHandle window : windowHandles) {
@@ -139,12 +127,6 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
                    mVisibleWindows.add(window);
                }
            }

            mDisplayInfos.clear();
            for (final DisplayInfo displayInfo : displayInfos) {
                mDisplayInfos.put(displayInfo.mDisplayId, displayInfo);
            }

            if (mWindowsNotificationEnabled) {
                if (!mHandler.hasMessages(
                        MyHandler.MESSAGE_NOTIFY_WINDOWS_CHANGED_BY_TIMEOUT)) {
@@ -308,7 +290,6 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
        mInputWindowHandlesOnDisplays.clear();
        mMagnificationSpecInverseMatrix.clear();
        mVisibleWindows.clear();
        mDisplayInfos.clear();
        mWindowsNotificationEnabled = false;
        mHandler.removeCallbacksAndMessages(null);
    }
@@ -376,8 +357,7 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
         * @param inverseMatrix The magnification spec inverse matrix.
         */
        public static AccessibilityWindow initializeData(WindowManagerService service,
                InputWindowHandle inputWindowHandle, Matrix inverseMatrix, IBinder pipIBinder,
                Matrix displayMatrix) {
                InputWindowHandle inputWindowHandle, Matrix inverseMatrix, IBinder pipIBinder) {
            final IWindow window = inputWindowHandle.getWindow();
            final WindowState windowState = window != null ? service.mWindowMap.get(
                    window.asBinder()) : null;
@@ -410,10 +390,10 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
                    inputWindowHandle.frameTop, inputWindowHandle.frameRight,
                    inputWindowHandle.frameBottom);
            getTouchableRegionInWindow(instance.mShouldMagnify, inputWindowHandle.touchableRegion,
                    instance.mTouchableRegionInWindow, windowFrame, inverseMatrix, displayMatrix);
                    instance.mTouchableRegionInWindow, windowFrame, inverseMatrix);
            getUnMagnifiedTouchableRegion(instance.mShouldMagnify,
                    inputWindowHandle.touchableRegion, instance.mTouchableRegionInScreen,
                    inverseMatrix, displayMatrix);
                    inverseMatrix);
            instance.mWindowInfo = windowState != null
                    ? windowState.getWindowInfo() : getWindowInfoForWindowlessWindows(instance);

@@ -527,7 +507,7 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
        }

        private static void getTouchableRegionInWindow(boolean shouldMagnify, Region inRegion,
                Region outRegion, Rect frame, Matrix inverseMatrix, Matrix displayMatrix) {
                Region outRegion, Rect frame, Matrix inverseMatrix) {
            // Some modal windows, like the activity with Theme.dialog, has the full screen
            // as its touchable region, but its window frame is smaller than the touchable
            // region. The region we report should be the touchable area in the window frame
@@ -538,8 +518,7 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
            touchRegion.set(inRegion);
            touchRegion.op(frame, Region.Op.INTERSECT);

            getUnMagnifiedTouchableRegion(shouldMagnify, touchRegion, outRegion, inverseMatrix,
                    displayMatrix);
            getUnMagnifiedTouchableRegion(shouldMagnify, touchRegion, outRegion, inverseMatrix);
        }

        /**
@@ -550,12 +529,10 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
         * @param inRegion The touchable region of this window.
         * @param outRegion The un-magnified touchable region of this window.
         * @param inverseMatrix The inverse matrix of the magnification spec.
         * @param displayMatrix The display transform matrix which takes display coordinates to
         *                      logical display coordinates.
         */
        private static void getUnMagnifiedTouchableRegion(boolean shouldMagnify, Region inRegion,
                Region outRegion, Matrix inverseMatrix, Matrix displayMatrix) {
            if ((!shouldMagnify || inverseMatrix.isIdentity()) && displayMatrix.isIdentity()) {
                Region outRegion, Matrix inverseMatrix) {
            if (!shouldMagnify || inverseMatrix.isIdentity()) {
                outRegion.set(inRegion);
                return;
            }
@@ -566,7 +543,6 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
                windowFrame.set(rect);

                inverseMatrix.mapRect(windowFrame);
                displayMatrix.mapRect(windowFrame);
                // Union all rects.
                outRegion.union(new Rect((int) windowFrame.left, (int) windowFrame.top,
                        (int) windowFrame.right, (int) windowFrame.bottom));
@@ -609,9 +585,9 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener {
                    + ", type=" + mType
                    + ", privateFlag=0x" + Integer.toHexString(mPrivateFlags)
                    + ", focused=" + mIsFocused
                    + ", shouldMagnify=" + mShouldMagnify
                    + ", mShouldMagnify=" + mShouldMagnify
                    + ", ignoreDuetoRecentsAnimation=" + mIgnoreDuetoRecentsAnimation
                    + ", isTrustedOverlay=" + mIsTrustedOverlay
                    + ", mIsTrustedOverlay=" + mIsTrustedOverlay
                    + ", regionInScreen=" + mTouchableRegionInScreen
                    + ", touchableRegion=" + mTouchableRegionInWindow
                    + ", letterBoxBounds=" + mLetterBoxBounds