Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6ab505d7 authored by Ady Abraham's avatar Ady Abraham Committed by Automerger Merge Worker
Browse files

Merge "WM: add missing plumbing for preferredMaxDisplayRefreshRate" into sc-dev am: 8dff5292

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15133561

Change-Id: I3aed7abeb964794f24c1bf0703d35bbc7d360736
parents abe20233 8dff5292
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -3781,6 +3781,7 @@ public interface WindowManager extends ViewManager {
            out.writeInt(screenOrientation);
            out.writeFloat(preferredRefreshRate);
            out.writeInt(preferredDisplayModeId);
            out.writeFloat(preferredMaxDisplayRefreshRate);
            out.writeInt(systemUiVisibility);
            out.writeInt(subtreeSystemUiVisibility);
            out.writeBoolean(hasSystemUiListeners);
@@ -3851,6 +3852,7 @@ public interface WindowManager extends ViewManager {
            screenOrientation = in.readInt();
            preferredRefreshRate = in.readFloat();
            preferredDisplayModeId = in.readInt();
            preferredMaxDisplayRefreshRate = in.readFloat();
            systemUiVisibility = in.readInt();
            subtreeSystemUiVisibility = in.readInt();
            hasSystemUiListeners = in.readBoolean();
@@ -3928,6 +3930,8 @@ public interface WindowManager extends ViewManager {
        public static final int MINIMAL_POST_PROCESSING_PREFERENCE_CHANGED = 1 << 28;
        /** {@hide} */
        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.
        private int[] mCompatibilityParamsBackup = null;
@@ -4059,6 +4063,11 @@ public interface WindowManager extends ViewManager {
                changes |= PREFERRED_DISPLAY_MODE_ID;
            }

            if (preferredMaxDisplayRefreshRate != o.preferredMaxDisplayRefreshRate) {
                preferredMaxDisplayRefreshRate = o.preferredMaxDisplayRefreshRate;
                changes |= PREFERRED_MAX_DISPLAY_REFRESH_RATE;
            }

            if (systemUiVisibility != o.systemUiVisibility
                    || subtreeSystemUiVisibility != o.subtreeSystemUiVisibility) {
                systemUiVisibility = o.systemUiVisibility;
@@ -4263,6 +4272,10 @@ public interface WindowManager extends ViewManager {
                sb.append(" preferredDisplayMode=");
                sb.append(preferredDisplayModeId);
            }
            if (preferredMaxDisplayRefreshRate != 0) {
                sb.append(" preferredMaxDisplayRefreshRate=");
                sb.append(preferredMaxDisplayRefreshRate);
            }
            if (hasSystemUiListeners) {
                sb.append(" sysuil=");
                sb.append(hasSystemUiListeners);
+19 −0
Original line number Diff line number Diff line
@@ -24,9 +24,11 @@ import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import android.os.Parcel;
import android.platform.test.annotations.Presubmit;
import android.view.Display.Mode;
import android.view.DisplayInfo;
import android.view.WindowManager.LayoutParams;

import androidx.test.filters.FlakyTest;
import androidx.test.filters.SmallTest;
@@ -50,6 +52,16 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
    private RefreshRatePolicy mPolicy;
    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
    public void setUp() {
        DisplayInfo di = new DisplayInfo(mDisplayInfo);
@@ -69,6 +81,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
        final WindowState cameraUsingWindow = createWindow(null, TYPE_BASE_APPLICATION,
                "cameraUsingWindow");
        cameraUsingWindow.mAttrs.packageName = "com.android.test";
        parcelLayoutParams(cameraUsingWindow);
        assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
        assertEquals(0, mPolicy.getPreferredRefreshRate(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,
                "denylistedWindow");
        denylistedWindow.mAttrs.packageName = "com.android.test";
        parcelLayoutParams(denylistedWindow);
        when(mDenylist.isDenylisted("com.android.test")).thenReturn(true);
        assertEquals(0, mPolicy.getPreferredModeId(denylistedWindow));
        assertEquals(60, mPolicy.getPreferredRefreshRate(denylistedWindow), FLOAT_TOLERANCE);
@@ -97,6 +111,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
                "overrideWindow");
        overrideWindow.mAttrs.packageName = "com.android.test";
        overrideWindow.mAttrs.preferredDisplayModeId = LOW_MODE_ID;
        parcelLayoutParams(overrideWindow);
        when(mDenylist.isDenylisted("com.android.test")).thenReturn(true);
        assertEquals(LOW_MODE_ID, mPolicy.getPreferredModeId(overrideWindow));
        assertEquals(60, mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE);
@@ -108,6 +123,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
                "overrideWindow");
        overrideWindow.mAttrs.packageName = "com.android.test";
        overrideWindow.mAttrs.preferredDisplayModeId = LOW_MODE_ID;
        parcelLayoutParams(overrideWindow);
        mPolicy.addNonHighRefreshRatePackage("com.android.test");
        assertEquals(LOW_MODE_ID, mPolicy.getPreferredModeId(overrideWindow));
        assertEquals(0, mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE);
@@ -120,6 +136,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
                "overrideWindow");
        overrideWindow.mAttrs.packageName = "com.android.test";
        overrideWindow.mAttrs.preferredDisplayModeId = LOW_MODE_ID;
        parcelLayoutParams(overrideWindow);
        overrideWindow.mActivityRecord.mSurfaceAnimator.startAnimation(
                overrideWindow.getPendingTransaction(), mock(AnimationAdapter.class),
                false /* hidden */, ANIMATION_TYPE_APP_TRANSITION);
@@ -134,6 +151,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
        final WindowState cameraUsingWindow = createWindow(null, TYPE_BASE_APPLICATION,
                "cameraUsingWindow");
        cameraUsingWindow.mAttrs.packageName = "com.android.test";
        parcelLayoutParams(cameraUsingWindow);

        mPolicy.addNonHighRefreshRatePackage("com.android.test");
        assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
@@ -152,6 +170,7 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
    public void testAppMaxRefreshRate() {
        final WindowState window = createWindow(null, TYPE_BASE_APPLICATION, "window");
        window.mAttrs.preferredMaxDisplayRefreshRate = 60f;
        parcelLayoutParams(window);
        assertEquals(0, mPolicy.getPreferredModeId(window));
        assertEquals(0, mPolicy.getPreferredRefreshRate(window), FLOAT_TOLERANCE);
        assertEquals(60, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE);