DisplayModeDirector: fix an arithmetic error
Add a float tolerance when calculating the divisor of a refresh rate. This is needed for example when the display refresh rate is 120.0001 and the max render frame rate is 120.00. Test: atest DisplayModeDirectorTest Bug: 266123304 Change-Id: Ic0c2c81612aaebded9fbeb47771a0a35e5e66212
This commit is contained in:
@@ -635,7 +635,9 @@ public class DisplayModeDirector {
|
||||
// which is within the render rate range
|
||||
// - 90hz is not in range as none of the even divisors (i.e. 90, 45, 30)
|
||||
// fall within the acceptable render range.
|
||||
final int divisor = (int) Math.ceil(physicalRefreshRate / summary.maxRenderFrameRate);
|
||||
final int divisor =
|
||||
(int) Math.ceil((physicalRefreshRate / summary.maxRenderFrameRate)
|
||||
- FLOAT_TOLERANCE);
|
||||
float adjustedPhysicalRefreshRate = physicalRefreshRate / divisor;
|
||||
if (adjustedPhysicalRefreshRate < (summary.minRenderFrameRate - FLOAT_TOLERANCE)) {
|
||||
if (mLoggingEnabled) {
|
||||
|
||||
@@ -298,6 +298,18 @@ public class DisplayModeDirectorTest {
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(60);
|
||||
|
||||
votes.clear();
|
||||
votes.put(Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE,
|
||||
Vote.forRenderFrameRates(0, 60 - error));
|
||||
votes.put(Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE,
|
||||
Vote.forRenderFrameRates(60 + error, Float.POSITIVE_INFINITY));
|
||||
director.injectVotesByDisplay(votesByDisplay);
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(60);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user