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

Commit 608797e2 authored by Filip Gruszczynski's avatar Filip Gruszczynski
Browse files

Remove unnecessary DisplayContent.mDisplaySizeLock synchronization.

All operations are performed with WindowManagerService.mWindowMap lock
held, therefore the second lock is not necessary.

Change-Id: I762fb322ddeb8b45191a3d297de0d33a10674f8a
parent c89cc441
Loading
Loading
Loading
Loading
+9 −22
Original line number Diff line number Diff line
@@ -55,17 +55,6 @@ class DisplayContent {
     * from mDisplayWindows; */
    private final WindowList mWindows = new WindowList();

    // This protects the following display size properties, so that
    // getDisplaySize() doesn't need to acquire the global lock.  This is
    // needed because the window manager sometimes needs to use ActivityThread
    // while it has its global state locked (for example to load animation
    // resources), but the ActivityThread also needs get the current display
    // size sometimes when it has its package lock held.
    //
    // These will only be modified with both mWindowMap and mDisplaySizeLock
    // held (in that order) so the window manager doesn't need to acquire this
    // lock when needing these values in its normal operation.
    final Object mDisplaySizeLock = new Object();
    int mInitialDisplayWidth = 0;
    int mInitialDisplayHeight = 0;
    int mInitialDisplayDensity = 0;
@@ -202,7 +191,6 @@ class DisplayContent {
    }

    void initializeDisplayBaseInfo() {
        synchronized(mDisplaySizeLock) {
        // Bootstrap the default logical display from the display manager.
        final DisplayInfo newDisplayInfo =
                mService.mDisplayManagerInternal.getDisplayInfo(mDisplayId);
@@ -214,7 +202,6 @@ class DisplayContent {
        mBaseDisplayDensity = mInitialDisplayDensity = mDisplayInfo.logicalDensityDpi;
        mBaseDisplayRect.set(0, 0, mBaseDisplayWidth, mBaseDisplayHeight);
    }
    }

    void getLogicalDisplayRect(Rect out) {
        // Uses same calculation as in LogicalDisplay#configureDisplayInTransactionLocked.
+47 −78
Original line number Diff line number Diff line
@@ -6908,7 +6908,6 @@ public class WindowManagerService extends IWindowManager.Stub
        final int appWidth = mPolicy.getNonDecorDisplayWidth(dw, dh, mRotation);
        final int appHeight = mPolicy.getNonDecorDisplayHeight(dw, dh, mRotation);
        final DisplayInfo displayInfo = displayContent.getDisplayInfo();
        synchronized(displayContent.mDisplaySizeLock) {
        displayInfo.rotation = mRotation;
        displayInfo.logicalWidth = dw;
        displayInfo.logicalHeight = dh;
@@ -6928,7 +6927,6 @@ public class WindowManagerService extends IWindowManager.Stub
                displayContent.getDisplayId(), displayInfo);

        displayContent.mBaseDisplayRect.set(0, 0, dw, dh);
        }
        if (false) {
            Slog.i(TAG, "Set app display size: " + appWidth + " x " + appHeight);
        }
@@ -8060,26 +8058,22 @@ public class WindowManagerService extends IWindowManager.Stub
        synchronized (mWindowMap) {
            final DisplayContent displayContent = getDisplayContentLocked(displayId);
            if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) {
                synchronized(displayContent.mDisplaySizeLock) {
                size.x = displayContent.mInitialDisplayWidth;
                size.y = displayContent.mInitialDisplayHeight;
            }
        }
    }
    }

    @Override
    public void getBaseDisplaySize(int displayId, Point size) {
        synchronized (mWindowMap) {
            final DisplayContent displayContent = getDisplayContentLocked(displayId);
            if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) {
                synchronized(displayContent.mDisplaySizeLock) {
                size.x = displayContent.mBaseDisplayWidth;
                size.y = displayContent.mBaseDisplayHeight;
            }
        }
    }
    }

    @Override
    public void setForcedDisplaySize(int displayId, int width, int height) {
@@ -8145,13 +8139,9 @@ public class WindowManagerService extends IWindowManager.Stub
        }
    }

    private void setForcedDisplayScalingModeLocked(DisplayContent displayContent,
            int mode) {
    private void setForcedDisplayScalingModeLocked(DisplayContent displayContent, int mode) {
        Slog.i(TAG, "Using display scaling mode: " + (mode == 0 ? "auto" : "off"));

        synchronized(displayContent.mDisplaySizeLock) {
        displayContent.mDisplayScalingDisabled = (mode != 0);
        }
        reconfigureDisplayLocked(displayContent);
    }

@@ -8169,14 +8159,12 @@ public class WindowManagerService extends IWindowManager.Stub
                try {
                    width = Integer.parseInt(sizeStr.substring(0, pos));
                    height = Integer.parseInt(sizeStr.substring(pos+1));
                    synchronized(displayContent.mDisplaySizeLock) {
                    if (displayContent.mBaseDisplayWidth != width
                            || displayContent.mBaseDisplayHeight != height) {
                        Slog.i(TAG, "FORCED DISPLAY SIZE: " + width + "x" + height);
                        displayContent.mBaseDisplayWidth = width;
                        displayContent.mBaseDisplayHeight = height;
                    }
                    }
                } catch (NumberFormatException ex) {
                }
            }
