Loading services/core/java/com/android/server/display/mode/DisplayModeDirector.java +12 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading services/core/java/com/android/server/display/mode/Vote.java +14 −8 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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, Loading Loading @@ -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: Loading services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java +7 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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) { Loading Loading
services/core/java/com/android/server/display/mode/DisplayModeDirector.java +12 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading
services/core/java/com/android/server/display/mode/Vote.java +14 −8 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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, Loading Loading @@ -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: Loading
services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java +7 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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) { Loading