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

Commit c0ad0321 authored by Oleg Petšjonkin's avatar Oleg Petšjonkin Committed by Automerger Merge Worker
Browse files

Merge "Properly handling situation when display is added and removed...

Merge "Properly handling situation when display is added and removed instantly" into udc-dev am: 23636fed am: 2270b105

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22761588



Change-Id: I903442bed035902a3dbc3d91457ee21a77316c63
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents d8b8352a 2270b105
Loading
Loading
Loading
Loading
+10 −7
Original line number Original line Diff line number Diff line
@@ -341,6 +341,9 @@ public final class DisplayInfo implements Parcelable {
    @Nullable
    @Nullable
    public DisplayShape displayShape;
    public DisplayShape displayShape;


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


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


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


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


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


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


    @Override
    @Override
@@ -884,8 +887,8 @@ public final class DisplayInfo implements Parcelable {
        } else {
        } else {
            sb.append(hdrSdrRatio);
            sb.append(hdrSdrRatio);
        }
        }
        sb.append(", refreshRateThermalThrottling ");
        sb.append(", thermalRefreshRateThrottling ");
        sb.append(refreshRateThermalThrottling);
        sb.append(thermalRefreshRateThrottling);
        sb.append("}");
        sb.append("}");
        return sb.toString();
        return sb.toString();
    }
    }
+26 −8
Original line number Original line Diff line number Diff line
@@ -181,6 +181,19 @@ final class LogicalDisplay {
     */
     */
    private String mThermalBrightnessThrottlingDataId;
    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) {
    public LogicalDisplay(int displayId, int layerStack, DisplayDevice primaryDisplayDevice) {
        mDisplayId = displayId;
        mDisplayId = displayId;
        mLayerStack = layerStack;
        mLayerStack = layerStack;
@@ -339,24 +352,24 @@ final class LogicalDisplay {
     */
     */
    public void updateLayoutLimitedRefreshRateLocked(
    public void updateLayoutLimitedRefreshRateLocked(
            @Nullable SurfaceControl.RefreshRateRange layoutLimitedRefreshRate) {
            @Nullable SurfaceControl.RefreshRateRange layoutLimitedRefreshRate) {
        if (!Objects.equals(layoutLimitedRefreshRate, mBaseDisplayInfo.layoutLimitedRefreshRate)) {
        if (!Objects.equals(layoutLimitedRefreshRate, mLayoutLimitedRefreshRate)) {
            mBaseDisplayInfo.layoutLimitedRefreshRate = layoutLimitedRefreshRate;
            mLayoutLimitedRefreshRate = layoutLimitedRefreshRate;
            mInfo.set(null);
            mDirty = true;
        }
        }
    }
    }
    /**
    /**
     * Updates refreshRateThermalThrottling
     * Updates thermalRefreshRateThrottling
     *
     *
     * @param refreshRanges new refreshRateThermalThrottling ranges limited by layout or default
     * @param refreshRanges new thermalRefreshRateThrottling ranges limited by layout or default
     */
     */
    public void updateThermalRefreshRateThrottling(
    public void updateThermalRefreshRateThrottling(
            @Nullable SparseArray<SurfaceControl.RefreshRateRange> refreshRanges) {
            @Nullable SparseArray<SurfaceControl.RefreshRateRange> refreshRanges) {
        if (refreshRanges == null) {
        if (refreshRanges == null) {
            refreshRanges = new SparseArray<>();
            refreshRanges = new SparseArray<>();
        }
        }
        if (!mBaseDisplayInfo.refreshRateThermalThrottling.contentEquals(refreshRanges)) {
        if (!mThermalRefreshRateThrottling.contentEquals(refreshRanges)) {
            mBaseDisplayInfo.refreshRateThermalThrottling = refreshRanges;
            mThermalRefreshRateThrottling = refreshRanges;
            mInfo.set(null);
            mDirty = true;
        }
        }
    }
    }


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


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

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


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


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


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


        @Nullable
        @Nullable
        private DisplayInfo getDisplayInfo(int displayId) {
        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();
            DisplayInfo info = new DisplayInfo();
            d.getDisplayInfo(info);
            // Display info might be invalid, in this case return null
            return info;
            return mInjector.getDisplayInfo(displayId, info) ? info : null;
        }
        }


        private void updateLayoutLimitedFrameRate(int displayId, @Nullable DisplayInfo info) {
        private void updateLayoutLimitedFrameRate(int displayId, @Nullable DisplayInfo info) {
@@ -2432,8 +2424,7 @@ public class DisplayModeDirector {
        }
        }


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


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


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


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


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

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


        Display getDisplay(int displayId);

        Display[] getDisplays();
        Display[] getDisplays();


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


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

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


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

        @Override
        @Override
        public Display[] getDisplays() {
        public Display[] getDisplays() {
            return getDisplayManager().getDisplays(DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED);
            return getDisplayManager().getDisplays(DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED);
@@ -3234,11 +3239,14 @@ public class DisplayModeDirector {
        @Override
        @Override
        public boolean getDisplayInfo(int displayId, DisplayInfo displayInfo) {
        public boolean getDisplayInfo(int displayId, DisplayInfo displayInfo) {
            Display display = getDisplayManager().getDisplay(displayId);
            Display display = getDisplayManager().getDisplay(displayId);
            if (display != null) {
            if (display == null) {
                return display.getDisplayInfo(displayInfo);
                // 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;
                return false;
            }
            }
            return display.getDisplayInfo(displayInfo);
        }


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


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


import static org.junit.Assert.assertEquals;
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.any;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;
@@ -26,6 +28,7 @@ import static org.mockito.Mockito.when;


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


    private LogicalDisplay mLogicalDisplay;
    private LogicalDisplay mLogicalDisplay;
    private DisplayDevice mDisplayDevice;
    private DisplayDevice mDisplayDevice;
@@ -65,6 +69,9 @@ public class LogicalDisplayTest {
        mDisplayDeviceInfo.height = DISPLAY_HEIGHT;
        mDisplayDeviceInfo.height = DISPLAY_HEIGHT;
        mDisplayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
        mDisplayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
        mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_INTERNAL;
        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);
        when(mDisplayDevice.getDisplayDeviceInfoLocked()).thenReturn(mDisplayDeviceInfo);


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


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


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


        assertEquals(refreshRateRange, result.layoutLimitedRefreshRate);
    @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));
    }
    }
}
}
Loading