summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rupesh Bansal <brup@google.com> 2025-01-17 07:40:51 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-01-17 07:40:51 -0800
commite564f785f28f0f4c21d4f8f602d92d46701b5850 (patch)
tree3ebf55ab6fa31d7f507f57c3d587353c52b1acaf
parent0026e37481398e08e51635e9c026da31e66e4768 (diff)
parent672207abab4be2135a2da25e93f8e040e8d80e4f (diff)
Merge "Send RR event changed when frame rate is overridden" into main
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerService.java5
-rw-r--r--services/core/java/com/android/server/display/feature/DisplayManagerFlags.java15
-rw-r--r--services/core/java/com/android/server/display/feature/display_flags.aconfig11
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java41
4 files changed, 64 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index a37e9c3ac1b8..33501094206b 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -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);
}
diff --git a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
index 43aa6f46da78..72306ae341e7 100644
--- a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
+++ b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
@@ -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 {
diff --git a/services/core/java/com/android/server/display/feature/display_flags.aconfig b/services/core/java/com/android/server/display/feature/display_flags.aconfig
index 00a9dcb71b4b..1cd050553d03 100644
--- a/services/core/java/com/android/server/display/feature/display_flags.aconfig
+++ b/services/core/java/com/android/server/display/feature/display_flags.aconfig
@@ -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
+ }
+}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java
index 02e5470e8673..8e4d8edb4837 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java
@@ -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);
}
/**