Merge "Add preferredMinDisplayRefreshRate" into sc-dev am: ac57d157da
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15141394 Change-Id: Ib7bb870db677036646aa32aaab8caee6695ddecf
This commit is contained in:
@@ -207,6 +207,8 @@ public abstract class DisplayManagerInternal {
|
|||||||
* has a preference.
|
* has a preference.
|
||||||
* @param requestedModeId The preferred mode id for the top-most visible window that has a
|
* @param requestedModeId The preferred mode id for the top-most visible window that has a
|
||||||
* preference.
|
* preference.
|
||||||
|
* @param requestedMinRefreshRate The preferred lowest refresh rate for the top-most visible
|
||||||
|
* window that has a preference.
|
||||||
* @param requestedMaxRefreshRate The preferred highest refresh rate for the top-most visible
|
* @param requestedMaxRefreshRate The preferred highest refresh rate for the top-most visible
|
||||||
* window that has a preference.
|
* window that has a preference.
|
||||||
* @param requestedMinimalPostProcessing The preferred minimal post processing setting for the
|
* @param requestedMinimalPostProcessing The preferred minimal post processing setting for the
|
||||||
@@ -216,8 +218,9 @@ public abstract class DisplayManagerInternal {
|
|||||||
* prior to call to performTraversalInTransactionFromWindowManager.
|
* prior to call to performTraversalInTransactionFromWindowManager.
|
||||||
*/
|
*/
|
||||||
public abstract void setDisplayProperties(int displayId, boolean hasContent,
|
public abstract void setDisplayProperties(int displayId, boolean hasContent,
|
||||||
float requestedRefreshRate, int requestedModeId, float requestedMaxRefreshRate,
|
float requestedRefreshRate, int requestedModeId, float requestedMinRefreshRate,
|
||||||
boolean requestedMinimalPostProcessing, boolean inTraversal);
|
float requestedMaxRefreshRate, boolean requestedMinimalPostProcessing,
|
||||||
|
boolean inTraversal);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Applies an offset to the contents of a display, for example to avoid burn-in.
|
* Applies an offset to the contents of a display, for example to avoid burn-in.
|
||||||
|
|||||||
@@ -3037,6 +3037,14 @@ public interface WindowManager extends ViewManager {
|
|||||||
*/
|
*/
|
||||||
public int preferredDisplayModeId;
|
public int preferredDisplayModeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The min display refresh rate while the window is in focus.
|
||||||
|
*
|
||||||
|
* This value is ignored if {@link #preferredDisplayModeId} is set.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public float preferredMinDisplayRefreshRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The max display refresh rate while the window is in focus.
|
* The max display refresh rate while the window is in focus.
|
||||||
*
|
*
|
||||||
@@ -3824,6 +3832,7 @@ public interface WindowManager extends ViewManager {
|
|||||||
out.writeInt(screenOrientation);
|
out.writeInt(screenOrientation);
|
||||||
out.writeFloat(preferredRefreshRate);
|
out.writeFloat(preferredRefreshRate);
|
||||||
out.writeInt(preferredDisplayModeId);
|
out.writeInt(preferredDisplayModeId);
|
||||||
|
out.writeFloat(preferredMinDisplayRefreshRate);
|
||||||
out.writeFloat(preferredMaxDisplayRefreshRate);
|
out.writeFloat(preferredMaxDisplayRefreshRate);
|
||||||
out.writeInt(systemUiVisibility);
|
out.writeInt(systemUiVisibility);
|
||||||
out.writeInt(subtreeSystemUiVisibility);
|
out.writeInt(subtreeSystemUiVisibility);
|
||||||
@@ -3903,6 +3912,7 @@ public interface WindowManager extends ViewManager {
|
|||||||
screenOrientation = in.readInt();
|
screenOrientation = in.readInt();
|
||||||
preferredRefreshRate = in.readFloat();
|
preferredRefreshRate = in.readFloat();
|
||||||
preferredDisplayModeId = in.readInt();
|
preferredDisplayModeId = in.readInt();
|
||||||
|
preferredMinDisplayRefreshRate = in.readFloat();
|
||||||
preferredMaxDisplayRefreshRate = in.readFloat();
|
preferredMaxDisplayRefreshRate = in.readFloat();
|
||||||
systemUiVisibility = in.readInt();
|
systemUiVisibility = in.readInt();
|
||||||
subtreeSystemUiVisibility = in.readInt();
|
subtreeSystemUiVisibility = in.readInt();
|
||||||
@@ -3988,7 +3998,9 @@ public interface WindowManager extends ViewManager {
|
|||||||
/** {@hide} */
|
/** {@hide} */
|
||||||
public static final int BLUR_BEHIND_RADIUS_CHANGED = 1 << 29;
|
public static final int BLUR_BEHIND_RADIUS_CHANGED = 1 << 29;
|
||||||
/** {@hide} */
|
/** {@hide} */
|
||||||
public static final int PREFERRED_MAX_DISPLAY_REFRESH_RATE = 1 << 30;
|
public static final int PREFERRED_MIN_DISPLAY_REFRESH_RATE = 1 << 30;
|
||||||
|
/** {@hide} */
|
||||||
|
public static final int PREFERRED_MAX_DISPLAY_REFRESH_RATE = 1 << 31;
|
||||||
|
|
||||||
// internal buffer to backup/restore parameters under compatibility mode.
|
// internal buffer to backup/restore parameters under compatibility mode.
|
||||||
private int[] mCompatibilityParamsBackup = null;
|
private int[] mCompatibilityParamsBackup = null;
|
||||||
@@ -4120,6 +4132,11 @@ public interface WindowManager extends ViewManager {
|
|||||||
changes |= PREFERRED_DISPLAY_MODE_ID;
|
changes |= PREFERRED_DISPLAY_MODE_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (preferredMinDisplayRefreshRate != o.preferredMinDisplayRefreshRate) {
|
||||||
|
preferredMinDisplayRefreshRate = o.preferredMinDisplayRefreshRate;
|
||||||
|
changes |= PREFERRED_MIN_DISPLAY_REFRESH_RATE;
|
||||||
|
}
|
||||||
|
|
||||||
if (preferredMaxDisplayRefreshRate != o.preferredMaxDisplayRefreshRate) {
|
if (preferredMaxDisplayRefreshRate != o.preferredMaxDisplayRefreshRate) {
|
||||||
preferredMaxDisplayRefreshRate = o.preferredMaxDisplayRefreshRate;
|
preferredMaxDisplayRefreshRate = o.preferredMaxDisplayRefreshRate;
|
||||||
changes |= PREFERRED_MAX_DISPLAY_REFRESH_RATE;
|
changes |= PREFERRED_MAX_DISPLAY_REFRESH_RATE;
|
||||||
@@ -4340,6 +4357,10 @@ public interface WindowManager extends ViewManager {
|
|||||||
sb.append(" preferredDisplayMode=");
|
sb.append(" preferredDisplayMode=");
|
||||||
sb.append(preferredDisplayModeId);
|
sb.append(preferredDisplayModeId);
|
||||||
}
|
}
|
||||||
|
if (preferredMinDisplayRefreshRate != 0) {
|
||||||
|
sb.append(" preferredMinDisplayRefreshRate=");
|
||||||
|
sb.append(preferredMinDisplayRefreshRate);
|
||||||
|
}
|
||||||
if (preferredMaxDisplayRefreshRate != 0) {
|
if (preferredMaxDisplayRefreshRate != 0) {
|
||||||
sb.append(" preferredMaxDisplayRefreshRate=");
|
sb.append(" preferredMaxDisplayRefreshRate=");
|
||||||
sb.append(preferredMaxDisplayRefreshRate);
|
sb.append(preferredMaxDisplayRefreshRate);
|
||||||
|
|||||||
@@ -1506,8 +1506,9 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setDisplayPropertiesInternal(int displayId, boolean hasContent,
|
private void setDisplayPropertiesInternal(int displayId, boolean hasContent,
|
||||||
float requestedRefreshRate, int requestedModeId, float requestedMaxRefreshRate,
|
float requestedRefreshRate, int requestedModeId, float requestedMinRefreshRate,
|
||||||
boolean preferMinimalPostProcessing, boolean inTraversal) {
|
float requestedMaxRefreshRate, boolean preferMinimalPostProcessing,
|
||||||
|
boolean inTraversal) {
|
||||||
synchronized (mSyncRoot) {
|
synchronized (mSyncRoot) {
|
||||||
final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(displayId);
|
final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(displayId);
|
||||||
if (display == null) {
|
if (display == null) {
|
||||||
@@ -1538,7 +1539,7 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
mDisplayModeDirector.getAppRequestObserver().setAppRequest(
|
mDisplayModeDirector.getAppRequestObserver().setAppRequest(
|
||||||
displayId, requestedModeId, requestedMaxRefreshRate);
|
displayId, requestedModeId, requestedMinRefreshRate, requestedMaxRefreshRate);
|
||||||
|
|
||||||
if (display.getDisplayInfoLocked().minimalPostProcessingSupported) {
|
if (display.getDisplayInfoLocked().minimalPostProcessingSupported) {
|
||||||
boolean mppRequest = mMinimalPostProcessingAllowed && preferMinimalPostProcessing;
|
boolean mppRequest = mMinimalPostProcessingAllowed && preferMinimalPostProcessing;
|
||||||
@@ -3208,11 +3209,12 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDisplayProperties(int displayId, boolean hasContent,
|
public void setDisplayProperties(int displayId, boolean hasContent,
|
||||||
float requestedRefreshRate, int requestedMode, float requestedMaxRefreshRate,
|
float requestedRefreshRate, int requestedMode, float requestedMinRefreshRate,
|
||||||
boolean requestedMinimalPostProcessing, boolean inTraversal) {
|
float requestedMaxRefreshRate, boolean requestedMinimalPostProcessing,
|
||||||
|
boolean inTraversal) {
|
||||||
setDisplayPropertiesInternal(displayId, hasContent, requestedRefreshRate,
|
setDisplayPropertiesInternal(displayId, hasContent, requestedRefreshRate,
|
||||||
requestedMode, requestedMaxRefreshRate, requestedMinimalPostProcessing,
|
requestedMode, requestedMinRefreshRate, requestedMaxRefreshRate,
|
||||||
inTraversal);
|
requestedMinimalPostProcessing, inTraversal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -913,10 +913,12 @@ public class DisplayModeDirector {
|
|||||||
// It votes [MIN_REFRESH_RATE, Float.POSITIVE_INFINITY]
|
// It votes [MIN_REFRESH_RATE, Float.POSITIVE_INFINITY]
|
||||||
public static final int PRIORITY_USER_SETTING_MIN_REFRESH_RATE = 2;
|
public static final int PRIORITY_USER_SETTING_MIN_REFRESH_RATE = 2;
|
||||||
|
|
||||||
// APP_REQUEST_MAX_REFRESH_RATE is used to for internal apps to limit the refresh
|
// APP_REQUEST_REFRESH_RATE_RANGE is used to for internal apps to limit the refresh
|
||||||
// rate in certain cases, mostly to preserve power.
|
// rate in certain cases, mostly to preserve power.
|
||||||
// It votes to [0, APP_REQUEST_MAX_REFRESH_RATE].
|
// @see android.view.WindowManager.LayoutParams#preferredMinRefreshRate
|
||||||
public static final int PRIORITY_APP_REQUEST_MAX_REFRESH_RATE = 3;
|
// @see android.view.WindowManager.LayoutParams#preferredMaxRefreshRate
|
||||||
|
// It votes to [preferredMinRefreshRate, preferredMaxRefreshRate].
|
||||||
|
public static final int PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE = 3;
|
||||||
|
|
||||||
// We split the app request into different priorities in case we can satisfy one desire
|
// We split the app request into different priorities in case we can satisfy one desire
|
||||||
// without the other.
|
// without the other.
|
||||||
@@ -967,7 +969,7 @@ public class DisplayModeDirector {
|
|||||||
// The cutoff for the app request refresh rate range. Votes with priorities lower than this
|
// The cutoff for the app request refresh rate range. Votes with priorities lower than this
|
||||||
// value will not be considered when constructing the app request refresh rate range.
|
// value will not be considered when constructing the app request refresh rate range.
|
||||||
public static final int APP_REQUEST_REFRESH_RATE_RANGE_PRIORITY_CUTOFF =
|
public static final int APP_REQUEST_REFRESH_RATE_RANGE_PRIORITY_CUTOFF =
|
||||||
PRIORITY_APP_REQUEST_MAX_REFRESH_RATE;
|
PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A value signifying an invalid width or height in a vote.
|
* A value signifying an invalid width or height in a vote.
|
||||||
@@ -1035,8 +1037,8 @@ public class DisplayModeDirector {
|
|||||||
switch (priority) {
|
switch (priority) {
|
||||||
case PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE:
|
case PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE:
|
||||||
return "PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE";
|
return "PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE";
|
||||||
case PRIORITY_APP_REQUEST_MAX_REFRESH_RATE:
|
case PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE:
|
||||||
return "PRIORITY_APP_REQUEST_MAX_REFRESH_RATE";
|
return "PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE";
|
||||||
case PRIORITY_APP_REQUEST_SIZE:
|
case PRIORITY_APP_REQUEST_SIZE:
|
||||||
return "PRIORITY_APP_REQUEST_SIZE";
|
return "PRIORITY_APP_REQUEST_SIZE";
|
||||||
case PRIORITY_DEFAULT_REFRESH_RATE:
|
case PRIORITY_DEFAULT_REFRESH_RATE:
|
||||||
@@ -1233,17 +1235,19 @@ public class DisplayModeDirector {
|
|||||||
|
|
||||||
final class AppRequestObserver {
|
final class AppRequestObserver {
|
||||||
private final SparseArray<Display.Mode> mAppRequestedModeByDisplay;
|
private final SparseArray<Display.Mode> mAppRequestedModeByDisplay;
|
||||||
private final SparseArray<Float> mAppPreferredMaxRefreshRateByDisplay;
|
private final SparseArray<RefreshRateRange> mAppPreferredRefreshRateRangeByDisplay;
|
||||||
|
|
||||||
AppRequestObserver() {
|
AppRequestObserver() {
|
||||||
mAppRequestedModeByDisplay = new SparseArray<>();
|
mAppRequestedModeByDisplay = new SparseArray<>();
|
||||||
mAppPreferredMaxRefreshRateByDisplay = new SparseArray<>();
|
mAppPreferredRefreshRateRangeByDisplay = new SparseArray<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAppRequest(int displayId, int modeId, float requestedMaxRefreshRate) {
|
public void setAppRequest(int displayId, int modeId, float requestedMinRefreshRateRange,
|
||||||
|
float requestedMaxRefreshRateRange) {
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
setAppRequestedModeLocked(displayId, modeId);
|
setAppRequestedModeLocked(displayId, modeId);
|
||||||
setAppPreferredMaxRefreshRateLocked(displayId, requestedMaxRefreshRate);
|
setAppPreferredRefreshRateRangeLocked(displayId, requestedMinRefreshRateRange,
|
||||||
|
requestedMaxRefreshRateRange);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1272,26 +1276,36 @@ public class DisplayModeDirector {
|
|||||||
updateVoteLocked(displayId, Vote.PRIORITY_APP_REQUEST_SIZE, sizeVote);
|
updateVoteLocked(displayId, Vote.PRIORITY_APP_REQUEST_SIZE, sizeVote);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setAppPreferredMaxRefreshRateLocked(int displayId,
|
private void setAppPreferredRefreshRateRangeLocked(int displayId,
|
||||||
float requestedMaxRefreshRate) {
|
float requestedMinRefreshRateRange, float requestedMaxRefreshRateRange) {
|
||||||
final Vote vote;
|
final Vote vote;
|
||||||
final Float requestedMaxRefreshRateVote =
|
|
||||||
requestedMaxRefreshRate > 0
|
RefreshRateRange refreshRateRange = null;
|
||||||
? new Float(requestedMaxRefreshRate) : null;
|
if (requestedMinRefreshRateRange > 0 || requestedMaxRefreshRateRange > 0) {
|
||||||
if (Objects.equals(requestedMaxRefreshRateVote,
|
float min = requestedMinRefreshRateRange;
|
||||||
mAppPreferredMaxRefreshRateByDisplay.get(displayId))) {
|
float max = requestedMaxRefreshRateRange > 0
|
||||||
|
? requestedMaxRefreshRateRange : Float.POSITIVE_INFINITY;
|
||||||
|
refreshRateRange = new RefreshRateRange(min, max);
|
||||||
|
if (refreshRateRange.min == 0 && refreshRateRange.max == 0) {
|
||||||
|
// requestedMinRefreshRateRange/requestedMaxRefreshRateRange were invalid
|
||||||
|
refreshRateRange = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Objects.equals(refreshRateRange,
|
||||||
|
mAppPreferredRefreshRateRangeByDisplay.get(displayId))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (requestedMaxRefreshRate > 0) {
|
if (refreshRateRange != null) {
|
||||||
mAppPreferredMaxRefreshRateByDisplay.put(displayId, requestedMaxRefreshRateVote);
|
mAppPreferredRefreshRateRangeByDisplay.put(displayId, refreshRateRange);
|
||||||
vote = Vote.forRefreshRates(0, requestedMaxRefreshRate);
|
vote = Vote.forRefreshRates(refreshRateRange.min, refreshRateRange.max);
|
||||||
} else {
|
} else {
|
||||||
mAppPreferredMaxRefreshRateByDisplay.remove(displayId);
|
mAppPreferredRefreshRateRangeByDisplay.remove(displayId);
|
||||||
vote = null;
|
vote = null;
|
||||||
}
|
}
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
updateVoteLocked(displayId, Vote.PRIORITY_APP_REQUEST_MAX_REFRESH_RATE, vote);
|
updateVoteLocked(displayId, Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE, vote);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1316,11 +1330,12 @@ public class DisplayModeDirector {
|
|||||||
final Display.Mode mode = mAppRequestedModeByDisplay.valueAt(i);
|
final Display.Mode mode = mAppRequestedModeByDisplay.valueAt(i);
|
||||||
pw.println(" " + id + " -> " + mode);
|
pw.println(" " + id + " -> " + mode);
|
||||||
}
|
}
|
||||||
pw.println(" mAppPreferredMaxRefreshRateByDisplay:");
|
pw.println(" mAppPreferredRefreshRateRangeByDisplay:");
|
||||||
for (int i = 0; i < mAppPreferredMaxRefreshRateByDisplay.size(); i++) {
|
for (int i = 0; i < mAppPreferredRefreshRateRangeByDisplay.size(); i++) {
|
||||||
final int id = mAppPreferredMaxRefreshRateByDisplay.keyAt(i);
|
final int id = mAppPreferredRefreshRateRangeByDisplay.keyAt(i);
|
||||||
final Float refreshRate = mAppPreferredMaxRefreshRateByDisplay.valueAt(i);
|
final RefreshRateRange refreshRateRange =
|
||||||
pw.println(" " + id + " -> " + refreshRate);
|
mAppPreferredRefreshRateRangeByDisplay.valueAt(i);
|
||||||
|
pw.println(" " + id + " -> " + refreshRateRange);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -921,6 +921,14 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
mTmpApplySurfaceChangesTransactionState.preferredModeId = preferredModeId;
|
mTmpApplySurfaceChangesTransactionState.preferredModeId = preferredModeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final float preferredMinRefreshRate = getDisplayPolicy().getRefreshRatePolicy()
|
||||||
|
.getPreferredMinRefreshRate(w);
|
||||||
|
if (mTmpApplySurfaceChangesTransactionState.preferredMinRefreshRate == 0
|
||||||
|
&& preferredMinRefreshRate != 0) {
|
||||||
|
mTmpApplySurfaceChangesTransactionState.preferredMinRefreshRate =
|
||||||
|
preferredMinRefreshRate;
|
||||||
|
}
|
||||||
|
|
||||||
final float preferredMaxRefreshRate = getDisplayPolicy().getRefreshRatePolicy()
|
final float preferredMaxRefreshRate = getDisplayPolicy().getRefreshRatePolicy()
|
||||||
.getPreferredMaxRefreshRate(w);
|
.getPreferredMaxRefreshRate(w);
|
||||||
if (mTmpApplySurfaceChangesTransactionState.preferredMaxRefreshRate == 0
|
if (mTmpApplySurfaceChangesTransactionState.preferredMaxRefreshRate == 0
|
||||||
@@ -4330,6 +4338,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
mLastHasContent,
|
mLastHasContent,
|
||||||
mTmpApplySurfaceChangesTransactionState.preferredRefreshRate,
|
mTmpApplySurfaceChangesTransactionState.preferredRefreshRate,
|
||||||
mTmpApplySurfaceChangesTransactionState.preferredModeId,
|
mTmpApplySurfaceChangesTransactionState.preferredModeId,
|
||||||
|
mTmpApplySurfaceChangesTransactionState.preferredMinRefreshRate,
|
||||||
mTmpApplySurfaceChangesTransactionState.preferredMaxRefreshRate,
|
mTmpApplySurfaceChangesTransactionState.preferredMaxRefreshRate,
|
||||||
mTmpApplySurfaceChangesTransactionState.preferMinimalPostProcessing,
|
mTmpApplySurfaceChangesTransactionState.preferMinimalPostProcessing,
|
||||||
true /* inTraversal, must call performTraversalInTrans... below */);
|
true /* inTraversal, must call performTraversalInTrans... below */);
|
||||||
@@ -4620,6 +4629,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
public boolean preferMinimalPostProcessing;
|
public boolean preferMinimalPostProcessing;
|
||||||
public float preferredRefreshRate;
|
public float preferredRefreshRate;
|
||||||
public int preferredModeId;
|
public int preferredModeId;
|
||||||
|
public float preferredMinRefreshRate;
|
||||||
public float preferredMaxRefreshRate;
|
public float preferredMaxRefreshRate;
|
||||||
|
|
||||||
void reset() {
|
void reset() {
|
||||||
@@ -4629,6 +4639,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
preferMinimalPostProcessing = false;
|
preferMinimalPostProcessing = false;
|
||||||
preferredRefreshRate = 0;
|
preferredRefreshRate = 0;
|
||||||
preferredModeId = 0;
|
preferredModeId = 0;
|
||||||
|
preferredMinRefreshRate = 0;
|
||||||
preferredMaxRefreshRate = 0;
|
preferredMaxRefreshRate = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,6 +154,21 @@ class RefreshRatePolicy {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float getPreferredMinRefreshRate(WindowState w) {
|
||||||
|
// If app is animating, it's not able to control refresh rate because we want the animation
|
||||||
|
// to run in default refresh rate.
|
||||||
|
if (w.isAnimating(TRANSITION | PARENTS)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If app requests a certain refresh rate or mode, don't override it.
|
||||||
|
if (w.mAttrs.preferredDisplayModeId != 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return w.mAttrs.preferredMinDisplayRefreshRate;
|
||||||
|
}
|
||||||
|
|
||||||
float getPreferredMaxRefreshRate(WindowState w) {
|
float getPreferredMaxRefreshRate(WindowState w) {
|
||||||
// If app is animating, it's not able to control refresh rate because we want the animation
|
// If app is animating, it's not able to control refresh rate because we want the animation
|
||||||
// to run in default refresh rate.
|
// to run in default refresh rate.
|
||||||
|
|||||||
@@ -900,10 +900,10 @@ public class DisplayModeDirectorTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAppRequestMaxRefreshRate() {
|
public void testAppRequestMinRefreshRate() {
|
||||||
// Confirm that the app max request range doesn't include flicker or min refresh rate
|
// Confirm that the app min request range doesn't include flicker or min refresh rate
|
||||||
// settings but does include everything else.
|
// settings but does include everything else.
|
||||||
assertTrue(Vote.PRIORITY_APP_REQUEST_MAX_REFRESH_RATE
|
assertTrue(Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE
|
||||||
>= Vote.APP_REQUEST_REFRESH_RATE_RANGE_PRIORITY_CUTOFF);
|
>= Vote.APP_REQUEST_REFRESH_RATE_RANGE_PRIORITY_CUTOFF);
|
||||||
|
|
||||||
Display.Mode[] modes = new Display.Mode[3];
|
Display.Mode[] modes = new Display.Mode[3];
|
||||||
@@ -936,7 +936,54 @@ public class DisplayModeDirectorTest {
|
|||||||
assertThat(desiredSpecs.appRequestRefreshRateRange.min).isAtMost(60f);
|
assertThat(desiredSpecs.appRequestRefreshRateRange.min).isAtMost(60f);
|
||||||
assertThat(desiredSpecs.appRequestRefreshRateRange.max).isAtLeast(90f);
|
assertThat(desiredSpecs.appRequestRefreshRateRange.max).isAtLeast(90f);
|
||||||
|
|
||||||
votes.put(Vote.PRIORITY_APP_REQUEST_MAX_REFRESH_RATE, Vote.forRefreshRates(0, 75));
|
votes.put(Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE,
|
||||||
|
Vote.forRefreshRates(75, Float.POSITIVE_INFINITY));
|
||||||
|
director.injectVotesByDisplay(votesByDisplay);
|
||||||
|
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||||
|
assertThat(desiredSpecs.primaryRefreshRateRange.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||||
|
assertThat(desiredSpecs.primaryRefreshRateRange.max).isWithin(FLOAT_TOLERANCE).of(90);
|
||||||
|
assertThat(desiredSpecs.appRequestRefreshRateRange.min).isWithin(FLOAT_TOLERANCE).of(75);
|
||||||
|
assertThat(desiredSpecs.appRequestRefreshRateRange.max).isAtLeast(90f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
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_REFRESH_RATE_RANGE
|
||||||
|
>= Vote.APP_REQUEST_REFRESH_RATE_RANGE_PRIORITY_CUTOFF);
|
||||||
|
|
||||||
|
Display.Mode[] modes = new Display.Mode[3];
|
||||||
|
modes[0] = new Display.Mode(
|
||||||
|
/*modeId=*/60, /*width=*/1000, /*height=*/1000, 60);
|
||||||
|
modes[1] = new Display.Mode(
|
||||||
|
/*modeId=*/75, /*width=*/1000, /*height=*/1000, 75);
|
||||||
|
modes[2] = new Display.Mode(
|
||||||
|
/*modeId=*/90, /*width=*/1000, /*height=*/1000, 90);
|
||||||
|
|
||||||
|
DisplayModeDirector director = createDirectorFromModeArray(modes, modes[1]);
|
||||||
|
SparseArray<Vote> votes = new SparseArray<>();
|
||||||
|
SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>();
|
||||||
|
votesByDisplay.put(DISPLAY_ID, votes);
|
||||||
|
votes.put(Vote.PRIORITY_FLICKER_REFRESH_RATE_SWITCH, Vote.forDisableRefreshRateSwitching());
|
||||||
|
votes.put(Vote.PRIORITY_FLICKER_REFRESH_RATE, Vote.forRefreshRates(60, 60));
|
||||||
|
director.injectVotesByDisplay(votesByDisplay);
|
||||||
|
DesiredDisplayModeSpecs desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||||
|
assertThat(desiredSpecs.primaryRefreshRateRange.min).isWithin(FLOAT_TOLERANCE).of(60);
|
||||||
|
assertThat(desiredSpecs.primaryRefreshRateRange.max).isWithin(FLOAT_TOLERANCE).of(60);
|
||||||
|
assertThat(desiredSpecs.appRequestRefreshRateRange.min).isAtMost(60f);
|
||||||
|
assertThat(desiredSpecs.appRequestRefreshRateRange.max).isAtLeast(90f);
|
||||||
|
|
||||||
|
votes.put(Vote.PRIORITY_USER_SETTING_MIN_REFRESH_RATE,
|
||||||
|
Vote.forRefreshRates(90, Float.POSITIVE_INFINITY));
|
||||||
|
director.injectVotesByDisplay(votesByDisplay);
|
||||||
|
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||||
|
assertThat(desiredSpecs.primaryRefreshRateRange.min).isWithin(FLOAT_TOLERANCE).of(90);
|
||||||
|
assertThat(desiredSpecs.primaryRefreshRateRange.max).isAtLeast(90f);
|
||||||
|
assertThat(desiredSpecs.appRequestRefreshRateRange.min).isAtMost(60f);
|
||||||
|
assertThat(desiredSpecs.appRequestRefreshRateRange.max).isAtLeast(90f);
|
||||||
|
|
||||||
|
votes.put(Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE, Vote.forRefreshRates(0, 75));
|
||||||
director.injectVotesByDisplay(votesByDisplay);
|
director.injectVotesByDisplay(votesByDisplay);
|
||||||
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID);
|
||||||
assertThat(desiredSpecs.primaryRefreshRateRange.min).isWithin(FLOAT_TOLERANCE).of(75);
|
assertThat(desiredSpecs.primaryRefreshRateRange.min).isWithin(FLOAT_TOLERANCE).of(75);
|
||||||
@@ -948,7 +995,7 @@ public class DisplayModeDirectorTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testAppRequestObserver_modeId() {
|
public void testAppRequestObserver_modeId() {
|
||||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
||||||
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, 60, 0);
|
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, 60, 0, 0);
|
||||||
|
|
||||||
Vote appRequestRefreshRate =
|
Vote appRequestRefreshRate =
|
||||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
||||||
@@ -969,11 +1016,11 @@ public class DisplayModeDirectorTest {
|
|||||||
assertThat(appRequestSize.height).isEqualTo(1000);
|
assertThat(appRequestSize.height).isEqualTo(1000);
|
||||||
assertThat(appRequestSize.width).isEqualTo(1000);
|
assertThat(appRequestSize.width).isEqualTo(1000);
|
||||||
|
|
||||||
Vote appRequestMaxRefreshRate =
|
Vote appRequestRefreshRateRange =
|
||||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_MAX_REFRESH_RATE);
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE);
|
||||||
assertNull(appRequestMaxRefreshRate);
|
assertNull(appRequestRefreshRateRange);
|
||||||
|
|
||||||
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, 90, 0);
|
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, 90, 0, 0);
|
||||||
|
|
||||||
appRequestRefreshRate =
|
appRequestRefreshRate =
|
||||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
||||||
@@ -992,15 +1039,15 @@ public class DisplayModeDirectorTest {
|
|||||||
assertThat(appRequestSize.height).isEqualTo(1000);
|
assertThat(appRequestSize.height).isEqualTo(1000);
|
||||||
assertThat(appRequestSize.width).isEqualTo(1000);
|
assertThat(appRequestSize.width).isEqualTo(1000);
|
||||||
|
|
||||||
appRequestMaxRefreshRate =
|
appRequestRefreshRateRange =
|
||||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_MAX_REFRESH_RATE);
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE);
|
||||||
assertNull(appRequestMaxRefreshRate);
|
assertNull(appRequestRefreshRateRange);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAppRequestObserver_maxRefreshRate() {
|
public void testAppRequestObserver_minRefreshRate() {
|
||||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
||||||
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, -1, 90);
|
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, -1, 60, 0);
|
||||||
Vote appRequestRefreshRate =
|
Vote appRequestRefreshRate =
|
||||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
||||||
assertNull(appRequestRefreshRate);
|
assertNull(appRequestRefreshRate);
|
||||||
@@ -1008,15 +1055,16 @@ public class DisplayModeDirectorTest {
|
|||||||
Vote appRequestSize = director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_SIZE);
|
Vote appRequestSize = director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_SIZE);
|
||||||
assertNull(appRequestSize);
|
assertNull(appRequestSize);
|
||||||
|
|
||||||
Vote appRequestMaxRefreshRate =
|
Vote appRequestRefreshRateRange =
|
||||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_MAX_REFRESH_RATE);
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE);
|
||||||
assertNotNull(appRequestMaxRefreshRate);
|
assertNotNull(appRequestRefreshRateRange);
|
||||||
assertThat(appRequestMaxRefreshRate.refreshRateRange.min).isZero();
|
assertThat(appRequestRefreshRateRange.refreshRateRange.min)
|
||||||
assertThat(appRequestMaxRefreshRate.refreshRateRange.max).isWithin(FLOAT_TOLERANCE).of(90);
|
.isWithin(FLOAT_TOLERANCE).of(60);
|
||||||
assertThat(appRequestMaxRefreshRate.height).isEqualTo(INVALID_SIZE);
|
assertThat(appRequestRefreshRateRange.refreshRateRange.max).isAtLeast(90);
|
||||||
assertThat(appRequestMaxRefreshRate.width).isEqualTo(INVALID_SIZE);
|
assertThat(appRequestRefreshRateRange.height).isEqualTo(INVALID_SIZE);
|
||||||
|
assertThat(appRequestRefreshRateRange.width).isEqualTo(INVALID_SIZE);
|
||||||
|
|
||||||
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, -1, 60);
|
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, -1, 90, 0);
|
||||||
appRequestRefreshRate =
|
appRequestRefreshRate =
|
||||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
||||||
assertNull(appRequestRefreshRate);
|
assertNull(appRequestRefreshRate);
|
||||||
@@ -1024,19 +1072,74 @@ public class DisplayModeDirectorTest {
|
|||||||
appRequestSize = director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_SIZE);
|
appRequestSize = director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_SIZE);
|
||||||
assertNull(appRequestSize);
|
assertNull(appRequestSize);
|
||||||
|
|
||||||
appRequestMaxRefreshRate =
|
appRequestRefreshRateRange =
|
||||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_MAX_REFRESH_RATE);
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE);
|
||||||
assertNotNull(appRequestMaxRefreshRate);
|
assertNotNull(appRequestRefreshRateRange);
|
||||||
assertThat(appRequestMaxRefreshRate.refreshRateRange.min).isZero();
|
assertThat(appRequestRefreshRateRange.refreshRateRange.min)
|
||||||
assertThat(appRequestMaxRefreshRate.refreshRateRange.max).isWithin(FLOAT_TOLERANCE).of(60);
|
.isWithin(FLOAT_TOLERANCE).of(90);
|
||||||
assertThat(appRequestMaxRefreshRate.height).isEqualTo(INVALID_SIZE);
|
assertThat(appRequestRefreshRateRange.refreshRateRange.max).isAtLeast(90);
|
||||||
assertThat(appRequestMaxRefreshRate.width).isEqualTo(INVALID_SIZE);
|
assertThat(appRequestRefreshRateRange.height).isEqualTo(INVALID_SIZE);
|
||||||
|
assertThat(appRequestRefreshRateRange.width).isEqualTo(INVALID_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAppRequestObserver_modeIdAndMaxRefreshRate() {
|
public void testAppRequestObserver_maxRefreshRate() {
|
||||||
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
||||||
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, 60, 90);
|
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, -1, 0, 90);
|
||||||
|
Vote appRequestRefreshRate =
|
||||||
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
||||||
|
assertNull(appRequestRefreshRate);
|
||||||
|
|
||||||
|
Vote appRequestSize = director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_SIZE);
|
||||||
|
assertNull(appRequestSize);
|
||||||
|
|
||||||
|
Vote appRequestRefreshRateRange =
|
||||||
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE);
|
||||||
|
assertNotNull(appRequestRefreshRateRange);
|
||||||
|
assertThat(appRequestRefreshRateRange.refreshRateRange.min).isZero();
|
||||||
|
assertThat(appRequestRefreshRateRange.refreshRateRange.max)
|
||||||
|
.isWithin(FLOAT_TOLERANCE).of(90);
|
||||||
|
assertThat(appRequestRefreshRateRange.height).isEqualTo(INVALID_SIZE);
|
||||||
|
assertThat(appRequestRefreshRateRange.width).isEqualTo(INVALID_SIZE);
|
||||||
|
|
||||||
|
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, -1, 0, 60);
|
||||||
|
appRequestRefreshRate =
|
||||||
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
||||||
|
assertNull(appRequestRefreshRate);
|
||||||
|
|
||||||
|
appRequestSize = director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_SIZE);
|
||||||
|
assertNull(appRequestSize);
|
||||||
|
|
||||||
|
appRequestRefreshRateRange =
|
||||||
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE);
|
||||||
|
assertNotNull(appRequestRefreshRateRange);
|
||||||
|
assertThat(appRequestRefreshRateRange.refreshRateRange.min).isZero();
|
||||||
|
assertThat(appRequestRefreshRateRange.refreshRateRange.max)
|
||||||
|
.isWithin(FLOAT_TOLERANCE).of(60);
|
||||||
|
assertThat(appRequestRefreshRateRange.height).isEqualTo(INVALID_SIZE);
|
||||||
|
assertThat(appRequestRefreshRateRange.width).isEqualTo(INVALID_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAppRequestObserver_invalidRefreshRateRange() {
|
||||||
|
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
||||||
|
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, -1, 90, 60);
|
||||||
|
Vote appRequestRefreshRate =
|
||||||
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
||||||
|
assertNull(appRequestRefreshRate);
|
||||||
|
|
||||||
|
Vote appRequestSize = director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_SIZE);
|
||||||
|
assertNull(appRequestSize);
|
||||||
|
|
||||||
|
Vote appRequestRefreshRateRange =
|
||||||
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE);
|
||||||
|
assertNull(appRequestRefreshRateRange);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAppRequestObserver_modeIdAndRefreshRateRange() {
|
||||||
|
DisplayModeDirector director = createDirectorFromFpsRange(60, 90);
|
||||||
|
director.getAppRequestObserver().setAppRequest(DISPLAY_ID, 60, 90, 90);
|
||||||
|
|
||||||
Vote appRequestRefreshRate =
|
Vote appRequestRefreshRate =
|
||||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE);
|
||||||
@@ -1056,13 +1159,15 @@ public class DisplayModeDirectorTest {
|
|||||||
assertThat(appRequestSize.height).isEqualTo(1000);
|
assertThat(appRequestSize.height).isEqualTo(1000);
|
||||||
assertThat(appRequestSize.width).isEqualTo(1000);
|
assertThat(appRequestSize.width).isEqualTo(1000);
|
||||||
|
|
||||||
Vote appRequestMaxRefreshRate =
|
Vote appRequestRefreshRateRange =
|
||||||
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_MAX_REFRESH_RATE);
|
director.getVote(DISPLAY_ID, Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE);
|
||||||
assertNotNull(appRequestMaxRefreshRate);
|
assertNotNull(appRequestRefreshRateRange);
|
||||||
assertThat(appRequestMaxRefreshRate.refreshRateRange.min).isZero();
|
assertThat(appRequestRefreshRateRange.refreshRateRange.max)
|
||||||
assertThat(appRequestMaxRefreshRate.refreshRateRange.max).isWithin(FLOAT_TOLERANCE).of(90);
|
.isWithin(FLOAT_TOLERANCE).of(90);
|
||||||
assertThat(appRequestMaxRefreshRate.height).isEqualTo(INVALID_SIZE);
|
assertThat(appRequestRefreshRateRange.refreshRateRange.max)
|
||||||
assertThat(appRequestMaxRefreshRate.width).isEqualTo(INVALID_SIZE);
|
.isWithin(FLOAT_TOLERANCE).of(90);
|
||||||
|
assertThat(appRequestRefreshRateRange.height).isEqualTo(INVALID_SIZE);
|
||||||
|
assertThat(appRequestRefreshRateRange.width).isEqualTo(INVALID_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1161,7 +1266,7 @@ public class DisplayModeDirectorTest {
|
|||||||
assertThat(desiredSpecs.baseModeId).isEqualTo(55);
|
assertThat(desiredSpecs.baseModeId).isEqualTo(55);
|
||||||
|
|
||||||
votes.clear();
|
votes.clear();
|
||||||
votes.put(Vote.PRIORITY_APP_REQUEST_MAX_REFRESH_RATE, Vote.forRefreshRates(0, 52));
|
votes.put(Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE, Vote.forRefreshRates(0, 52));
|
||||||
votes.put(Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE,
|
votes.put(Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE,
|
||||||
Vote.forBaseModeRefreshRate(55));
|
Vote.forBaseModeRefreshRate(55));
|
||||||
votes.put(Vote.PRIORITY_LOW_POWER_MODE, Vote.forRefreshRates(0, 60));
|
votes.put(Vote.PRIORITY_LOW_POWER_MODE, Vote.forRefreshRates(0, 60));
|
||||||
@@ -1172,7 +1277,7 @@ public class DisplayModeDirectorTest {
|
|||||||
assertThat(desiredSpecs.baseModeId).isEqualTo(55);
|
assertThat(desiredSpecs.baseModeId).isEqualTo(55);
|
||||||
|
|
||||||
votes.clear();
|
votes.clear();
|
||||||
votes.put(Vote.PRIORITY_APP_REQUEST_MAX_REFRESH_RATE, Vote.forRefreshRates(0, 58));
|
votes.put(Vote.PRIORITY_APP_REQUEST_REFRESH_RATE_RANGE, Vote.forRefreshRates(0, 58));
|
||||||
votes.put(Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE,
|
votes.put(Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE,
|
||||||
Vote.forBaseModeRefreshRate(55));
|
Vote.forBaseModeRefreshRate(55));
|
||||||
votes.put(Vote.PRIORITY_LOW_POWER_MODE, Vote.forRefreshRates(0, 60));
|
votes.put(Vote.PRIORITY_LOW_POWER_MODE, Vote.forRefreshRates(0, 60));
|
||||||
|
|||||||
@@ -84,10 +84,12 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
parcelLayoutParams(cameraUsingWindow);
|
parcelLayoutParams(cameraUsingWindow);
|
||||||
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
||||||
assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
||||||
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
||||||
assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
assertEquals(60, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
assertEquals(60, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
mPolicy.removeNonHighRefreshRatePackage("com.android.test");
|
mPolicy.removeNonHighRefreshRatePackage("com.android.test");
|
||||||
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
||||||
@@ -127,6 +129,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
||||||
assertEquals(LOW_MODE_ID, mPolicy.getPreferredModeId(overrideWindow));
|
assertEquals(LOW_MODE_ID, mPolicy.getPreferredModeId(overrideWindow));
|
||||||
assertEquals(0, mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||||
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,6 +146,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
||||||
assertEquals(0, mPolicy.getPreferredModeId(overrideWindow));
|
assertEquals(0, mPolicy.getPreferredModeId(overrideWindow));
|
||||||
assertEquals(0, mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||||
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,6 +160,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
||||||
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
||||||
assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
assertEquals(60, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
assertEquals(60, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
|
|
||||||
cameraUsingWindow.mActivityRecord.mSurfaceAnimator.startAnimation(
|
cameraUsingWindow.mActivityRecord.mSurfaceAnimator.startAnimation(
|
||||||
@@ -163,6 +168,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
false /* hidden */, ANIMATION_TYPE_APP_TRANSITION);
|
false /* hidden */, ANIMATION_TYPE_APP_TRANSITION);
|
||||||
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
||||||
assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,8 +179,28 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
parcelLayoutParams(window);
|
parcelLayoutParams(window);
|
||||||
assertEquals(0, mPolicy.getPreferredModeId(window));
|
assertEquals(0, mPolicy.getPreferredModeId(window));
|
||||||
assertEquals(0, mPolicy.getPreferredRefreshRate(window), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMinRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
assertEquals(60, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE);
|
assertEquals(60, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
|
||||||
|
window.mActivityRecord.mSurfaceAnimator.startAnimation(
|
||||||
|
window.getPendingTransaction(), mock(AnimationAdapter.class),
|
||||||
|
false /* hidden */, ANIMATION_TYPE_APP_TRANSITION);
|
||||||
|
assertEquals(0, mPolicy.getPreferredModeId(window));
|
||||||
|
assertEquals(0, mPolicy.getPreferredRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMinRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAppMinRefreshRate() {
|
||||||
|
final WindowState window = createWindow(null, TYPE_BASE_APPLICATION, "window");
|
||||||
|
window.mAttrs.preferredMinDisplayRefreshRate = 60f;
|
||||||
|
parcelLayoutParams(window);
|
||||||
|
assertEquals(0, mPolicy.getPreferredModeId(window));
|
||||||
|
assertEquals(0, mPolicy.getPreferredRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(60, mPolicy.getPreferredMinRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
|
||||||
window.mActivityRecord.mSurfaceAnimator.startAnimation(
|
window.mActivityRecord.mSurfaceAnimator.startAnimation(
|
||||||
window.getPendingTransaction(), mock(AnimationAdapter.class),
|
window.getPendingTransaction(), mock(AnimationAdapter.class),
|
||||||
false /* hidden */, ANIMATION_TYPE_APP_TRANSITION);
|
false /* hidden */, ANIMATION_TYPE_APP_TRANSITION);
|
||||||
@@ -182,4 +208,15 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
assertEquals(0, mPolicy.getPreferredRefreshRate(window), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAppPreferredRefreshRate() {
|
||||||
|
final WindowState window = createWindow(null, TYPE_BASE_APPLICATION, "window");
|
||||||
|
window.mAttrs.preferredRefreshRate = 60f;
|
||||||
|
parcelLayoutParams(window);
|
||||||
|
assertEquals(0, mPolicy.getPreferredModeId(window));
|
||||||
|
assertEquals(60, mPolicy.getPreferredRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMinRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user