@@ -8192,12 +8180,10 @@ public class WindowManagerService extends IWindowManager.Stub
            int density;
            try {
                density = Integer.parseInt(densityStr);
                synchronized(displayContent.mDisplaySizeLock) {
                if (displayContent.mBaseDisplayDensity != density) {
                    Slog.i(TAG, "FORCED DISPLAY DENSITY: " + density);
                    displayContent.mBaseDisplayDensity = density;
                }
                }
            } catch (NumberFormatException ex) {
            }
        }
@@ -8206,21 +8192,16 @@ public class WindowManagerService extends IWindowManager.Stub
        int mode = Settings.Global.getInt(mContext.getContentResolver(),
                Settings.Global.DISPLAY_SCALING_FORCE, 0);
        if (mode != 0) {
            synchronized(displayContent.mDisplaySizeLock) {
            Slog.i(TAG, "FORCED DISPLAY SCALING DISABLED");
            displayContent.mDisplayScalingDisabled = true;
        }
    }
    }

    // displayContent must not be null
    private void setForcedDisplaySizeLocked(DisplayContent displayContent, int width, int height) {
        Slog.i(TAG, "Using new display size: " + width + "x" + height);

        synchronized(displayContent.mDisplaySizeLock) {
        displayContent.mBaseDisplayWidth = width;
        displayContent.mBaseDisplayHeight = height;
        }
        reconfigureDisplayLocked(displayContent);
    }

@@ -8256,11 +8237,9 @@ public class WindowManagerService extends IWindowManager.Stub
        synchronized (mWindowMap) {
            final DisplayContent displayContent = getDisplayContentLocked(displayId);
            if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) {
                synchronized(displayContent.mDisplaySizeLock) {
                return displayContent.mInitialDisplayDensity;
            }
        }
        }
        return -1;
    }

@@ -8269,11 +8248,9 @@ public class WindowManagerService extends IWindowManager.Stub
        synchronized (mWindowMap) {
            final DisplayContent displayContent = getDisplayContentLocked(displayId);
            if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) {
                synchronized(displayContent.mDisplaySizeLock) {
                return displayContent.mBaseDisplayDensity;
            }
        }
        }
        return -1;
    }

@@ -8306,10 +8283,7 @@ public class WindowManagerService extends IWindowManager.Stub
    // displayContent must not be null
    private void setForcedDisplayDensityLocked(DisplayContent displayContent, int density) {
        Slog.i(TAG, "Using new display density: " + density);

        synchronized(displayContent.mDisplaySizeLock) {
        displayContent.mBaseDisplayDensity = density;
        }
        reconfigureDisplayLocked(displayContent);
    }

@@ -8400,12 +8374,10 @@ public class WindowManagerService extends IWindowManager.Stub
    private void setOverscanLocked(DisplayContent displayContent,
            int left, int top, int right, int bottom) {
        final DisplayInfo displayInfo = displayContent.getDisplayInfo();
        synchronized (displayContent.mDisplaySizeLock) {
        displayInfo.overscanLeft = left;
        displayInfo.overscanTop = top;
        displayInfo.overscanRight = right;
        displayInfo.overscanBottom = bottom;
        }

        mDisplaySettings.setOverscanLocked(displayInfo.uniqueId, displayInfo.name, left, top,
                right, bottom);
@@ -9992,14 +9964,11 @@ public class WindowManagerService extends IWindowManager.Stub
        DisplayInfo displayInfo = displayContent.getDisplayInfo();
        final Rect rect = new Rect();
        mDisplaySettings.getOverscanLocked(displayInfo.name, displayInfo.uniqueId, rect);
        synchronized (displayContent.mDisplaySizeLock) {
        displayInfo.overscanLeft = rect.left;
        displayInfo.overscanTop = rect.top;
        displayInfo.overscanRight = rect.right;
        displayInfo.overscanBottom = rect.bottom;
            mDisplayManagerInternal.setDisplayInfoOverrideFromWindowManager(
                    displayId, displayInfo);
        }
        mDisplayManagerInternal.setDisplayInfoOverrideFromWindowManager(displayId, displayInfo);
        configureDisplayPolicyLocked(displayContent);

        // TODO: Create an input channel for each display with touch capability.