diff options
8 files changed, 77 insertions, 22 deletions
diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java index ffd7212a7525..86024ea41363 100644 --- a/core/java/android/hardware/display/DisplayManagerInternal.java +++ b/core/java/android/hardware/display/DisplayManagerInternal.java @@ -751,6 +751,13 @@ public abstract class DisplayManagerInternal { */ boolean blockScreenOn(Runnable unblocker); + /** Get the current brightness levels used to determine automatic brightness based on lux + * levels. */ + float[] getCurrentAutoBrightnessLevels(); + + /** Get the current lux levels used to determine automatic brightness. */ + float[] getCurrentAutoBrightnessLuxLevels(); + /** Returns whether displayoffload supports the given display state. */ static boolean isSupportedOffloadState(int displayState) { return Display.isSuspendedState(displayState); diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java index 3024dd27b5c4..2d6177d9d27b 100644 --- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java +++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java @@ -403,7 +403,8 @@ public class AutomaticBrightnessController { | (!mAmbientLuxValid ? BrightnessEvent.FLAG_INVALID_LUX : 0) | (mDisplayPolicy == DisplayPowerRequest.POLICY_DOZE ? BrightnessEvent.FLAG_DOZE_SCALE : 0) - | (isInIdleMode() ? BrightnessEvent.FLAG_IDLE_CURVE : 0)); + | (getMode() == AUTO_BRIGHTNESS_MODE_IDLE + ? BrightnessEvent.FLAG_IDLE_CURVE : 0)); } if (!mAmbientLuxValid) { @@ -514,7 +515,8 @@ public class AutomaticBrightnessController { if (mLoggingEnabled) { Slog.d(TAG, "Display policy transitioning from " + oldPolicy + " to " + policy); } - if (!isInteractivePolicy(policy) && isInteractivePolicy(oldPolicy) && !isInIdleMode()) { + if (!isInteractivePolicy(policy) && isInteractivePolicy(oldPolicy) + && getMode() != AUTO_BRIGHTNESS_MODE_IDLE) { mHandler.sendEmptyMessageDelayed(MSG_INVALIDATE_CURRENT_SHORT_TERM_MODEL, mCurrentBrightnessMapper.getShortTermModelTimeout()); } else if (isInteractivePolicy(policy) && !isInteractivePolicy(oldPolicy)) { @@ -555,7 +557,7 @@ public class AutomaticBrightnessController { boolean shouldResetShortTermModel) { if (mBrightnessMappingStrategyMap.get(AUTO_BRIGHTNESS_MODE_DEFAULT) .setBrightnessConfiguration(configuration)) { - if (!isInIdleMode() && shouldResetShortTermModel) { + if (getMode() != AUTO_BRIGHTNESS_MODE_IDLE && shouldResetShortTermModel) { resetShortTermModel(); } return true; @@ -563,8 +565,9 @@ public class AutomaticBrightnessController { return false; } - public boolean isInIdleMode() { - return mCurrentBrightnessMapper.getMode() == AUTO_BRIGHTNESS_MODE_IDLE; + @AutomaticBrightnessController.AutomaticBrightnessMode + public int getMode() { + return mCurrentBrightnessMapper.getMode(); } public void dump(PrintWriter pw) { @@ -620,8 +623,7 @@ public class AutomaticBrightnessController { pw.println(" mPendingForegroundAppPackageName=" + mPendingForegroundAppPackageName); pw.println(" mForegroundAppCategory=" + mForegroundAppCategory); pw.println(" mPendingForegroundAppCategory=" + mPendingForegroundAppCategory); - pw.println(" Current mode=" - + autoBrightnessModeToString(mCurrentBrightnessMapper.getMode())); + pw.println(" Current mode=" + autoBrightnessModeToString(getMode())); pw.println(); for (int i = 0; i < mBrightnessMappingStrategyMap.size(); i++) { @@ -743,7 +745,7 @@ public class AutomaticBrightnessController { lux = 0; } mAmbientLux = lux; - if (isInIdleMode()) { + if (getMode() == AUTO_BRIGHTNESS_MODE_IDLE) { mAmbientBrighteningThreshold = mAmbientBrightnessThresholdsIdle.getBrighteningThreshold(lux); mAmbientDarkeningThreshold = @@ -835,7 +837,7 @@ public class AutomaticBrightnessController { } earliestValidTime = mAmbientLightRingBuffer.getTime(i); } - return earliestValidTime + (isInIdleMode() + return earliestValidTime + (getMode() == AUTO_BRIGHTNESS_MODE_IDLE ? mBrighteningLightDebounceConfigIdle : mBrighteningLightDebounceConfig); } @@ -848,7 +850,7 @@ public class AutomaticBrightnessController { } earliestValidTime = mAmbientLightRingBuffer.getTime(i); } - return earliestValidTime + (isInIdleMode() + return earliestValidTime + (getMode() == AUTO_BRIGHTNESS_MODE_IDLE ? mDarkeningLightDebounceConfigIdle : mDarkeningLightDebounceConfig); } @@ -973,7 +975,7 @@ public class AutomaticBrightnessController { mPreThresholdBrightness = mScreenAutoBrightness; } mScreenAutoBrightness = newScreenAutoBrightness; - if (isInIdleMode()) { + if (getMode() == AUTO_BRIGHTNESS_MODE_IDLE) { mScreenBrighteningThreshold = clampScreenBrightness( mScreenBrightnessThresholdsIdle.getBrighteningThreshold( newScreenAutoBrightness)); diff --git a/services/core/java/com/android/server/display/DisplayOffloadSessionImpl.java b/services/core/java/com/android/server/display/DisplayOffloadSessionImpl.java index 4e341a9c19b4..c17709144e1d 100644 --- a/services/core/java/com/android/server/display/DisplayOffloadSessionImpl.java +++ b/services/core/java/com/android/server/display/DisplayOffloadSessionImpl.java @@ -65,6 +65,16 @@ public class DisplayOffloadSessionImpl implements DisplayManagerInternal.Display return true; } + @Override + public float[] getCurrentAutoBrightnessLevels() { + return mDisplayPowerController.getCurrentAutoBrightnessLevels(); + } + + @Override + public float[] getCurrentAutoBrightnessLuxLevels() { + return mDisplayPowerController.getCurrentAutoBrightnessLuxLevels(); + } + /** * Start the offload session. The method returns if the session is already active. * @return Whether the session was started successfully diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 06e5f99a1946..c17378d790bd 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -1119,7 +1119,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call DisplayPowerState.SCREEN_BRIGHTNESS_FLOAT, DisplayPowerState.SCREEN_SDR_BRIGHTNESS_FLOAT); setAnimatorRampSpeeds(mAutomaticBrightnessController != null - && mAutomaticBrightnessController.isInIdleMode()); + && mAutomaticBrightnessController.getMode() == AUTO_BRIGHTNESS_MODE_IDLE); mScreenBrightnessRampAnimator.setListener(mRampAnimatorListener); noteScreenState(mPowerState.getScreenState()); @@ -1990,7 +1990,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call boolean isIncreasing = animateValue > currentBrightness; final float rampSpeed; final boolean idle = mAutomaticBrightnessController != null - && mAutomaticBrightnessController.isInIdleMode(); + && mAutomaticBrightnessController.getMode() + == AUTO_BRIGHTNESS_MODE_IDLE; if (isIncreasing && slowChange) { rampSpeed = idle ? mBrightnessRampRateSlowIncreaseIdle : mBrightnessRampRateSlowIncrease; @@ -2214,6 +2215,18 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } @Override + public float[] getCurrentAutoBrightnessLevels() { + // The old DPC is no longer supported + return new float[0]; + } + + @Override + public float[] getCurrentAutoBrightnessLuxLevels() { + // The old DPC is no longer supported + return new float[0]; + } + + @Override public BrightnessInfo getBrightnessInfo() { synchronized (mCachedBrightnessInfo) { return new BrightnessInfo( @@ -2898,7 +2911,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // or the nits is invalid. if (brightnessIsTemporary || mAutomaticBrightnessController == null - || mAutomaticBrightnessController.isInIdleMode() + || mAutomaticBrightnessController.getMode() == AUTO_BRIGHTNESS_MODE_IDLE || !autobrightnessEnabled || mBrightnessTracker == null || !mUseAutoBrightness diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java index 519224a5fcff..2efda087d4ac 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController2.java +++ b/services/core/java/com/android/server/display/DisplayPowerController2.java @@ -951,7 +951,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal DisplayPowerState.SCREEN_BRIGHTNESS_FLOAT, DisplayPowerState.SCREEN_SDR_BRIGHTNESS_FLOAT); setAnimatorRampSpeeds(mAutomaticBrightnessController != null - && mAutomaticBrightnessController.isInIdleMode()); + && mAutomaticBrightnessController.getMode() == AUTO_BRIGHTNESS_MODE_IDLE); mScreenBrightnessRampAnimator.setListener(mRampAnimatorListener); noteScreenState(mPowerState.getScreenState()); @@ -1365,7 +1365,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal // Switch to doze auto-brightness mode if needed if (mFlags.areAutoBrightnessModesEnabled() && mAutomaticBrightnessController != null - && !mAutomaticBrightnessController.isInIdleMode()) { + && mAutomaticBrightnessController.getMode() != AUTO_BRIGHTNESS_MODE_IDLE) { setAutomaticScreenBrightnessMode(Display.isDozeState(state) ? AUTO_BRIGHTNESS_MODE_DOZE : AUTO_BRIGHTNESS_MODE_DEFAULT); } @@ -1654,7 +1654,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal boolean isIncreasing = animateValue > currentBrightness; final float rampSpeed; final boolean idle = mAutomaticBrightnessController != null - && mAutomaticBrightnessController.isInIdleMode(); + && mAutomaticBrightnessController.getMode() + == AUTO_BRIGHTNESS_MODE_IDLE; if (isIncreasing && slowChange) { rampSpeed = idle ? mBrightnessRampRateSlowIncreaseIdle : mBrightnessRampRateSlowIncrease; @@ -1886,6 +1887,18 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal } @Override + public float[] getCurrentAutoBrightnessLevels() { + return mDisplayDeviceConfig.getAutoBrightnessBrighteningLevels( + mAutomaticBrightnessController.getMode()); + } + + @Override + public float[] getCurrentAutoBrightnessLuxLevels() { + return mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsLux( + mAutomaticBrightnessController.getMode()); + } + + @Override public BrightnessInfo getBrightnessInfo() { synchronized (mCachedBrightnessInfo) { return new BrightnessInfo( @@ -2460,7 +2473,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal // or the nits is invalid. if (brightnessIsTemporary || mAutomaticBrightnessController == null - || mAutomaticBrightnessController.isInIdleMode() + || mAutomaticBrightnessController.getMode() == AUTO_BRIGHTNESS_MODE_IDLE || !autobrightnessEnabled || mBrightnessTracker == null || !shouldUseAutoBrightness diff --git a/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java b/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java index c27918430254..5b350db5fa7b 100644 --- a/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java +++ b/services/core/java/com/android/server/display/DisplayPowerControllerInterface.java @@ -237,4 +237,14 @@ public interface DisplayPowerControllerInterface { * Indicate that boot has been completed and the screen is ready to update. */ void onBootCompleted(); + + /** + * Get the current brightness levels used to determine automatic brightness based on lux levels. + */ + float[] getCurrentAutoBrightnessLevels(); + + /** + * Get the current lux levels used to determine automatic brightness. + */ + float[] getCurrentAutoBrightnessLuxLevels(); } diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java index 4cc68cf11e69..7a708487293e 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java @@ -775,7 +775,7 @@ public final class DisplayPowerController2Test { final float hdrBrightness = 0.3f; when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON); when(mHolder.displayPowerState.getColorFadeLevel()).thenReturn(1.0f); - when(mHolder.automaticBrightnessController.isInIdleMode()).thenReturn(true); + when(mHolder.automaticBrightnessController.getMode()).thenReturn(AUTO_BRIGHTNESS_MODE_IDLE); when(mHolder.automaticBrightnessController.getAutomaticScreenBrightness( any(BrightnessEvent.class))).thenReturn(sdrBrightness); when(mHolder.hdrClamper.getMaxBrightness()).thenReturn(1.0f); @@ -1234,7 +1234,7 @@ public final class DisplayPowerController2Test { float brightness = 0.6f; when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON); when(mHolder.displayPowerState.getColorFadeLevel()).thenReturn(1.0f); - when(mHolder.automaticBrightnessController.isInIdleMode()).thenReturn(true); + when(mHolder.automaticBrightnessController.getMode()).thenReturn(AUTO_BRIGHTNESS_MODE_IDLE); when(mHolder.automaticBrightnessController.getAutomaticScreenBrightness( any(BrightnessEvent.class))).thenReturn(brightness); @@ -1597,7 +1597,7 @@ public final class DisplayPowerController2Test { public void testDoesNotSwitchFromIdleToDozeAutoBrightnessMode() { when(mDisplayManagerFlagsMock.areAutoBrightnessModesEnabled()).thenReturn(true); when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_DOZE); - when(mHolder.automaticBrightnessController.isInIdleMode()).thenReturn(true); + when(mHolder.automaticBrightnessController.getMode()).thenReturn(AUTO_BRIGHTNESS_MODE_IDLE); DisplayPowerRequest dpr = new DisplayPowerRequest(); mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); 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 943862f918bc..d69c140716f3 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java @@ -1164,7 +1164,7 @@ public final class DisplayPowerControllerTest { float brightness = 0.6f; when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON); when(mHolder.displayPowerState.getColorFadeLevel()).thenReturn(1.0f); - when(mHolder.automaticBrightnessController.isInIdleMode()).thenReturn(true); + when(mHolder.automaticBrightnessController.getMode()).thenReturn(AUTO_BRIGHTNESS_MODE_IDLE); when(mHolder.automaticBrightnessController.getAutomaticScreenBrightness( any(BrightnessEvent.class))).thenReturn(brightness); |