diff options
| author | 2024-03-07 15:59:45 +0000 | |
|---|---|---|
| committer | 2024-03-07 15:59:45 +0000 | |
| commit | a14ab6642f89084e9a6dc8f12ab0fdbc18e16cc3 (patch) | |
| tree | 0678357b74e822ebf3faed01c6237bb1a9f56b36 | |
| parent | e766b7880531fceef145f361d9775fb48b0c1c06 (diff) | |
| parent | 26e5db0cf2d47abc0c884a0d1153d40074b55857 (diff) | |
Merge "Added postprocessor functionality to the strategy selector" into main
14 files changed, 193 insertions, 1 deletions
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 71cc8725f85b..03fb1478022e 100644 --- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java +++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java @@ -71,8 +71,14 @@ public class DisplayBrightnessStrategySelector { @Nullable private final OffloadBrightnessStrategy mOffloadBrightnessStrategy; + // A collective representation of all the strategies that the selector is aware of. This is + // non null, but the strategies this is tracking can be null + @NonNull private final DisplayBrightnessStrategy[] mDisplayBrightnessStrategies; + @NonNull + private final DisplayManagerFlags mDisplayManagerFlags; + // We take note of the old brightness strategy so that we can know when the strategy changes. private String mOldBrightnessStrategyName; @@ -86,6 +92,7 @@ public class DisplayBrightnessStrategySelector { if (injector == null) { injector = new Injector(); } + mDisplayManagerFlags = flags; mDisplayId = displayId; mDozeBrightnessStrategy = injector.getDozeBrightnessStrategy(); mScreenOffBrightnessStrategy = injector.getScreenOffBrightnessStrategy(); @@ -139,6 +146,10 @@ public class DisplayBrightnessStrategySelector { displayBrightnessStrategy = mOffloadBrightnessStrategy; } + if (mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled()) { + postProcess(constructStrategySelectionNotifyRequest(displayBrightnessStrategy)); + } + if (!mOldBrightnessStrategyName.equals(displayBrightnessStrategy.getName())) { Slog.i(TAG, "Changing the DisplayBrightnessStrategy from " + mOldBrightnessStrategyName @@ -186,13 +197,27 @@ public class DisplayBrightnessStrategySelector { " mAllowAutoBrightnessWhileDozingConfig= " + mAllowAutoBrightnessWhileDozingConfig); IndentingPrintWriter ipw = new IndentingPrintWriter(writer, " "); - for (DisplayBrightnessStrategy displayBrightnessStrategy: mDisplayBrightnessStrategies) { + for (DisplayBrightnessStrategy displayBrightnessStrategy : mDisplayBrightnessStrategies) { if (displayBrightnessStrategy != null) { displayBrightnessStrategy.dump(ipw); } } } + private StrategySelectionNotifyRequest constructStrategySelectionNotifyRequest( + DisplayBrightnessStrategy selectedDisplayBrightnessStrategy) { + return new StrategySelectionNotifyRequest(selectedDisplayBrightnessStrategy); + } + + private void postProcess(StrategySelectionNotifyRequest strategySelectionNotifyRequest) { + for (DisplayBrightnessStrategy displayBrightnessStrategy : mDisplayBrightnessStrategies) { + if (displayBrightnessStrategy != null) { + displayBrightnessStrategy.strategySelectionPostProcessor( + strategySelectionNotifyRequest); + } + } + } + /** * Validates if the conditions are met to qualify for the DozeBrightnessStrategy. */ diff --git a/services/core/java/com/android/server/display/brightness/StrategySelectionNotifyRequest.java b/services/core/java/com/android/server/display/brightness/StrategySelectionNotifyRequest.java new file mode 100644 index 000000000000..d8bd2e459730 --- /dev/null +++ b/services/core/java/com/android/server/display/brightness/StrategySelectionNotifyRequest.java @@ -0,0 +1,53 @@ +/* + * 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; + +import com.android.server.display.brightness.strategy.DisplayBrightnessStrategy; + +import java.util.Objects; + +/** + * A wrapper class to encapsulate the request to notify the strategies about the selection of a + * DisplayBrightnessStrategy + */ +public final class StrategySelectionNotifyRequest { + // The strategy that was selected with the current request + private final DisplayBrightnessStrategy mSelectedDisplayBrightnessStrategy; + + public StrategySelectionNotifyRequest(DisplayBrightnessStrategy displayBrightnessStrategy) { + mSelectedDisplayBrightnessStrategy = displayBrightnessStrategy; + } + + public DisplayBrightnessStrategy getSelectedDisplayBrightnessStrategy() { + return mSelectedDisplayBrightnessStrategy; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof StrategySelectionNotifyRequest)) { + return false; + } + StrategySelectionNotifyRequest other = (StrategySelectionNotifyRequest) obj; + return other.getSelectedDisplayBrightnessStrategy() + == getSelectedDisplayBrightnessStrategy(); + } + + @Override + public int hashCode() { + return Objects.hash(mSelectedDisplayBrightnessStrategy); + } +} diff --git a/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java index 9ee1d73726bd..11edde9caaf7 100644 --- a/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java +++ b/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java @@ -22,6 +22,7 @@ import android.os.PowerManager; import com.android.server.display.DisplayBrightnessState; import com.android.server.display.brightness.BrightnessReason; import com.android.server.display.brightness.BrightnessUtils; +import com.android.server.display.brightness.StrategySelectionNotifyRequest; import java.io.PrintWriter; @@ -53,4 +54,10 @@ public class BoostBrightnessStrategy implements DisplayBrightnessStrategy { @Override public void dump(PrintWriter writer) {} + + @Override + public void strategySelectionPostProcessor( + StrategySelectionNotifyRequest strategySelectionNotifyRequest) { + // DO NOTHING + } } diff --git a/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategy.java index 1f28eb4fa113..7b49957a7e31 100644 --- a/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategy.java +++ b/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategy.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.hardware.display.DisplayManagerInternal; import com.android.server.display.DisplayBrightnessState; +import com.android.server.display.brightness.StrategySelectionNotifyRequest; import java.io.PrintWriter; @@ -48,4 +49,10 @@ public interface DisplayBrightnessStrategy { * @param writer */ void dump(PrintWriter writer); + + /** + * Notifies this strategy about the selection of a DisplayBrightnessStrategy + */ + void strategySelectionPostProcessor( + StrategySelectionNotifyRequest strategySelectionNotifyRequest); } diff --git a/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java index 2be74438f87a..5afdc42b9eee 100644 --- a/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java +++ b/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java @@ -21,6 +21,7 @@ import android.hardware.display.DisplayManagerInternal; import com.android.server.display.DisplayBrightnessState; import com.android.server.display.brightness.BrightnessReason; import com.android.server.display.brightness.BrightnessUtils; +import com.android.server.display.brightness.StrategySelectionNotifyRequest; import java.io.PrintWriter; @@ -46,4 +47,10 @@ public class DozeBrightnessStrategy implements DisplayBrightnessStrategy { @Override public void dump(PrintWriter writer) {} + + @Override + public void strategySelectionPostProcessor( + StrategySelectionNotifyRequest strategySelectionNotifyRequest) { + // DO NOTHING + } } diff --git a/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java index 54f9afcbdd94..0650c1c9dc62 100644 --- a/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java +++ b/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java @@ -22,6 +22,7 @@ import android.os.PowerManager; import com.android.server.display.DisplayBrightnessState; import com.android.server.display.brightness.BrightnessReason; import com.android.server.display.brightness.BrightnessUtils; +import com.android.server.display.brightness.StrategySelectionNotifyRequest; import java.io.PrintWriter; @@ -82,4 +83,10 @@ public class FollowerBrightnessStrategy implements DisplayBrightnessStrategy { writer.println(" mBrightnessToFollow:" + mBrightnessToFollow); writer.println(" mBrightnessToFollowSlowChange:" + mBrightnessToFollowSlowChange); } + + @Override + public void strategySelectionPostProcessor( + StrategySelectionNotifyRequest strategySelectionNotifyRequest) { + // DO NOTHING + } } 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 49c3e03c8742..bf37ee0a9666 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 @@ -22,6 +22,7 @@ import android.os.PowerManager; import com.android.server.display.DisplayBrightnessState; import com.android.server.display.brightness.BrightnessReason; import com.android.server.display.brightness.BrightnessUtils; +import com.android.server.display.brightness.StrategySelectionNotifyRequest; import java.io.PrintWriter; @@ -44,4 +45,10 @@ public class InvalidBrightnessStrategy implements DisplayBrightnessStrategy { @Override public void dump(PrintWriter writer) {} + + @Override + public void strategySelectionPostProcessor( + StrategySelectionNotifyRequest strategySelectionNotifyRequest) { + // DO NOTHING + } } 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 4ffb16be5789..d2bb1e284256 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 @@ -21,6 +21,7 @@ import android.os.PowerManager; import com.android.server.display.DisplayBrightnessState; import com.android.server.display.brightness.BrightnessReason; +import com.android.server.display.brightness.StrategySelectionNotifyRequest; import java.io.PrintWriter; @@ -72,4 +73,10 @@ public class OffloadBrightnessStrategy implements DisplayBrightnessStrategy { writer.println("OffloadBrightnessStrategy:"); writer.println(" mOffloadScreenBrightness:" + mOffloadScreenBrightness); } + + @Override + public void strategySelectionPostProcessor( + StrategySelectionNotifyRequest strategySelectionNotifyRequest) { + // DO NOTHING + } } diff --git a/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java index 7b651d8ced8e..653170c886ea 100644 --- a/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java +++ b/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java @@ -21,6 +21,7 @@ import android.hardware.display.DisplayManagerInternal; import com.android.server.display.DisplayBrightnessState; import com.android.server.display.brightness.BrightnessReason; import com.android.server.display.brightness.BrightnessUtils; +import com.android.server.display.brightness.StrategySelectionNotifyRequest; import java.io.PrintWriter; @@ -45,4 +46,10 @@ public class OverrideBrightnessStrategy implements DisplayBrightnessStrategy { @Override public void dump(PrintWriter writer) {} + + @Override + public void strategySelectionPostProcessor( + StrategySelectionNotifyRequest strategySelectionNotifyRequest) { + // DO NOTHING + } } diff --git a/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java index 201ef4118854..f0cce23c6f45 100644 --- a/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java +++ b/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java @@ -22,6 +22,7 @@ import android.os.PowerManager; import com.android.server.display.DisplayBrightnessState; import com.android.server.display.brightness.BrightnessReason; import com.android.server.display.brightness.BrightnessUtils; +import com.android.server.display.brightness.StrategySelectionNotifyRequest; import java.io.PrintWriter; @@ -46,4 +47,10 @@ public class ScreenOffBrightnessStrategy implements DisplayBrightnessStrategy { @Override public void dump(PrintWriter writer) {} + + @Override + public void strategySelectionPostProcessor( + StrategySelectionNotifyRequest strategySelectionNotifyRequest) { + // DO NOTHING + } } diff --git a/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java index bbd0c009debb..91e1d091ade3 100644 --- a/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java +++ b/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java @@ -22,6 +22,7 @@ import android.os.PowerManager; import com.android.server.display.DisplayBrightnessState; import com.android.server.display.brightness.BrightnessReason; import com.android.server.display.brightness.BrightnessUtils; +import com.android.server.display.brightness.StrategySelectionNotifyRequest; import java.io.PrintWriter; @@ -73,4 +74,10 @@ public class TemporaryBrightnessStrategy implements DisplayBrightnessStrategy { writer.println("TemporaryBrightnessStrategy:"); writer.println(" mTemporaryScreenBrightness:" + mTemporaryScreenBrightness); } + + @Override + public void strategySelectionPostProcessor( + StrategySelectionNotifyRequest strategySelectionNotifyRequest) { + // DO NOTHING + } } 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 516d4b1d4125..3c98ee453913 100644 --- a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java +++ b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java @@ -126,6 +126,13 @@ public class DisplayManagerFlags { Flags::sensorBasedBrightnessThrottling ); + + private final FlagState mRefactorDisplayPowerController = new FlagState( + Flags.FLAG_REFACTOR_DISPLAY_POWER_CONTROLLER, + Flags::refactorDisplayPowerController + ); + + /** * @return {@code true} if 'port' is allowed in display layout configuration file. */ @@ -256,6 +263,10 @@ public class DisplayManagerFlags { return mSensorBasedBrightnessThrottling.isEnabled(); } + public boolean isRefactorDisplayPowerControllerEnabled() { + return mRefactorDisplayPowerController.isEnabled(); + } + /** * dumps all flagstates * @param pw printWriter @@ -280,6 +291,7 @@ public class DisplayManagerFlags { pw.println(" " + mFastHdrTransitions); pw.println(" " + mRefreshRateVotingTelemetry); pw.println(" " + mSensorBasedBrightnessThrottling); + pw.println(" " + mRefactorDisplayPowerController); } 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 63ab3a95822f..34045273c93a 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 @@ -192,3 +192,11 @@ flag { bug: "294900859" is_fixed_read_only: true } + +flag { + name: "refactor_display_power_controller" + namespace: "display_manager" + description: "Feature flag for refactoring the DisplayPowerController and associated components" + bug: "294444204" + is_fixed_read_only: true +} 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 0e89d8383a8f..a3728c868a4e 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 @@ -18,8 +18,10 @@ package com.android.server.display.brightness; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.ContentResolver; @@ -268,4 +270,33 @@ public final class DisplayBrightnessStrategySelectorTest { mDisplayBrightnessStrategySelector.selectStrategy(displayPowerRequest, Display.STATE_ON)); } + + @Test + public void selectStrategyCallsPostProcessorForAllStrategies() { + when(mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled()).thenReturn(true); + mDisplayBrightnessStrategySelector = new DisplayBrightnessStrategySelector(mContext, + mInjector, DISPLAY_ID, mDisplayManagerFlags); + DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock( + DisplayManagerInternal.DisplayPowerRequest.class); + when(mFollowerBrightnessStrategy.getBrightnessToFollow()).thenReturn(0.3f); + + mDisplayBrightnessStrategySelector.selectStrategy(displayPowerRequest, Display.STATE_ON); + + StrategySelectionNotifyRequest strategySelectionNotifyRequest = + new StrategySelectionNotifyRequest(mFollowerBrightnessStrategy); + verify(mInvalidBrightnessStrategy).strategySelectionPostProcessor( + eq(strategySelectionNotifyRequest)); + verify(mScreenOffBrightnessModeStrategy).strategySelectionPostProcessor( + eq(strategySelectionNotifyRequest)); + verify(mDozeBrightnessModeStrategy).strategySelectionPostProcessor( + eq(strategySelectionNotifyRequest)); + verify(mFollowerBrightnessStrategy).strategySelectionPostProcessor( + eq(strategySelectionNotifyRequest)); + verify(mBoostBrightnessStrategy).strategySelectionPostProcessor( + eq(strategySelectionNotifyRequest)); + verify(mOverrideBrightnessStrategy).strategySelectionPostProcessor( + eq(strategySelectionNotifyRequest)); + verify(mTemporaryBrightnessStrategy).strategySelectionPostProcessor( + eq(strategySelectionNotifyRequest)); + } } |