Merge "WM: add missing plumbing for preferredMaxDisplayRefreshRate" into sc-dev
This commit is contained in:
@@ -3781,6 +3781,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(preferredMaxDisplayRefreshRate);
|
||||||
out.writeInt(systemUiVisibility);
|
out.writeInt(systemUiVisibility);
|
||||||
out.writeInt(subtreeSystemUiVisibility);
|
out.writeInt(subtreeSystemUiVisibility);
|
||||||
out.writeBoolean(hasSystemUiListeners);
|
out.writeBoolean(hasSystemUiListeners);
|
||||||
@@ -3851,6 +3852,7 @@ public interface WindowManager extends ViewManager {
|
|||||||
screenOrientation = in.readInt();
|
screenOrientation = in.readInt();
|
||||||
preferredRefreshRate = in.readFloat();
|
preferredRefreshRate = in.readFloat();
|
||||||
preferredDisplayModeId = in.readInt();
|
preferredDisplayModeId = in.readInt();
|
||||||
|
preferredMaxDisplayRefreshRate = in.readFloat();
|
||||||
systemUiVisibility = in.readInt();
|
systemUiVisibility = in.readInt();
|
||||||
subtreeSystemUiVisibility = in.readInt();
|
subtreeSystemUiVisibility = in.readInt();
|
||||||
hasSystemUiListeners = in.readBoolean();
|
hasSystemUiListeners = in.readBoolean();
|
||||||
@@ -3928,6 +3930,8 @@ public interface WindowManager extends ViewManager {
|
|||||||
public static final int MINIMAL_POST_PROCESSING_PREFERENCE_CHANGED = 1 << 28;
|
public static final int MINIMAL_POST_PROCESSING_PREFERENCE_CHANGED = 1 << 28;
|
||||||
/** {@hide} */
|
/** {@hide} */
|
||||||
public static final int BLUR_BEHIND_RADIUS_CHANGED = 1 << 29;
|
public static final int BLUR_BEHIND_RADIUS_CHANGED = 1 << 29;
|
||||||
|
/** {@hide} */
|
||||||
|
public static final int PREFERRED_MAX_DISPLAY_REFRESH_RATE = 1 << 30;
|
||||||
|
|
||||||
// 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;
|
||||||
@@ -4059,6 +4063,11 @@ public interface WindowManager extends ViewManager {
|
|||||||
changes |= PREFERRED_DISPLAY_MODE_ID;
|
changes |= PREFERRED_DISPLAY_MODE_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (preferredMaxDisplayRefreshRate != o.preferredMaxDisplayRefreshRate) {
|
||||||
|
preferredMaxDisplayRefreshRate = o.preferredMaxDisplayRefreshRate;
|
||||||
|
changes |= PREFERRED_MAX_DISPLAY_REFRESH_RATE;
|
||||||
|
}
|
||||||
|
|
||||||
if (systemUiVisibility != o.systemUiVisibility
|
if (systemUiVisibility != o.systemUiVisibility
|
||||||
|| subtreeSystemUiVisibility != o.subtreeSystemUiVisibility) {
|
|| subtreeSystemUiVisibility != o.subtreeSystemUiVisibility) {
|
||||||
systemUiVisibility = o.systemUiVisibility;
|
systemUiVisibility = o.systemUiVisibility;
|
||||||
@@ -4263,6 +4272,10 @@ public interface WindowManager extends ViewManager {
|
|||||||
sb.append(" preferredDisplayMode=");
|
sb.append(" preferredDisplayMode=");
|
||||||
sb.append(preferredDisplayModeId);
|
sb.append(preferredDisplayModeId);
|
||||||
}
|
}
|
||||||
|
if (preferredMaxDisplayRefreshRate != 0) {
|
||||||
|
sb.append(" preferredMaxDisplayRefreshRate=");
|
||||||
|
sb.append(preferredMaxDisplayRefreshRate);
|
||||||
|
}
|
||||||
if (hasSystemUiListeners) {
|
if (hasSystemUiListeners) {
|
||||||
sb.append(" sysuil=");
|
sb.append(" sysuil=");
|
||||||
sb.append(hasSystemUiListeners);
|
sb.append(hasSystemUiListeners);
|
||||||
|
|||||||
@@ -24,9 +24,11 @@ import static org.junit.Assert.assertEquals;
|
|||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
import android.platform.test.annotations.Presubmit;
|
import android.platform.test.annotations.Presubmit;
|
||||||
import android.view.Display.Mode;
|
import android.view.Display.Mode;
|
||||||
import android.view.DisplayInfo;
|
import android.view.DisplayInfo;
|
||||||
|
import android.view.WindowManager.LayoutParams;
|
||||||
|
|
||||||
import androidx.test.filters.FlakyTest;
|
import androidx.test.filters.FlakyTest;
|
||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
@@ -50,6 +52,16 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
private RefreshRatePolicy mPolicy;
|
private RefreshRatePolicy mPolicy;
|
||||||
private HighRefreshRateDenylist mDenylist = mock(HighRefreshRateDenylist.class);
|
private HighRefreshRateDenylist mDenylist = mock(HighRefreshRateDenylist.class);
|
||||||
|
|
||||||
|
// Parcel and Unparcel the LayoutParams in the window state to test the path the object
|
||||||
|
// travels from the app's process to system server
|
||||||
|
void parcelLayoutParams(WindowState window) {
|
||||||
|
Parcel parcel = Parcel.obtain();
|
||||||
|
window.mAttrs.writeToParcel(parcel, 0);
|
||||||
|
parcel.setDataPosition(0);
|
||||||
|
window.mAttrs.copyFrom(new LayoutParams(parcel));
|
||||||
|
parcel.recycle();
|
||||||
|
}
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
DisplayInfo di = new DisplayInfo(mDisplayInfo);
|
DisplayInfo di = new DisplayInfo(mDisplayInfo);
|
||||||
@@ -69,6 +81,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
final WindowState cameraUsingWindow = createWindow(null, TYPE_BASE_APPLICATION,
|
final WindowState cameraUsingWindow = createWindow(null, TYPE_BASE_APPLICATION,
|
||||||
"cameraUsingWindow");
|
"cameraUsingWindow");
|
||||||
cameraUsingWindow.mAttrs.packageName = "com.android.test";
|
cameraUsingWindow.mAttrs.packageName = "com.android.test";
|
||||||
|
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.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||||
@@ -86,6 +99,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
final WindowState denylistedWindow = createWindow(null, TYPE_BASE_APPLICATION,
|
final WindowState denylistedWindow = createWindow(null, TYPE_BASE_APPLICATION,
|
||||||
"denylistedWindow");
|
"denylistedWindow");
|
||||||
denylistedWindow.mAttrs.packageName = "com.android.test";
|
denylistedWindow.mAttrs.packageName = "com.android.test";
|
||||||
|
parcelLayoutParams(denylistedWindow);
|
||||||
when(mDenylist.isDenylisted("com.android.test")).thenReturn(true);
|
when(mDenylist.isDenylisted("com.android.test")).thenReturn(true);
|
||||||
assertEquals(0, mPolicy.getPreferredModeId(denylistedWindow));
|
assertEquals(0, mPolicy.getPreferredModeId(denylistedWindow));
|
||||||
assertEquals(60, mPolicy.getPreferredRefreshRate(denylistedWindow), FLOAT_TOLERANCE);
|
assertEquals(60, mPolicy.getPreferredRefreshRate(denylistedWindow), FLOAT_TOLERANCE);
|
||||||
@@ -97,6 +111,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
"overrideWindow");
|
"overrideWindow");
|
||||||
overrideWindow.mAttrs.packageName = "com.android.test";
|
overrideWindow.mAttrs.packageName = "com.android.test";
|
||||||
overrideWindow.mAttrs.preferredDisplayModeId = LOW_MODE_ID;
|
overrideWindow.mAttrs.preferredDisplayModeId = LOW_MODE_ID;
|
||||||
|
parcelLayoutParams(overrideWindow);
|
||||||
when(mDenylist.isDenylisted("com.android.test")).thenReturn(true);
|
when(mDenylist.isDenylisted("com.android.test")).thenReturn(true);
|
||||||
assertEquals(LOW_MODE_ID, mPolicy.getPreferredModeId(overrideWindow));
|
assertEquals(LOW_MODE_ID, mPolicy.getPreferredModeId(overrideWindow));
|
||||||
assertEquals(60, mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
assertEquals(60, mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||||
@@ -108,6 +123,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
"overrideWindow");
|
"overrideWindow");
|
||||||
overrideWindow.mAttrs.packageName = "com.android.test";
|
overrideWindow.mAttrs.packageName = "com.android.test";
|
||||||
overrideWindow.mAttrs.preferredDisplayModeId = LOW_MODE_ID;
|
overrideWindow.mAttrs.preferredDisplayModeId = LOW_MODE_ID;
|
||||||
|
parcelLayoutParams(overrideWindow);
|
||||||
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);
|
||||||
@@ -120,6 +136,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
"overrideWindow");
|
"overrideWindow");
|
||||||
overrideWindow.mAttrs.packageName = "com.android.test";
|
overrideWindow.mAttrs.packageName = "com.android.test";
|
||||||
overrideWindow.mAttrs.preferredDisplayModeId = LOW_MODE_ID;
|
overrideWindow.mAttrs.preferredDisplayModeId = LOW_MODE_ID;
|
||||||
|
parcelLayoutParams(overrideWindow);
|
||||||
overrideWindow.mActivityRecord.mSurfaceAnimator.startAnimation(
|
overrideWindow.mActivityRecord.mSurfaceAnimator.startAnimation(
|
||||||
overrideWindow.getPendingTransaction(), mock(AnimationAdapter.class),
|
overrideWindow.getPendingTransaction(), mock(AnimationAdapter.class),
|
||||||
false /* hidden */, ANIMATION_TYPE_APP_TRANSITION);
|
false /* hidden */, ANIMATION_TYPE_APP_TRANSITION);
|
||||||
@@ -134,6 +151,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
final WindowState cameraUsingWindow = createWindow(null, TYPE_BASE_APPLICATION,
|
final WindowState cameraUsingWindow = createWindow(null, TYPE_BASE_APPLICATION,
|
||||||
"cameraUsingWindow");
|
"cameraUsingWindow");
|
||||||
cameraUsingWindow.mAttrs.packageName = "com.android.test";
|
cameraUsingWindow.mAttrs.packageName = "com.android.test";
|
||||||
|
parcelLayoutParams(cameraUsingWindow);
|
||||||
|
|
||||||
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
||||||
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
||||||
@@ -152,6 +170,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
|||||||
public void testAppMaxRefreshRate() {
|
public void testAppMaxRefreshRate() {
|
||||||
final WindowState window = createWindow(null, TYPE_BASE_APPLICATION, "window");
|
final WindowState window = createWindow(null, TYPE_BASE_APPLICATION, "window");
|
||||||
window.mAttrs.preferredMaxDisplayRefreshRate = 60f;
|
window.mAttrs.preferredMaxDisplayRefreshRate = 60f;
|
||||||
|
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(60, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE);
|
assertEquals(60, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE);
|
||||||
|
|||||||
Reference in New Issue
Block a user