diff options
3 files changed, 33 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/display/mode/DisplayModeDirector.java b/services/core/java/com/android/server/display/mode/DisplayModeDirector.java index c31d1d8b271c..d909004e6381 100644 --- a/services/core/java/com/android/server/display/mode/DisplayModeDirector.java +++ b/services/core/java/com/android/server/display/mode/DisplayModeDirector.java @@ -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) { diff --git a/services/core/java/com/android/server/display/mode/Vote.java b/services/core/java/com/android/server/display/mode/Vote.java index 88ee044810db..459f9a6e8f13 100644 --- a/services/core/java/com/android/server/display/mode/Vote.java +++ b/services/core/java/com/android/server/display/mode/Vote.java @@ -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: diff --git a/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java b/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java index ab0f0c1fe5ff..d91f154c1b87 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java @@ -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) { |