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

Commit 6a4739f4 authored by Oleg Petšjonkin's avatar Oleg Petšjonkin Committed by Android (Google) Code Review
Browse files

Merge "Concurrent displays: adding render rate sync" into main

parents eeae7591 c97d5f5a
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -1500,10 +1500,18 @@ public class DisplayModeDirector {
        }

        private void updateLayoutLimitedFrameRate(int displayId, @Nullable DisplayInfo info) {
            Vote vote = info != null && info.layoutLimitedRefreshRate != null
                    ? Vote.forPhysicalRefreshRates(info.layoutLimitedRefreshRate.min,
                    info.layoutLimitedRefreshRate.max) : null;
            mVotesStorage.updateVote(displayId, Vote.PRIORITY_LAYOUT_LIMITED_FRAME_RATE, vote);
            Vote refreshRateVote = null;
            Vote frameRateVote = null;
            if (info != null && info.layoutLimitedRefreshRate != null) {
                refreshRateVote = Vote.forPhysicalRefreshRates(info.layoutLimitedRefreshRate.min,
                        info.layoutLimitedRefreshRate.max);
                frameRateVote = Vote.forRenderFrameRates(info.layoutLimitedRefreshRate.min,
                        info.layoutLimitedRefreshRate.max);
            }
            mVotesStorage.updateVote(
                    displayId, Vote.PRIORITY_LAYOUT_LIMITED_REFRESH_RATE, refreshRateVote);
            mVotesStorage.updateVote(
                    displayId, Vote.PRIORITY_LAYOUT_LIMITED_FRAME_RATE, frameRateVote);
        }

        private void removeUserSettingDisplayPreferredSize(int displayId) {
+14 −8
Original line number Diff line number Diff line
@@ -110,37 +110,40 @@ interface Vote {
    int PRIORITY_AUTH_OPTIMIZER_RENDER_FRAME_RATE = 13;

    // For concurrent displays we want to limit refresh rate on all displays
    int PRIORITY_LAYOUT_LIMITED_FRAME_RATE = 14;
    int PRIORITY_LAYOUT_LIMITED_REFRESH_RATE = 14;

    // For concurrent displays we want to limit refresh rate on all displays
    int PRIORITY_LAYOUT_LIMITED_FRAME_RATE = 15;

    // For internal application to limit display modes to specific ids
    int PRIORITY_SYSTEM_REQUESTED_MODES = 15;
    int PRIORITY_SYSTEM_REQUESTED_MODES = 16;

    // PRIORITY_LOW_POWER_MODE_MODES limits display modes to specific refreshRate-vsync pairs if
    // Settings.Global.LOW_POWER_MODE is on.
    // Lower priority that PRIORITY_LOW_POWER_MODE_RENDER_RATE and if discarded (due to other
    // higher priority votes), render rate limit can still apply
    int PRIORITY_LOW_POWER_MODE_MODES = 16;
    int PRIORITY_LOW_POWER_MODE_MODES = 17;

    // PRIORITY_LOW_POWER_MODE_RENDER_RATE force the render frame rate to [0, 60HZ] if
    // Settings.Global.LOW_POWER_MODE is on.
    int PRIORITY_LOW_POWER_MODE_RENDER_RATE = 17;
    int PRIORITY_LOW_POWER_MODE_RENDER_RATE = 18;

    // PRIORITY_FLICKER_REFRESH_RATE_SWITCH votes for disabling refresh rate switching. If the
    // higher priority voters' result is a range, it will fix the rate to a single choice.
    // It's used to avoid refresh rate switches in certain conditions which may result in the
    // user seeing the display flickering when the switches occur.
    int PRIORITY_FLICKER_REFRESH_RATE_SWITCH = 18;
    int PRIORITY_FLICKER_REFRESH_RATE_SWITCH = 19;

    // Force display to [0, 60HZ] if skin temperature is at or above CRITICAL.
    int PRIORITY_SKIN_TEMPERATURE = 19;
    int PRIORITY_SKIN_TEMPERATURE = 20;

    // The proximity sensor needs the refresh rate to be locked in order to function, so this is
    // set to a high priority.
    int PRIORITY_PROXIMITY = 20;
    int PRIORITY_PROXIMITY = 21;

    // The Under-Display Fingerprint Sensor (UDFPS) needs the refresh rate to be locked in order
    // to function, so this needs to be the highest priority of all votes.
    int PRIORITY_UDFPS = 21;
    int PRIORITY_UDFPS = 22;

    @IntDef(prefix = { "PRIORITY_" }, value = {
            PRIORITY_DEFAULT_RENDER_FRAME_RATE,
@@ -157,6 +160,7 @@ interface Vote {
            PRIORITY_SYNCHRONIZED_RENDER_FRAME_RATE,
            PRIORITY_LIMIT_MODE,
            PRIORITY_AUTH_OPTIMIZER_RENDER_FRAME_RATE,
            PRIORITY_LAYOUT_LIMITED_REFRESH_RATE,
            PRIORITY_LAYOUT_LIMITED_FRAME_RATE,
            PRIORITY_SYSTEM_REQUESTED_MODES,
            PRIORITY_LOW_POWER_MODE_MODES,
@@ -283,6 +287,8 @@ interface Vote {
                return "PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE";
            case PRIORITY_AUTH_OPTIMIZER_RENDER_FRAME_RATE:
                return "PRIORITY_AUTH_OPTIMIZER_RENDER_FRAME_RATE";
            case PRIORITY_LAYOUT_LIMITED_REFRESH_RATE:
                return "PRIORITY_LAYOUT_LIMITED_REFRESH_RATE";
            case PRIORITY_LAYOUT_LIMITED_FRAME_RATE:
                return "PRIORITY_LAYOUT_LIMITED_FRAME_RATE";
            case PRIORITY_SYSTEM_REQUESTED_MODES:
+7 −1
Original line number Diff line number Diff line
@@ -3556,12 +3556,16 @@ public class DisplayModeDirectorTest {
                new RefreshRateRange(refreshRate, refreshRate);
        displayListener.onDisplayChanged(DISPLAY_ID);

        Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_LAYOUT_LIMITED_FRAME_RATE);
        Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_LAYOUT_LIMITED_REFRESH_RATE);
        assertVoteForPhysicalRefreshRate(vote, /* refreshRate= */ refreshRate);
        vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_LAYOUT_LIMITED_FRAME_RATE);
        assertVoteForRenderFrameRateRange(vote, refreshRate, refreshRate);

        mInjector.mDisplayInfo.layoutLimitedRefreshRate = null;
        displayListener.onDisplayChanged(DISPLAY_ID);

        vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_LAYOUT_LIMITED_REFRESH_RATE);
        assertNull(vote);
        vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_LAYOUT_LIMITED_FRAME_RATE);
        assertNull(vote);
    }
@@ -3585,6 +3589,8 @@ public class DisplayModeDirectorTest {

        Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_LAYOUT_LIMITED_FRAME_RATE);
        assertNull(vote);
        vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_LAYOUT_LIMITED_REFRESH_RATE);
        assertNull(vote);
    }

    private Temperature getSkinTemp(@Temperature.ThrottlingStatus int status) {