Merge "Added support to reset offload brightness in post processor" into main
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 896670e4..e88ace1 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -1404,7 +1404,6 @@
if (mScreenOffBrightnessSensorController != null) {
mScreenOffBrightnessSensorController.setLightSensorEnabled(false);
}
- setBrightnessFromOffload(PowerManager.BRIGHTNESS_INVALID_FLOAT);
}
if (!mFlags.isRefactorDisplayPowerControllerEnabled()) {
diff --git a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
index da66879..282083f 100644
--- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
+++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
@@ -121,7 +121,8 @@
(mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled())
? mAutomaticBrightnessStrategy1 : mAutomaticBrightnessStrategy2;
if (flags.isDisplayOffloadEnabled()) {
- mOffloadBrightnessStrategy = injector.getOffloadBrightnessStrategy();
+ mOffloadBrightnessStrategy = injector
+ .getOffloadBrightnessStrategy(mDisplayManagerFlags);
} else {
mOffloadBrightnessStrategy = null;
}
@@ -314,8 +315,9 @@
return new AutomaticBrightnessStrategy2(context, displayId);
}
- OffloadBrightnessStrategy getOffloadBrightnessStrategy() {
- return new OffloadBrightnessStrategy();
+ OffloadBrightnessStrategy getOffloadBrightnessStrategy(
+ DisplayManagerFlags displayManagerFlags) {
+ return new OffloadBrightnessStrategy(displayManagerFlags);
}
}
}
diff --git a/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategyConstants.java b/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategyConstants.java
new file mode 100644
index 0000000..504683a
--- /dev/null
+++ b/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategyConstants.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.display.brightness.strategy;
+
+public class DisplayBrightnessStrategyConstants {
+ static final String INVALID_BRIGHTNESS_STRATEGY_NAME = "InvalidBrightnessStrategy";
+}
diff --git a/services/core/java/com/android/server/display/brightness/strategy/InvalidBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/InvalidBrightnessStrategy.java
index 4abd028..dfd47a3 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/InvalidBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/InvalidBrightnessStrategy.java
@@ -40,7 +40,7 @@
@Override
public String getName() {
- return "InvalidBrightnessStrategy";
+ return DisplayBrightnessStrategyConstants.INVALID_BRIGHTNESS_STRATEGY_NAME;
}
@Override
diff --git a/services/core/java/com/android/server/display/brightness/strategy/OffloadBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/OffloadBrightnessStrategy.java
index 64dc47c..60e5eb0 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/OffloadBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/OffloadBrightnessStrategy.java
@@ -22,6 +22,7 @@
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
+import com.android.server.display.feature.DisplayManagerFlags;
import java.io.PrintWriter;
@@ -32,19 +33,29 @@
public class OffloadBrightnessStrategy implements DisplayBrightnessStrategy {
private float mOffloadScreenBrightness;
+ private final DisplayManagerFlags mDisplayManagerFlags;
- public OffloadBrightnessStrategy() {
+ public OffloadBrightnessStrategy(DisplayManagerFlags displayManagerFlags) {
+ mDisplayManagerFlags = displayManagerFlags;
mOffloadScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
}
@Override
public DisplayBrightnessState updateBrightness(
DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ float offloadBrightness = mOffloadScreenBrightness;
+ if (mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled()) {
+ // We reset the offload brightness to invalid so that there is no stale value lingering
+ // around. After this request is processed, the current brightness will be set to
+ // offload brightness. Hence even if the lux values don't become valid for the next
+ // request, we will fallback to the current brightness anyways.
+ mOffloadScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+ }
BrightnessReason brightnessReason = new BrightnessReason();
brightnessReason.setReason(BrightnessReason.REASON_OFFLOAD);
return new DisplayBrightnessState.Builder()
- .setBrightness(mOffloadScreenBrightness)
- .setSdrBrightness(mOffloadScreenBrightness)
+ .setBrightness(offloadBrightness)
+ .setSdrBrightness(offloadBrightness)
.setBrightnessReason(brightnessReason)
.setDisplayBrightnessStrategyName(getName())
.setIsSlowChange(false)
@@ -77,7 +88,15 @@
@Override
public void strategySelectionPostProcessor(
StrategySelectionNotifyRequest strategySelectionNotifyRequest) {
- // DO NOTHING
+ // We reset the offload brightness only if the selected strategy is not offload or invalid,
+ // as we are yet to use the brightness to evaluate the brightness state.
+ if (!strategySelectionNotifyRequest.getSelectedDisplayBrightnessStrategy().getName()
+ .equals(getName())
+ && !strategySelectionNotifyRequest.getSelectedDisplayBrightnessStrategy().getName()
+ .equals(
+ DisplayBrightnessStrategyConstants.INVALID_BRIGHTNESS_STRATEGY_NAME)) {
+ mOffloadScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+ }
}
@Override
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java
index b8858cc..f270650 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java
@@ -142,7 +142,8 @@
}
@Override
- OffloadBrightnessStrategy getOffloadBrightnessStrategy() {
+ OffloadBrightnessStrategy getOffloadBrightnessStrategy(
+ DisplayManagerFlags displayManagerFlags) {
return mOffloadBrightnessStrategy;
}
};
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OffloadBrightnessStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OffloadBrightnessStrategyTest.java
index 36719af..c2fa4eb 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OffloadBrightnessStrategyTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OffloadBrightnessStrategyTest.java
@@ -17,32 +17,44 @@
package com.android.server.display.brightness.strategy;
import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import android.hardware.display.DisplayManagerInternal;
+import android.os.PowerManager;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.StrategySelectionNotifyRequest;
+import com.android.server.display.feature.DisplayManagerFlags;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class OffloadBrightnessStrategyTest {
+ @Mock
+ private DisplayManagerFlags mDisplayManagerFlags;
+
private OffloadBrightnessStrategy mOffloadBrightnessStrategy;
@Before
public void before() {
- mOffloadBrightnessStrategy = new OffloadBrightnessStrategy();
+ MockitoAnnotations.initMocks(this);
+ mOffloadBrightnessStrategy = new OffloadBrightnessStrategy(mDisplayManagerFlags);
}
@Test
public void testUpdateBrightnessWhenOffloadBrightnessIsSet() {
+ when(mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled()).thenReturn(true);
DisplayManagerInternal.DisplayPowerRequest
displayPowerRequest = new DisplayManagerInternal.DisplayPowerRequest();
float brightness = 0.2f;
@@ -60,5 +72,41 @@
DisplayBrightnessState updatedDisplayBrightnessState =
mOffloadBrightnessStrategy.updateBrightness(displayPowerRequest);
assertEquals(updatedDisplayBrightnessState, expectedDisplayBrightnessState);
+ assertEquals(PowerManager.BRIGHTNESS_INVALID_FLOAT, mOffloadBrightnessStrategy
+ .getOffloadScreenBrightness(), 0.0f);
+ }
+
+ @Test
+ public void strategySelectionPostProcessor_resetsOffloadBrightness() {
+ StrategySelectionNotifyRequest strategySelectionNotifyRequest =
+ mock(StrategySelectionNotifyRequest.class);
+ DisplayBrightnessStrategy displayBrightnessStrategy = mock(DisplayBrightnessStrategy.class);
+ when(strategySelectionNotifyRequest.getSelectedDisplayBrightnessStrategy())
+ .thenReturn(displayBrightnessStrategy);
+
+ float offloadBrightness = 0.3f;
+ mOffloadBrightnessStrategy.setOffloadScreenBrightness(offloadBrightness);
+
+ // Brightness is not reset if offload strategy is selected
+ when(displayBrightnessStrategy.getName())
+ .thenReturn(mOffloadBrightnessStrategy.getName());
+ mOffloadBrightnessStrategy.strategySelectionPostProcessor(strategySelectionNotifyRequest);
+ assertEquals(offloadBrightness,
+ mOffloadBrightnessStrategy.getOffloadScreenBrightness(), 0.0f);
+
+ // Brightness is not reset if invalid strategy is selected
+ when(displayBrightnessStrategy.getName())
+ .thenReturn(DisplayBrightnessStrategyConstants.INVALID_BRIGHTNESS_STRATEGY_NAME);
+ mOffloadBrightnessStrategy.strategySelectionPostProcessor(strategySelectionNotifyRequest);
+ assertEquals(offloadBrightness,
+ mOffloadBrightnessStrategy.getOffloadScreenBrightness(), 0.0f);
+
+
+ // Brightness is reset if neither of invalid or offload strategy is selected
+ when(displayBrightnessStrategy.getName())
+ .thenReturn("DisplayBrightnessStrategy");
+ mOffloadBrightnessStrategy.strategySelectionPostProcessor(strategySelectionNotifyRequest);
+ assertEquals(PowerManager.BRIGHTNESS_INVALID_FLOAT,
+ mOffloadBrightnessStrategy.getOffloadScreenBrightness(), 0.0f);
}
}