summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rupesh Bansal <brup@google.com> 2024-05-21 13:46:09 +0000
committer Rupesh Bansal <brup@google.com> 2024-06-04 15:11:56 +0000
commit4c630c11b57c59aa717fcbe739b47ca515b14db0 (patch)
tree2e19491f78526f8f9c60faba1a2334167563b3fa
parent7e725e0696eb2e17c559e076391305fa0a781e62 (diff)
Processing autobrightness mode in async
setAutomaticScreenBrightnessMode function is currently executed from the display thread, while the automaitc brightness controller utilities should only be accessed from the power thread. To achieve this, the logic is now being executed via the handler event Bug: 341026483 Test: atest DisplayPowerControllerTest Change-Id: I0f228ee76119780dc278e37b7cf06738a3a9dee6
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java21
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java33
2 files changed, 41 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 8d71c701cf87..15010f723daa 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -159,7 +159,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private static final int MSG_STATSD_HBM_BRIGHTNESS = 11;
private static final int MSG_SWITCH_USER = 12;
private static final int MSG_BOOT_COMPLETED = 13;
- private static final int MSG_SET_DWBC_STRONG_MODE = 14;
+ private static final int MSG_SWITCH_AUTOBRIGHTNESS_MODE = 14;
private static final int MSG_SET_DWBC_COLOR_OVERRIDE = 15;
private static final int MSG_SET_DWBC_LOGGING_ENABLED = 16;
private static final int MSG_SET_BRIGHTNESS_FROM_OFFLOAD = 17;
@@ -1184,15 +1184,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
@Override
public void setAutomaticScreenBrightnessMode(
@AutomaticBrightnessController.AutomaticBrightnessMode int mode) {
- boolean isIdle = mode == AUTO_BRIGHTNESS_MODE_IDLE;
- if (mAutomaticBrightnessController != null) {
- // Set sendUpdate to true to make sure that updatePowerState() gets called
- mAutomaticBrightnessController.switchMode(mode, /* sendUpdate= */ true);
- setAnimatorRampSpeeds(isIdle);
- }
Message msg = mHandler.obtainMessage();
- msg.what = MSG_SET_DWBC_STRONG_MODE;
- msg.arg1 = isIdle ? 1 : 0;
+ msg.what = MSG_SWITCH_AUTOBRIGHTNESS_MODE;
+ msg.arg1 = mode;
mHandler.sendMessageAtTime(msg, mClock.uptimeMillis());
}
@@ -1868,7 +1862,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private void setDwbcStrongMode(int arg) {
if (mDisplayWhiteBalanceController != null) {
- final boolean isIdle = (arg == 1);
+ final boolean isIdle = (arg == AUTO_BRIGHTNESS_MODE_IDLE);
mDisplayWhiteBalanceController.setStrongModeEnabled(isIdle);
}
}
@@ -3034,7 +3028,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
updatePowerState();
break;
- case MSG_SET_DWBC_STRONG_MODE:
+ case MSG_SWITCH_AUTOBRIGHTNESS_MODE:
+ boolean isIdle = msg.arg1 == AUTO_BRIGHTNESS_MODE_IDLE;
+ if (mAutomaticBrightnessController != null) {
+ mAutomaticBrightnessController.switchMode(msg.arg1, /* sendUpdate= */ true);
+ setAnimatorRampSpeeds(isIdle);
+ }
setDwbcStrongMode(msg.arg1);
break;
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
index 8fd1e6baf522..efa224f28c8c 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
@@ -39,6 +39,7 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import android.app.ActivityManager;
@@ -1284,14 +1285,37 @@ public final class DisplayPowerControllerTest {
@Test
public void testDwbcCallsHappenOnHandler() {
+ when(mDisplayManagerFlagsMock.isAdaptiveTone1Enabled()).thenReturn(true);
mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
+ // Send a display power request
+ DisplayPowerRequest dpr = new DisplayPowerRequest();
+ dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
+ dpr.useProximitySensor = true;
+ mHolder.dpc.requestPowerState(dpr, false /* waitForNegativeProximity */);
+
+ // Run updatePowerState
+ advanceTime(1);
+
+ setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class),
+ mHolder.config, /* isEnabled= */ true);
+
+ // dispatch handler looper
+ advanceTime(1);
+ clearInvocations(mDisplayWhiteBalanceControllerMock, mHolder.automaticBrightnessController,
+ mHolder.animator);
mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
- verify(mDisplayWhiteBalanceControllerMock, never()).setStrongModeEnabled(true);
+ verifyNoMoreInteractions(mDisplayWhiteBalanceControllerMock,
+ mHolder.automaticBrightnessController,
+ mHolder.animator);
// dispatch handler looper
advanceTime(1);
- verify(mDisplayWhiteBalanceControllerMock, times(1)).setStrongModeEnabled(true);
+ verify(mHolder.automaticBrightnessController).switchMode(AUTO_BRIGHTNESS_MODE_IDLE,
+ /* sendUpdate= */ true);
+ verify(mHolder.animator).setAnimationTimeLimits(BRIGHTNESS_RAMP_INCREASE_MAX_IDLE,
+ BRIGHTNESS_RAMP_DECREASE_MAX_IDLE);
+ verify(mDisplayWhiteBalanceControllerMock).setStrongModeEnabled(true);
}
@Test
@@ -1506,6 +1530,9 @@ public final class DisplayPowerControllerTest {
// switch to idle mode
mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
+ // Process the MSG_SWITCH_AUTOBRIGHTNESS_MODE event
+ advanceTime(1);
+
// A second time when switching to idle mode.
verify(mHolder.animator, times(2)).setAnimationTimeLimits(BRIGHTNESS_RAMP_INCREASE_MAX,
BRIGHTNESS_RAMP_DECREASE_MAX);
@@ -1532,6 +1559,8 @@ public final class DisplayPowerControllerTest {
// switch to idle mode
mHolder.dpc.setAutomaticScreenBrightnessMode(AUTO_BRIGHTNESS_MODE_IDLE);
+ // Process the MSG_SWITCH_AUTOBRIGHTNESS_MODE event
+ advanceTime(1);
verify(mHolder.animator).setAnimationTimeLimits(BRIGHTNESS_RAMP_INCREASE_MAX_IDLE,
BRIGHTNESS_RAMP_DECREASE_MAX_IDLE);
}