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

Commit e564f785 authored by Rupesh Bansal's avatar Rupesh Bansal Committed by Android (Google) Code Review
Browse files

Merge "Send RR event changed when frame rate is overridden" into main

parents 0026e374 672207ab
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -3445,8 +3445,11 @@ public final class DisplayManagerService extends SystemService {
    }

    private void sendDisplayEventFrameRateOverrideLocked(int displayId) {
        int event = (mFlags.isFramerateOverrideTriggersRrCallbacksEnabled())
                ? DisplayManagerGlobal.EVENT_DISPLAY_REFRESH_RATE_CHANGED
                : DisplayManagerGlobal.EVENT_DISPLAY_BASIC_CHANGED;
        Message msg = mHandler.obtainMessage(MSG_DELIVER_DISPLAY_EVENT_FRAME_RATE_OVERRIDE,
                displayId, DisplayManagerGlobal.EVENT_DISPLAY_BASIC_CHANGED);
                displayId, event);
        mHandler.sendMessage(msg);
    }

+15 −0
Original line number Diff line number Diff line
@@ -263,6 +263,11 @@ public class DisplayManagerFlags {
            Flags::baseDensityForExternalDisplays
    );

    private final FlagState mFramerateOverrideTriggersRrCallbacks = new FlagState(
            Flags.FLAG_FRAMERATE_OVERRIDE_TRIGGERS_RR_CALLBACKS,
            Flags::framerateOverrideTriggersRrCallbacks
    );

    /**
     * @return {@code true} if 'port' is allowed in display layout configuration file.
     */
@@ -564,6 +569,14 @@ public class DisplayManagerFlags {
        return mBaseDensityForExternalDisplays.isEnabled();
    }

    /**
     * @return {@code true} if the flag triggering refresh rate callbacks when framerate is
     * overridden is enabled
     */
    public boolean isFramerateOverrideTriggersRrCallbacksEnabled() {
        return mFramerateOverrideTriggersRrCallbacks.isEnabled();
    }


    /**
     * dumps all flagstates
@@ -620,6 +633,8 @@ public class DisplayManagerFlags {
        pw.println(" " + mSubscribeGranularDisplayEvents);
        pw.println(" " + mEnableDisplayContentModeManagementFlagState);
        pw.println(" " + mBaseDensityForExternalDisplays);
        pw.println(" " + mFramerateOverrideTriggersRrCallbacks);

    }

    private static class FlagState {
+11 −0
Original line number Diff line number Diff line
@@ -479,3 +479,14 @@ flag {
    bug: "382954433"
    is_fixed_read_only: true
}

flag {
    name: "framerate_override_triggers_rr_callbacks"
    namespace: "display_manager"
    description: "Feature flag to trigger the RR callbacks when framerate overridding happens."
    bug: "390113266"
    is_fixed_read_only: true
    metadata {
      purpose: PURPOSE_BUGFIX
    }
}
+34 −7
Original line number Diff line number Diff line
@@ -2123,14 +2123,41 @@ public class DisplayManagerServiceTest {
        }
    }

    @Test
    public void test_displayChangedNotified_displayInfoFramerateOverridden() {
        DisplayManagerService displayManager =
                new DisplayManagerService(mContext, mShortMockedInjector);
        DisplayManagerService.BinderService displayManagerBinderService =
                displayManager.new BinderService();
        when(mMockFlags.isFramerateOverrideTriggersRrCallbacksEnabled()).thenReturn(false);

        registerDefaultDisplays(displayManager);
        displayManager.onBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY);

        FakeDisplayDevice displayDevice = createFakeDisplayDevice(displayManager, new float[]{60f});
        FakeDisplayManagerCallback callback = registerDisplayListenerCallback(displayManager,
                displayManagerBinderService, displayDevice);

        int myUid = Process.myUid();
        updateFrameRateOverride(displayManager, displayDevice,
                new DisplayEventReceiver.FrameRateOverride[]{
                        new DisplayEventReceiver.FrameRateOverride(myUid, 30f),
                });
        waitForIdleHandler(displayManager.getDisplayHandler());
        assertThat(callback.receivedEvents()).contains(EVENT_DISPLAY_BASIC_CHANGED);
        callback.clear();
    }

    /**
     * Tests that there is a display change notification if the frame rate override
     * list is updated.
     */
    @Test
    public void testShouldNotifyChangeWhenDisplayInfoFrameRateOverrideChanged() {
    public void test_refreshRateChangedNotified_displayInfoFramerateOverridden() {
        when(mMockFlags.isFramerateOverrideTriggersRrCallbacksEnabled()).thenReturn(true);

        DisplayManagerService displayManager =
                new DisplayManagerService(mContext, mShortMockedInjector);
                new DisplayManagerService(mContext, mBasicInjector);
        DisplayManagerService.BinderService displayManagerBinderService =
                displayManager.new BinderService();
        registerDefaultDisplays(displayManager);
@@ -2146,7 +2173,7 @@ public class DisplayManagerServiceTest {
                        new DisplayEventReceiver.FrameRateOverride(myUid, 30f),
                });
        waitForIdleHandler(displayManager.getDisplayHandler());
        assertThat(callback.receivedEvents()).contains(EVENT_DISPLAY_BASIC_CHANGED);
        assertThat(callback.receivedEvents()).contains(EVENT_DISPLAY_REFRESH_RATE_CHANGED);
        callback.clear();

        updateFrameRateOverride(displayManager, displayDevice,
@@ -2155,7 +2182,7 @@ public class DisplayManagerServiceTest {
                        new DisplayEventReceiver.FrameRateOverride(1234, 30f),
                });
        waitForIdleHandler(displayManager.getDisplayHandler());
        assertThat(callback.receivedEvents()).doesNotContain(EVENT_DISPLAY_BASIC_CHANGED);
        assertThat(callback.receivedEvents()).doesNotContain(EVENT_DISPLAY_REFRESH_RATE_CHANGED);

        updateFrameRateOverride(displayManager, displayDevice,
                new DisplayEventReceiver.FrameRateOverride[]{
@@ -2164,7 +2191,7 @@ public class DisplayManagerServiceTest {
                        new DisplayEventReceiver.FrameRateOverride(5678, 30f),
                });
        waitForIdleHandler(displayManager.getDisplayHandler());
        assertThat(callback.receivedEvents()).contains(EVENT_DISPLAY_BASIC_CHANGED);
        assertThat(callback.receivedEvents()).contains(EVENT_DISPLAY_REFRESH_RATE_CHANGED);
        callback.clear();

        updateFrameRateOverride(displayManager, displayDevice,
@@ -2173,7 +2200,7 @@ public class DisplayManagerServiceTest {
                        new DisplayEventReceiver.FrameRateOverride(5678, 30f),
                });
        waitForIdleHandler(displayManager.getDisplayHandler());
        assertThat(callback.receivedEvents()).contains(EVENT_DISPLAY_BASIC_CHANGED);
        assertThat(callback.receivedEvents()).contains(EVENT_DISPLAY_REFRESH_RATE_CHANGED);
        callback.clear();

        updateFrameRateOverride(displayManager, displayDevice,
@@ -2181,7 +2208,7 @@ public class DisplayManagerServiceTest {
                        new DisplayEventReceiver.FrameRateOverride(5678, 30f),
                });
        waitForIdleHandler(displayManager.getDisplayHandler());
        assertThat(callback.receivedEvents()).doesNotContain(EVENT_DISPLAY_BASIC_CHANGED);
        assertThat(callback.receivedEvents()).doesNotContain(EVENT_DISPLAY_REFRESH_RATE_CHANGED);
    }

    /**