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

Commit 86b3de44 authored by Liana Kazanova's avatar Liana Kazanova
Browse files

Revert "LogicalDisplay.updateLayoutLimitedRefreshRateLocked and...

Revert "LogicalDisplay.updateLayoutLimitedRefreshRateLocked and updateRefreshRateThermalThrottling shouldn't update display info directly"

This reverts commit f508b150.

Reason for revert: b/279158540, b/279145472

Change-Id: Ia8efedab3a83f17320a2e077bb521fb5933a5a73
parent f508b150
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
@@ -341,9 +341,6 @@ public final class DisplayInfo implements Parcelable {
    @Nullable
    public DisplayShape displayShape;

    /**
     * Refresh rate range limitation based on the current device layout
     */
    @Nullable
    public SurfaceControl.RefreshRateRange layoutLimitedRefreshRate;

@@ -357,7 +354,7 @@ public final class DisplayInfo implements Parcelable {
     * RefreshRateRange limitation for @Temperature.ThrottlingStatus
     */
    @NonNull
    public SparseArray<SurfaceControl.RefreshRateRange> thermalRefreshRateThrottling =
    public SparseArray<SurfaceControl.RefreshRateRange> refreshRateThermalThrottling =
            new SparseArray<>();

    public static final @android.annotation.NonNull Creator<DisplayInfo> CREATOR = new Creator<DisplayInfo>() {
@@ -437,7 +434,7 @@ public final class DisplayInfo implements Parcelable {
                && Objects.equals(displayShape, other.displayShape)
                && Objects.equals(layoutLimitedRefreshRate, other.layoutLimitedRefreshRate)
                && BrightnessSynchronizer.floatEquals(hdrSdrRatio, other.hdrSdrRatio)
                && thermalRefreshRateThrottling.contentEquals(other.thermalRefreshRateThrottling);
                && refreshRateThermalThrottling.contentEquals(other.refreshRateThermalThrottling);
    }

    @Override
@@ -494,7 +491,7 @@ public final class DisplayInfo implements Parcelable {
        displayShape = other.displayShape;
        layoutLimitedRefreshRate = other.layoutLimitedRefreshRate;
        hdrSdrRatio = other.hdrSdrRatio;
        thermalRefreshRateThrottling = other.thermalRefreshRateThrottling;
        refreshRateThermalThrottling = other.refreshRateThermalThrottling;
    }

    public void readFromParcel(Parcel source) {
@@ -557,7 +554,7 @@ public final class DisplayInfo implements Parcelable {
        displayShape = source.readTypedObject(DisplayShape.CREATOR);
        layoutLimitedRefreshRate = source.readTypedObject(SurfaceControl.RefreshRateRange.CREATOR);
        hdrSdrRatio = source.readFloat();
        thermalRefreshRateThrottling = source.readSparseArray(null,
        refreshRateThermalThrottling = source.readSparseArray(null,
                SurfaceControl.RefreshRateRange.class);
    }

@@ -619,7 +616,7 @@ public final class DisplayInfo implements Parcelable {
        dest.writeTypedObject(displayShape, flags);
        dest.writeTypedObject(layoutLimitedRefreshRate, flags);
        dest.writeFloat(hdrSdrRatio);
        dest.writeSparseArray(thermalRefreshRateThrottling);
        dest.writeSparseArray(refreshRateThermalThrottling);
    }

    @Override
@@ -887,8 +884,8 @@ public final class DisplayInfo implements Parcelable {
        } else {
            sb.append(hdrSdrRatio);
        }
        sb.append(", thermalRefreshRateThrottling ");
        sb.append(thermalRefreshRateThrottling);
        sb.append(", refreshRateThermalThrottling ");
        sb.append(refreshRateThermalThrottling);
        sb.append("}");
        return sb.toString();
    }
+8 −26
Original line number Diff line number Diff line
@@ -181,19 +181,6 @@ final class LogicalDisplay {
     */
    private String mThermalBrightnessThrottlingDataId;

    /**
     * Refresh rate range limitation based on the current device layout
     */
    @Nullable
    private SurfaceControl.RefreshRateRange mLayoutLimitedRefreshRate;

    /**
     * RefreshRateRange limitation for @Temperature.ThrottlingStatus
     */
    @NonNull
    private SparseArray<SurfaceControl.RefreshRateRange> mThermalRefreshRateThrottling =
            new SparseArray<>();

    public LogicalDisplay(int displayId, int layerStack, DisplayDevice primaryDisplayDevice) {
        mDisplayId = displayId;
        mLayerStack = layerStack;
@@ -352,24 +339,24 @@ final class LogicalDisplay {
     */
    public void updateLayoutLimitedRefreshRateLocked(
            @Nullable SurfaceControl.RefreshRateRange layoutLimitedRefreshRate) {
        if (!Objects.equals(layoutLimitedRefreshRate, mLayoutLimitedRefreshRate)) {
            mLayoutLimitedRefreshRate = layoutLimitedRefreshRate;
            mDirty = true;
        if (!Objects.equals(layoutLimitedRefreshRate, mBaseDisplayInfo.layoutLimitedRefreshRate)) {
            mBaseDisplayInfo.layoutLimitedRefreshRate = layoutLimitedRefreshRate;
            mInfo.set(null);
        }
    }
    /**
     * Updates thermalRefreshRateThrottling
     * Updates refreshRateThermalThrottling
     *
     * @param refreshRanges new thermalRefreshRateThrottling ranges limited by layout or default
     * @param refreshRanges new refreshRateThermalThrottling ranges limited by layout or default
     */
    public void updateThermalRefreshRateThrottling(
            @Nullable SparseArray<SurfaceControl.RefreshRateRange> refreshRanges) {
        if (refreshRanges == null) {
            refreshRanges = new SparseArray<>();
        }
        if (!mThermalRefreshRateThrottling.contentEquals(refreshRanges)) {
            mThermalRefreshRateThrottling = refreshRanges;
            mDirty = true;
        if (!mBaseDisplayInfo.refreshRateThermalThrottling.contentEquals(refreshRanges)) {
            mBaseDisplayInfo.refreshRateThermalThrottling = refreshRanges;
            mInfo.set(null);
        }
    }

@@ -512,9 +499,6 @@ final class LogicalDisplay {
                mBaseDisplayInfo.removeMode = Display.REMOVE_MODE_DESTROY_CONTENT;
            }

            mBaseDisplayInfo.layoutLimitedRefreshRate = mLayoutLimitedRefreshRate;
            mBaseDisplayInfo.thermalRefreshRateThrottling = mThermalRefreshRateThrottling;

            mPrimaryDisplayDeviceInfo = deviceInfo;
            mInfo.set(null);
            mDirty = false;
@@ -968,8 +952,6 @@ final class LogicalDisplay {
        pw.println("mDisplayGroupName=" + mDisplayGroupName);
        pw.println("mThermalBrightnessThrottlingDataId=" + mThermalBrightnessThrottlingDataId);
        pw.println("mLeadDisplayId=" + mLeadDisplayId);
        pw.println("mLayoutLimitedRefreshRate=" + mLayoutLimitedRefreshRate);
        pw.println("mThermalRefreshRateThrottling=" + mThermalRefreshRateThrottling);
    }

    @Override
+23 −30
Original line number Diff line number Diff line
@@ -1708,13 +1708,14 @@ public class DisplayModeDirector {
        }

        public void observe() {
            mInjector.registerDisplayListener(this, mHandler);
            DisplayManager dm = mContext.getSystemService(DisplayManager.class);
            dm.registerDisplayListener(this, mHandler);

            // Populate existing displays
            SparseArray<Display.Mode[]> modes = new SparseArray<>();
            SparseArray<Display.Mode> defaultModes = new SparseArray<>();
            DisplayInfo info = new DisplayInfo();
            Display[] displays = mInjector.getDisplays();
            Display[] displays = dm.getDisplays(DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED);
            for (Display d : displays) {
                final int displayId = d.getDisplayId();
                d.getDisplayInfo(info);
@@ -1753,9 +1754,17 @@ public class DisplayModeDirector {
            updateLayoutLimitedFrameRate(displayId, displayInfo);
        }

        @Nullable
        private DisplayInfo getDisplayInfo(int displayId) {
            Display d = mContext.getSystemService(DisplayManager.class).getDisplay(displayId);
            if (d == null) {
                // We can occasionally get a display added or changed event for a display that was
                // subsequently removed, which means this returns null. Check this case and bail
                // out early; if it gets re-attached we'll eventually get another call back for it.
                return null;
            }
            DisplayInfo info = new DisplayInfo();
            mInjector.getDisplayInfo(displayId, info);
            d.getDisplayInfo(info);
            return info;
        }

@@ -2426,7 +2435,8 @@ public class DisplayModeDirector {
        }

        private void updateDefaultDisplayState() {
            Display display = mInjector.getDisplay(Display.DEFAULT_DISPLAY);
            Display display = mContext.getSystemService(DisplayManager.class)
                    .getDisplay(Display.DEFAULT_DISPLAY);
            if (display == null) {
                return;
            }
@@ -2743,7 +2753,8 @@ public class DisplayModeDirector {
            sensorManager.addProximityActiveListener(BackgroundThread.getExecutor(), this);

            synchronized (mSensorObserverLock) {
                for (Display d : mInjector.getDisplays()) {
                for (Display d : mDisplayManager.getDisplays(
                        DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED)) {
                    mDozeStateByDisplay.put(d.getDisplayId(), mInjector.isDozeState(d));
                }
            }
@@ -2754,7 +2765,8 @@ public class DisplayModeDirector {
        }

        private void recalculateVotesLocked() {
            final Display[] displays = mInjector.getDisplays();
            final Display[] displays = mDisplayManager.getDisplays(
                    DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED);
            for (Display d : displays) {
                int displayId = d.getDisplayId();
                Vote vote = null;
@@ -2785,7 +2797,7 @@ public class DisplayModeDirector {

        @Override
        public void onDisplayAdded(int displayId) {
            boolean isDozeState = mInjector.isDozeState(mInjector.getDisplay(displayId));
            boolean isDozeState = mInjector.isDozeState(mDisplayManager.getDisplay(displayId));
            synchronized (mSensorObserverLock) {
                mDozeStateByDisplay.put(displayId, isDozeState);
                recalculateVotesLocked();
@@ -2797,7 +2809,7 @@ public class DisplayModeDirector {
            boolean wasDozeState = mDozeStateByDisplay.get(displayId);
            synchronized (mSensorObserverLock) {
                mDozeStateByDisplay.put(displayId,
                        mInjector.isDozeState(mInjector.getDisplay(displayId)));
                        mInjector.isDozeState(mDisplayManager.getDisplay(displayId)));
                if (wasDozeState != mDozeStateByDisplay.get(displayId)) {
                    recalculateVotesLocked();
                }
@@ -3161,14 +3173,9 @@ public class DisplayModeDirector {
        void registerPeakRefreshRateObserver(@NonNull ContentResolver cr,
                @NonNull ContentObserver observer);

        void registerDisplayListener(@NonNull DisplayManager.DisplayListener listener,
                Handler handler);

        void registerDisplayListener(@NonNull DisplayManager.DisplayListener listener,
                Handler handler, long flags);

        Display getDisplay(int displayId);

        Display[] getDisplays();

        boolean getDisplayInfo(int displayId, DisplayInfo displayInfo);
@@ -3204,23 +3211,12 @@ public class DisplayModeDirector {
                    observer, UserHandle.USER_SYSTEM);
        }

        @Override
        public void registerDisplayListener(DisplayManager.DisplayListener listener,
                Handler handler) {
            getDisplayManager().registerDisplayListener(listener, handler);
        }

        @Override
        public void registerDisplayListener(DisplayManager.DisplayListener listener,
                Handler handler, long flags) {
            getDisplayManager().registerDisplayListener(listener, handler, flags);
        }

        @Override
        public Display getDisplay(int displayId) {
            return getDisplayManager().getDisplay(displayId);
        }

        @Override
        public Display[] getDisplays() {
            return getDisplayManager().getDisplays(DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED);
@@ -3229,14 +3225,11 @@ public class DisplayModeDirector {
        @Override
        public boolean getDisplayInfo(int displayId, DisplayInfo displayInfo) {
            Display display = getDisplayManager().getDisplay(displayId);
            if (display == null) {
                // We can occasionally get a display added or changed event for a display that was
                // subsequently removed, which means this returns null. Check this case and bail
                // out early; if it gets re-attached we'll eventually get another call back for it.
                return false;
            }
            if (display != null) {
                return display.getDisplayInfo(displayInfo);
            }
            return false;
        }

        @Override
        public BrightnessInfo getBrightnessInfo(int displayId) {
+2 −2
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ final class SkinThermalStatusObserver extends IThermalEventListener.Stub impleme
        for (Display d : displays) {
            final int displayId = d.getDisplayId();
            d.getDisplayInfo(info);
            localMap.put(displayId, info.thermalRefreshRateThrottling);
            localMap.put(displayId, info.refreshRateThermalThrottling);
        }
        synchronized (mThermalObserverLock) {
            for (int i = 0; i < size; i++) {
@@ -154,7 +154,7 @@ final class SkinThermalStatusObserver extends IThermalEventListener.Stub impleme
        DisplayInfo displayInfo = new DisplayInfo();
        mInjector.getDisplayInfo(displayId, displayInfo);
        SparseArray<SurfaceControl.RefreshRateRange> throttlingMap =
                displayInfo.thermalRefreshRateThrottling;
                displayInfo.refreshRateThermalThrottling;

        synchronized (mThermalObserverLock) {
            mThermalThrottlingByDisplay.put(displayId, throttlingMap);
+7 −34
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@
package com.android.server.display;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
@@ -28,7 +26,6 @@ import static org.mockito.Mockito.when;

import android.app.PropertyInvalidatedCache;
import android.graphics.Point;
import android.util.SparseArray;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.Surface;
@@ -50,7 +47,6 @@ public class LogicalDisplayTest {
    private static final int LAYER_STACK = 0;
    private static final int DISPLAY_WIDTH = 100;
    private static final int DISPLAY_HEIGHT = 200;
    private static final int MODE_ID = 1;

    private LogicalDisplay mLogicalDisplay;
    private DisplayDevice mDisplayDevice;
@@ -69,9 +65,6 @@ public class LogicalDisplayTest {
        mDisplayDeviceInfo.height = DISPLAY_HEIGHT;
        mDisplayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
        mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_INTERNAL;
        mDisplayDeviceInfo.modeId = MODE_ID;
        mDisplayDeviceInfo.supportedModes = new Display.Mode[] {new Display.Mode(MODE_ID,
                DISPLAY_WIDTH, DISPLAY_HEIGHT, /* refreshRate= */ 60)};
        when(mDisplayDevice.getDisplayDeviceInfoLocked()).thenReturn(mDisplayDeviceInfo);

        // Disable binder caches in this process.
@@ -175,34 +168,14 @@ public class LogicalDisplayTest {
    }

    @Test
    public void testUpdateLayoutLimitedRefreshRate() {
        SurfaceControl.RefreshRateRange layoutLimitedRefreshRate =
                new SurfaceControl.RefreshRateRange(0, 120);
        DisplayInfo info1 = mLogicalDisplay.getDisplayInfoLocked();
        mLogicalDisplay.updateLayoutLimitedRefreshRateLocked(layoutLimitedRefreshRate);
        DisplayInfo info2 = mLogicalDisplay.getDisplayInfoLocked();
        // Display info should only be updated when updateLocked is called
        assertEquals(info2, info1);
    public void testLayoutLimitedRefreshRateNotClearedAfterUpdate() {
        SurfaceControl.RefreshRateRange refreshRateRange = new SurfaceControl.RefreshRateRange(1,
                2);
        mLogicalDisplay.updateLayoutLimitedRefreshRateLocked(refreshRateRange);
        mLogicalDisplay.updateDisplayGroupIdLocked(1);

        mLogicalDisplay.updateLocked(mDeviceRepo);
        DisplayInfo info3 = mLogicalDisplay.getDisplayInfoLocked();
        assertNotEquals(info3, info2);
        assertEquals(layoutLimitedRefreshRate, info3.layoutLimitedRefreshRate);
    }
        DisplayInfo result = mLogicalDisplay.getDisplayInfoLocked();

    @Test
    public void testUpdateRefreshRateThermalThrottling() {
        SparseArray<SurfaceControl.RefreshRateRange> refreshRanges = new SparseArray<>();
        refreshRanges.put(0, new SurfaceControl.RefreshRateRange(0, 120));
        DisplayInfo info1 = mLogicalDisplay.getDisplayInfoLocked();
        mLogicalDisplay.updateThermalRefreshRateThrottling(refreshRanges);
        DisplayInfo info2 = mLogicalDisplay.getDisplayInfoLocked();
        // Display info should only be updated when updateLocked is called
        assertEquals(info2, info1);

        mLogicalDisplay.updateLocked(mDeviceRepo);
        DisplayInfo info3 = mLogicalDisplay.getDisplayInfoLocked();
        assertNotEquals(info3, info2);
        assertTrue(refreshRanges.contentEquals(info3.thermalRefreshRateThrottling));
        assertEquals(refreshRateRange, result.layoutLimitedRefreshRate);
    }
}
Loading