DisplayModeDirector: remove debug_render_frame_rate_is_physical_refresh_rate
This sysprop is no longer needed as the changes in SF to respect render frame rate are in place. In addition, we add a `supportsFrameRateOverride` flag to DisplayModeDirector to match the configuration in SF. Test: atest DisplayModeDirectorTest Test: manual (toggle Smooth Display from settings and observe refresh rate) Bug: 241447632 Change-Id: Ia9a8571c2686ed6074344f6ec8609e169498d3df
This commit is contained in:
@@ -48,7 +48,7 @@ import android.os.UserHandle;
|
||||
import android.provider.DeviceConfig;
|
||||
import android.provider.DeviceConfigInterface;
|
||||
import android.provider.Settings;
|
||||
import android.sysprop.DisplayProperties;
|
||||
import android.sysprop.SurfaceFlingerProperties;
|
||||
import android.text.TextUtils;
|
||||
import android.util.IndentingPrintWriter;
|
||||
import android.util.Pair;
|
||||
@@ -137,8 +137,7 @@ public class DisplayModeDirector {
|
||||
|
||||
private boolean mAlwaysRespectAppRequest;
|
||||
|
||||
// TODO(b/241447632): remove the flag once SF changes are ready
|
||||
private final boolean mRenderFrameRateIsPhysicalRefreshRate;
|
||||
private final boolean mSupportsFrameRateOverride;
|
||||
|
||||
/**
|
||||
* The allowed refresh rate switching type. This is used by SurfaceFlinger.
|
||||
@@ -175,7 +174,7 @@ public class DisplayModeDirector {
|
||||
mHbmObserver = new HbmObserver(injector, ballotBox, BackgroundThread.getHandler(),
|
||||
mDeviceConfigDisplaySettings);
|
||||
mAlwaysRespectAppRequest = false;
|
||||
mRenderFrameRateIsPhysicalRefreshRate = injector.renderFrameRateIsPhysicalRefreshRate();
|
||||
mSupportsFrameRateOverride = injector.supportsFrameRateOverride();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -237,21 +236,6 @@ public class DisplayModeDirector {
|
||||
}
|
||||
}
|
||||
|
||||
if (mRenderFrameRateIsPhysicalRefreshRate) {
|
||||
for (int i = 0; i < votes.size(); i++) {
|
||||
|
||||
Vote vote = votes.valueAt(i);
|
||||
vote.refreshRateRanges.physical.min = Math.max(vote.refreshRateRanges.physical.min,
|
||||
vote.refreshRateRanges.render.min);
|
||||
vote.refreshRateRanges.physical.max = Math.min(vote.refreshRateRanges.physical.max,
|
||||
vote.refreshRateRanges.render.max);
|
||||
vote.refreshRateRanges.render.min = Math.max(vote.refreshRateRanges.physical.min,
|
||||
vote.refreshRateRanges.render.min);
|
||||
vote.refreshRateRanges.render.max = Math.min(vote.refreshRateRanges.physical.max,
|
||||
vote.refreshRateRanges.render.max);
|
||||
}
|
||||
}
|
||||
|
||||
return votes;
|
||||
}
|
||||
|
||||
@@ -540,8 +524,7 @@ public class DisplayModeDirector {
|
||||
}
|
||||
}
|
||||
|
||||
if (mModeSwitchingType == DisplayManager.SWITCHING_TYPE_NONE
|
||||
|| mRenderFrameRateIsPhysicalRefreshRate) {
|
||||
if (mModeSwitchingType == DisplayManager.SWITCHING_TYPE_NONE) {
|
||||
primarySummary.minRenderFrameRate = primarySummary.minPhysicalRefreshRate;
|
||||
primarySummary.maxRenderFrameRate = primarySummary.maxPhysicalRefreshRate;
|
||||
appRequestSummary.minRenderFrameRate = appRequestSummary.minPhysicalRefreshRate;
|
||||
@@ -611,6 +594,22 @@ public class DisplayModeDirector {
|
||||
continue;
|
||||
}
|
||||
|
||||
// The physical refresh rate must be in the render frame rate range, unless
|
||||
// frame rate override is supported.
|
||||
if (!mSupportsFrameRateOverride) {
|
||||
if (physicalRefreshRate < (summary.minRenderFrameRate - FLOAT_TOLERANCE)
|
||||
|| physicalRefreshRate > (summary.maxRenderFrameRate + FLOAT_TOLERANCE)) {
|
||||
if (mLoggingEnabled) {
|
||||
Slog.w(TAG, "Discarding mode " + mode.getModeId()
|
||||
+ ", outside render rate bounds"
|
||||
+ ": minPhysicalRefreshRate=" + summary.minPhysicalRefreshRate
|
||||
+ ", maxPhysicalRefreshRate=" + summary.maxPhysicalRefreshRate
|
||||
+ ", modeRefreshRate=" + physicalRefreshRate);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Check whether the render frame rate range is achievable by the mode's physical
|
||||
// refresh rate, meaning that if a divisor of the physical refresh rate is in range
|
||||
// of the render frame rate.
|
||||
@@ -2976,7 +2975,7 @@ public class DisplayModeDirector {
|
||||
|
||||
IThermalService getThermalService();
|
||||
|
||||
boolean renderFrameRateIsPhysicalRefreshRate();
|
||||
boolean supportsFrameRateOverride();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -3031,9 +3030,11 @@ public class DisplayModeDirector {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderFrameRateIsPhysicalRefreshRate() {
|
||||
return DisplayProperties
|
||||
.debug_render_frame_rate_is_physical_refresh_rate().orElse(true);
|
||||
public boolean supportsFrameRateOverride() {
|
||||
return SurfaceFlingerProperties.enable_frame_rate_override().orElse(false)
|
||||
&& !SurfaceFlingerProperties.frame_rate_override_for_native_rates()
|
||||
.orElse(true)
|
||||
&& SurfaceFlingerProperties.frame_rate_override_global().orElse(false);
|
||||
}
|
||||
|
||||
private DisplayManager getDisplayManager() {
|
||||
|
||||
@@ -200,12 +200,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testDisplayModeVoting(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testDisplayModeVoting() {
|
||||
// With no votes present, DisplayModeDirector should allow any refresh rate.
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
||||
DesiredDisplayModeSpecs modeSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
@@ -242,12 +237,7 @@ public class DisplayModeDirectorTest {
|
||||
.isEqualTo((float) (minFps + i));
|
||||
assertThat(modeSpecs.primary.physical.max)
|
||||
.isEqualTo((float) (maxFps - i));
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(modeSpecs.primary.render.min)
|
||||
.isEqualTo((float) (minFps + i));
|
||||
} else {
|
||||
assertThat(modeSpecs.primary.render.min).isZero();
|
||||
}
|
||||
assertThat(modeSpecs.primary.render.min).isZero();
|
||||
assertThat(modeSpecs.primary.render.max)
|
||||
.isEqualTo((float) (maxFps - i));
|
||||
if (priority >= Vote.APP_REQUEST_REFRESH_RATE_RANGE_PRIORITY_CUTOFF) {
|
||||
@@ -255,12 +245,7 @@ public class DisplayModeDirectorTest {
|
||||
.isEqualTo((float) (minFps + i));
|
||||
assertThat(modeSpecs.appRequest.physical.max)
|
||||
.isEqualTo((float) (maxFps - i));
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(modeSpecs.appRequest.render.min).isEqualTo(
|
||||
(float) (minFps + i));
|
||||
} else {
|
||||
assertThat(modeSpecs.appRequest.render.min).isZero();
|
||||
}
|
||||
assertThat(modeSpecs.appRequest.render.min).isZero();
|
||||
assertThat(modeSpecs.appRequest.render.max).isEqualTo(
|
||||
(float) (maxFps - i));
|
||||
} else {
|
||||
@@ -292,12 +277,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testVotingWithFloatingPointErrors(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testVotingWithFloatingPointErrors() {
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(50, 90);
|
||||
SparseArray<Vote> votes = new SparseArray<>();
|
||||
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||
@@ -318,12 +298,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testFlickerHasLowerPriorityThanUserAndRangeIsSingle(
|
||||
boolean frameRateIsRefreshRate) {
|
||||
public void testFlickerHasLowerPriorityThanUserAndRangeIsSingle() {
|
||||
assertTrue(Vote.PRIORITY_FLICKER_REFRESH_RATE
|
||||
< Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
||||
assertTrue(Vote.PRIORITY_FLICKER_REFRESH_RATE
|
||||
@@ -332,7 +307,6 @@ public class DisplayModeDirectorTest {
|
||||
assertTrue(Vote.PRIORITY_FLICKER_REFRESH_RATE_SWITCH
|
||||
> Vote.PRIORITY_LOW_POWER_MODE);
|
||||
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
Display.Mode[] modes = new Display.Mode[4];
|
||||
modes[0] = new Display.Mode(
|
||||
/*modeId=*/1, /*width=*/1000, /*height=*/1000, 60);
|
||||
@@ -408,17 +382,12 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testLPMHasHigherPriorityThanUser(boolean frameRateIsRefreshRate) {
|
||||
public void testLPMHasHigherPriorityThanUser() {
|
||||
assertTrue(Vote.PRIORITY_LOW_POWER_MODE
|
||||
> Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
||||
assertTrue(Vote.PRIORITY_LOW_POWER_MODE
|
||||
> Vote.PRIORITY_APP_REQUEST_SIZE);
|
||||
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
Display.Mode[] modes = new Display.Mode[4];
|
||||
modes[0] = new Display.Mode(
|
||||
/*modeId=*/1, /*width=*/1000, /*height=*/1000, 60);
|
||||
@@ -443,11 +412,7 @@ public class DisplayModeDirectorTest {
|
||||
DesiredDisplayModeSpecs desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(2);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
|
||||
@@ -462,11 +427,7 @@ public class DisplayModeDirectorTest {
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(4);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
|
||||
@@ -481,11 +442,7 @@ public class DisplayModeDirectorTest {
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(2);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
|
||||
@@ -500,21 +457,13 @@ public class DisplayModeDirectorTest {
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(4);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testAppRequestRefreshRateRange(boolean frameRateIsRefreshRate) {
|
||||
public void testAppRequestRefreshRateRange() {
|
||||
// Confirm that the app request range doesn't include flicker or min refresh rate settings,
|
||||
// but does include everything else.
|
||||
assertTrue(
|
||||
@@ -525,7 +474,6 @@ public class DisplayModeDirectorTest {
|
||||
assertTrue(Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE
|
||||
>= Vote.APP_REQUEST_REFRESH_RATE_RANGE_PRIORITY_CUTOFF);
|
||||
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
Display.Mode[] modes = new Display.Mode[3];
|
||||
modes[0] = new Display.Mode(
|
||||
/*modeId=*/60, /*width=*/1000, /*height=*/1000, 60);
|
||||
@@ -582,12 +530,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testSpecsFromRefreshRateSettings(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testSpecsFromRefreshRateSettings() {
|
||||
// Confirm that, with varying settings for min, peak, and default refresh rate,
|
||||
// DesiredDisplayModeSpecs is calculated correctly.
|
||||
float[] refreshRates = {30.f, 60.f, 90.f, 120.f, 150.f};
|
||||
@@ -607,27 +550,12 @@ public class DisplayModeDirectorTest {
|
||||
|
||||
RefreshRateRanges frameRateAll = new RefreshRateRanges(rangeAll, rangeAll);
|
||||
RefreshRateRanges frameRate90toInf = new RefreshRateRanges(range90toInf, range90toInf);
|
||||
RefreshRateRanges frameRate0to60;
|
||||
RefreshRateRanges frameRate0to90;
|
||||
RefreshRateRanges frameRate0to120;
|
||||
RefreshRateRanges frameRate60to90;
|
||||
RefreshRateRanges frameRate90to90;
|
||||
RefreshRateRanges frameRate90to120;
|
||||
if (frameRateIsRefreshRate) {
|
||||
frameRate0to60 = new RefreshRateRanges(range0to60, range0to60);
|
||||
frameRate0to90 = new RefreshRateRanges(range0to90, range0to90);
|
||||
frameRate0to120 = new RefreshRateRanges(range0to120, range0to120);
|
||||
frameRate60to90 = new RefreshRateRanges(range60to90, range60to90);
|
||||
frameRate90to90 = new RefreshRateRanges(range90to90, range90to90);
|
||||
frameRate90to120 = new RefreshRateRanges(range90to120, range90to120);
|
||||
} else {
|
||||
frameRate0to60 = new RefreshRateRanges(rangeAll, range0to60);
|
||||
frameRate0to90 = new RefreshRateRanges(rangeAll, range0to90);
|
||||
frameRate0to120 = new RefreshRateRanges(rangeAll, range0to120);
|
||||
frameRate60to90 = new RefreshRateRanges(range60toInf, range60to90);
|
||||
frameRate90to90 = new RefreshRateRanges(range90toInf, range90to90);
|
||||
frameRate90to120 = new RefreshRateRanges(range90toInf, range90to120);
|
||||
}
|
||||
RefreshRateRanges frameRate0to60 = new RefreshRateRanges(rangeAll, range0to60);
|
||||
RefreshRateRanges frameRate0to90 = new RefreshRateRanges(rangeAll, range0to90);
|
||||
RefreshRateRanges frameRate0to120 = new RefreshRateRanges(rangeAll, range0to120);
|
||||
RefreshRateRanges frameRate60to90 = new RefreshRateRanges(range60toInf, range60to90);
|
||||
RefreshRateRanges frameRate90to90 = new RefreshRateRanges(range90toInf, range90to90);
|
||||
RefreshRateRanges frameRate90to120 = new RefreshRateRanges(range90toInf, range90to120);
|
||||
|
||||
verifySpecsWithRefreshRateSettings(director, 0, 0, 0, frameRateAll, frameRateAll);
|
||||
verifySpecsWithRefreshRateSettings(director, 0, 0, 90, frameRate0to90, frameRateAll);
|
||||
@@ -657,12 +585,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testBrightnessObserverCallWithRefreshRateSettings(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testBrightnessObserverCallWithRefreshRateSettings() {
|
||||
// Confirm that, with varying settings for min, peak, and default refresh rate, we make the
|
||||
// correct call to the brightness observer.
|
||||
float[] refreshRates = {60.f, 90.f, 120.f};
|
||||
@@ -677,12 +600,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testVotingWithAlwaysRespectAppRequest(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testVotingWithAlwaysRespectAppRequest() {
|
||||
Display.Mode[] modes = new Display.Mode[3];
|
||||
modes[0] = new Display.Mode(
|
||||
/*modeId=*/50, /*width=*/1000, /*height=*/1000, 50);
|
||||
@@ -711,11 +629,7 @@ public class DisplayModeDirectorTest {
|
||||
DesiredDisplayModeSpecs desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
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);
|
||||
@@ -734,23 +648,14 @@ public class DisplayModeDirectorTest {
|
||||
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
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
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testVotingWithSwitchingTypeNone(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testVotingWithSwitchingTypeNone() {
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(0, 90);
|
||||
SparseArray<Vote> votes = new SparseArray<>();
|
||||
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||
@@ -765,20 +670,11 @@ public class DisplayModeDirectorTest {
|
||||
DesiredDisplayModeSpecs desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.appRequest.physical.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isWithin(FLOAT_TOLERANCE).of(
|
||||
60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.appRequest.render.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(30);
|
||||
@@ -800,12 +696,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testVotingWithSwitchingTypeRenderFrameRateOnly(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testVotingWithSwitchingTypeRenderFrameRateOnly() {
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(0, 90);
|
||||
SparseArray<Vote> votes = new SparseArray<>();
|
||||
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||
@@ -820,20 +711,11 @@ public class DisplayModeDirectorTest {
|
||||
DesiredDisplayModeSpecs desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.appRequest.physical.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isWithin(FLOAT_TOLERANCE).of(
|
||||
60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.appRequest.render.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(30);
|
||||
@@ -846,20 +728,11 @@ public class DisplayModeDirectorTest {
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
}
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.appRequest.physical.min).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
}
|
||||
assertThat(desiredSpecs.appRequest.render.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(30);
|
||||
}
|
||||
@@ -887,12 +760,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testDefaultDisplayModeIsSelectedIfAvailable(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testDefaultDisplayModeIsSelectedIfAvailable() {
|
||||
final float[] refreshRates = new float[]{24f, 25f, 30f, 60f, 90f};
|
||||
final int defaultModeId = 3;
|
||||
DisplayModeDirector director = createDirectorFromRefreshRateArray(
|
||||
@@ -1173,17 +1041,12 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testAppRequestMinRefreshRate(boolean frameRateIsRefreshRate) {
|
||||
public void testAppRequestMinRefreshRate() {
|
||||
// Confirm that the app min request range doesn't include flicker or min refresh rate
|
||||
// settings but does include everything else.
|
||||
assertTrue(Vote.PRIORITY_APP_REQUEST_RENDER_FRAME_RATE_RANGE
|
||||
>= Vote.APP_REQUEST_REFRESH_RATE_RANGE_PRIORITY_CUTOFF);
|
||||
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
Display.Mode[] modes = new Display.Mode[3];
|
||||
modes[0] = new Display.Mode(
|
||||
/*modeId=*/60, /*width=*/1000, /*height=*/1000, 60);
|
||||
@@ -1225,11 +1088,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testAppRequestMaxRefreshRate(boolean frameRateIsRefreshRate) {
|
||||
public void testAppRequestMaxRefreshRate() {
|
||||
// Confirm that the app max request range doesn't include flicker or min refresh rate
|
||||
// settings but does include everything else.
|
||||
assertTrue(Vote.PRIORITY_APP_REQUEST_RENDER_FRAME_RATE_RANGE
|
||||
@@ -1243,7 +1102,6 @@ public class DisplayModeDirectorTest {
|
||||
modes[2] = new Display.Mode(
|
||||
/*modeId=*/90, /*width=*/1000, /*height=*/1000, 90);
|
||||
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
DisplayModeDirector director = createDirectorFromModeArray(modes, modes[1]);
|
||||
SparseArray<Vote> votes = new SparseArray<>();
|
||||
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||
@@ -1254,19 +1112,11 @@ public class DisplayModeDirectorTest {
|
||||
DesiredDisplayModeSpecs desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.render.min).isZero();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.render.min).isZero();
|
||||
assertThat(desiredSpecs.primary.render.max).isAtMost(60);
|
||||
assertThat(desiredSpecs.appRequest.physical.min).isAtMost(60f);
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isAtLeast(90f);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isAtMost(60f);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
}
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
assertThat(desiredSpecs.appRequest.render.max).isAtLeast(90f);
|
||||
|
||||
votes.put(Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE,
|
||||
@@ -1288,30 +1138,16 @@ public class DisplayModeDirectorTest {
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(75);
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(75);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(75);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.render.min).isZero();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.render.min).isZero();
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(75);
|
||||
assertThat(desiredSpecs.appRequest.physical.min).isZero();
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isWithin(FLOAT_TOLERANCE).of(
|
||||
75);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isAtLeast(90f);
|
||||
}
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isAtLeast(90f);
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(75);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testAppRequestObserver_modeId(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testAppRequestObserver_modeId() {
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
||||
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, 60, 0, 0);
|
||||
|
||||
@@ -1373,12 +1209,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testAppRequestObserver_minRefreshRate(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testAppRequestObserver_minRefreshRate() {
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
||||
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, -1, 60, 0);
|
||||
Vote appRequestRefreshRate =
|
||||
@@ -1391,15 +1222,9 @@ public class DisplayModeDirectorTest {
|
||||
Vote appRequestRefreshRateRange =
|
||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_RENDER_FRAME_RATE_RANGE);
|
||||
assertNotNull(appRequestRefreshRateRange);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min)
|
||||
.isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max).isAtLeast(90);
|
||||
} else {
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min).isZero();
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isPositiveInfinity();
|
||||
}
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min).isZero();
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isPositiveInfinity();
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.render.min)
|
||||
.isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.render.max).isAtLeast(90);
|
||||
@@ -1417,15 +1242,9 @@ public class DisplayModeDirectorTest {
|
||||
appRequestRefreshRateRange =
|
||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_RENDER_FRAME_RATE_RANGE);
|
||||
assertNotNull(appRequestRefreshRateRange);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min).isWithin(
|
||||
FLOAT_TOLERANCE).of(90);
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max).isAtLeast(90);
|
||||
} else {
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min).isZero();
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isPositiveInfinity();
|
||||
}
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min).isZero();
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isPositiveInfinity();
|
||||
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.render.min)
|
||||
.isWithin(FLOAT_TOLERANCE).of(90);
|
||||
@@ -1435,12 +1254,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testAppRequestObserver_maxRefreshRate(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testAppRequestObserver_maxRefreshRate() {
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
||||
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, -1, 0, 90);
|
||||
Vote appRequestRefreshRate =
|
||||
@@ -1454,13 +1268,8 @@ public class DisplayModeDirectorTest {
|
||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_RENDER_FRAME_RATE_RANGE);
|
||||
assertNotNull(appRequestRefreshRateRange);
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min).isZero();
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isWithin(FLOAT_TOLERANCE).of(90);
|
||||
} else {
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isPositiveInfinity();
|
||||
}
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isPositiveInfinity();
|
||||
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.render.min).isZero();
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.render.max)
|
||||
@@ -1480,13 +1289,8 @@ public class DisplayModeDirectorTest {
|
||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_RENDER_FRAME_RATE_RANGE);
|
||||
assertNotNull(appRequestRefreshRateRange);
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min).isZero();
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isPositiveInfinity();
|
||||
}
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isPositiveInfinity();
|
||||
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.render.min).isZero();
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.render.max)
|
||||
@@ -1512,12 +1316,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testAppRequestObserver_modeIdAndRefreshRateRange(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testAppRequestObserver_modeIdAndRefreshRateRange() {
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
||||
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, 60, 90, 90);
|
||||
|
||||
@@ -1547,16 +1346,9 @@ public class DisplayModeDirectorTest {
|
||||
Vote appRequestRefreshRateRange =
|
||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_RENDER_FRAME_RATE_RANGE);
|
||||
assertNotNull(appRequestRefreshRateRange);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min)
|
||||
.isWithin(FLOAT_TOLERANCE).of(90);
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isWithin(FLOAT_TOLERANCE).of(90);
|
||||
} else {
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min).isZero();
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isPositiveInfinity();
|
||||
}
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.min).isZero();
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.physical.max)
|
||||
.isPositiveInfinity();
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.render.min)
|
||||
.isWithin(FLOAT_TOLERANCE).of(90);
|
||||
assertThat(appRequestRefreshRateRange.refreshRateRanges.render.max)
|
||||
@@ -1566,12 +1358,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testAppRequestsIsTheDefaultMode(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testAppRequestsIsTheDefaultMode() {
|
||||
Display.Mode[] modes = new Display.Mode[2];
|
||||
modes[0] = new Display.Mode(
|
||||
/*modeId=*/1, /*width=*/1000, /*height=*/1000, 60);
|
||||
@@ -1600,12 +1387,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testDisableRefreshRateSwitchingVote(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testDisableRefreshRateSwitchingVote() {
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(50, 90);
|
||||
SparseArray<Vote> votes = new SparseArray<>();
|
||||
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||
@@ -1650,8 +1432,8 @@ public class DisplayModeDirectorTest {
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testBaseModeIdInPrimaryRange(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testBaseModeIdInPrimaryRange(boolean supportsFrameRateOverride) {
|
||||
when(mInjector.supportsFrameRateOverride()).thenReturn(supportsFrameRateOverride);
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(50, 90);
|
||||
SparseArray<Vote> votes = new SparseArray<>();
|
||||
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||
@@ -1662,12 +1444,12 @@ public class DisplayModeDirectorTest {
|
||||
director.injectVotesByDisplay(votesByDisplay);
|
||||
DesiredDisplayModeSpecs desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(50);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
if (supportsFrameRateOverride) {
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(70);
|
||||
} else {
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(50);
|
||||
|
||||
}
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
@@ -1679,11 +1461,7 @@ public class DisplayModeDirectorTest {
|
||||
director.injectVotesByDisplay(votesByDisplay);
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(55);
|
||||
@@ -1697,12 +1475,11 @@ public class DisplayModeDirectorTest {
|
||||
director.injectVotesByDisplay(votesByDisplay);
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
if (supportsFrameRateOverride) {
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(52);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
}
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(55);
|
||||
@@ -1716,23 +1493,14 @@ public class DisplayModeDirectorTest {
|
||||
director.injectVotesByDisplay(votesByDisplay);
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.primary.physical.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.primary.physical.max).isWithin(FLOAT_TOLERANCE).of(58);
|
||||
} else {
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
}
|
||||
assertThat(desiredSpecs.primary.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.primary.render.min).isWithin(FLOAT_TOLERANCE).of(0);
|
||||
assertThat(desiredSpecs.primary.render.max).isWithin(FLOAT_TOLERANCE).of(58);
|
||||
assertThat(desiredSpecs.baseModeId).isEqualTo(55);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testStaleAppVote(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testStaleAppVote() {
|
||||
Display.Mode[] modes = new Display.Mode[4];
|
||||
modes[0] = new Display.Mode(
|
||||
/*modeId=*/1, /*width=*/1000, /*height=*/1000, 60);
|
||||
@@ -1782,8 +1550,8 @@ public class DisplayModeDirectorTest {
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testRefreshRateIsSubsetOfFrameRate(boolean frameRateIsRefreshRate) {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(frameRateIsRefreshRate);
|
||||
public void testRefreshRateIsSubsetOfFrameRate(boolean supportsFrameRateOverride) {
|
||||
when(mInjector.supportsFrameRateOverride()).thenReturn(supportsFrameRateOverride);
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 120);
|
||||
SparseArray<Vote> votes = new SparseArray<>();
|
||||
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||
@@ -1795,11 +1563,7 @@ public class DisplayModeDirectorTest {
|
||||
DesiredDisplayModeSpecs desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.appRequest.physical.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isWithin(FLOAT_TOLERANCE).of(120);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
}
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(120);
|
||||
|
||||
votes.clear();
|
||||
@@ -1810,13 +1574,11 @@ public class DisplayModeDirectorTest {
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.appRequest.physical.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isWithin(FLOAT_TOLERANCE).of(120);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(
|
||||
120);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
if (supportsFrameRateOverride) {
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(120);
|
||||
}
|
||||
|
||||
votes.clear();
|
||||
@@ -1827,13 +1589,12 @@ public class DisplayModeDirectorTest {
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.appRequest.physical.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isWithin(FLOAT_TOLERANCE).of(120);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(
|
||||
120);
|
||||
} else {
|
||||
if (supportsFrameRateOverride) {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(120);
|
||||
}
|
||||
|
||||
votes.clear();
|
||||
@@ -1844,17 +1605,12 @@ public class DisplayModeDirectorTest {
|
||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.appRequest.physical.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isWithin(FLOAT_TOLERANCE).of(120);
|
||||
if (frameRateIsRefreshRate) {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
}
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(120);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRenderFrameRateIsAchievableByPhysicalRefreshRate() {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(false);
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 120);
|
||||
SparseArray<Vote> votes = new SparseArray<>();
|
||||
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||
@@ -1871,9 +1627,35 @@ public class DisplayModeDirectorTest {
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(120);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Parameters({
|
||||
"true",
|
||||
"false"
|
||||
})
|
||||
public void testRenderFrameRateIncludesPhysicalRefreshRate(boolean supportsFrameRateOverride) {
|
||||
when(mInjector.supportsFrameRateOverride()).thenReturn(supportsFrameRateOverride);
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 120);
|
||||
SparseArray<Vote> votes = new SparseArray<>();
|
||||
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||
votesByDisplay.put(DISPLAY_ID, votes);
|
||||
|
||||
votes.put(Vote.PRIORITY_LOW_POWER_MODE, Vote.forRenderFrameRates(0, 60));
|
||||
votes.put(Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE,
|
||||
Vote.forRenderFrameRates(0, 30));
|
||||
director.injectVotesByDisplay(votesByDisplay);
|
||||
DesiredDisplayModeSpecs desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||
assertThat(desiredSpecs.appRequest.physical.min).isZero();
|
||||
assertThat(desiredSpecs.appRequest.physical.max).isPositiveInfinity();
|
||||
assertThat(desiredSpecs.appRequest.render.min).isZero();
|
||||
if (supportsFrameRateOverride) {
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(30);
|
||||
} else {
|
||||
assertThat(desiredSpecs.appRequest.render.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRenderFrameRateIsDroppedIfLowerPriorityThenBaseModeRefreshRate() {
|
||||
when(mInjector.renderFrameRateIsPhysicalRefreshRate()).thenReturn(false);
|
||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 120);
|
||||
SparseArray<Vote> votes = new SparseArray<>();
|
||||
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||
@@ -2692,7 +2474,7 @@ public class DisplayModeDirectorTest {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderFrameRateIsPhysicalRefreshRate() {
|
||||
public boolean supportsFrameRateOverride() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user