Loading core/java/android/hardware/display/BrightnessInfo.java +2 −0 Original line number Diff line number Diff line Loading @@ -158,6 +158,8 @@ public final class BrightnessInfo implements Parcelable { return "thermal"; case BRIGHTNESS_MAX_REASON_POWER_IC: return "power IC"; case BRIGHTNESS_MAX_REASON_WEAR_BEDTIME_MODE: return "wear bedtime"; } return "invalid"; } Loading services/core/java/com/android/server/display/DisplayBrightnessState.java +36 −6 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.display; import android.hardware.display.BrightnessInfo; import android.text.TextUtils; import com.android.server.display.brightness.BrightnessEvent; Loading Loading @@ -50,6 +51,8 @@ public final class DisplayBrightnessState { private final boolean mIsUserInitiatedChange; private @BrightnessInfo.BrightnessMaxReason int mBrightnessMaxReason; private DisplayBrightnessState(Builder builder) { mBrightness = builder.getBrightness(); mHdrBrightness = builder.getHdrBrightness(); Loading @@ -64,6 +67,7 @@ public final class DisplayBrightnessState { mBrightnessEvent = builder.getBrightnessEvent(); mBrightnessAdjustmentFlag = builder.getBrightnessAdjustmentFlag(); mIsUserInitiatedChange = builder.isUserInitiatedChange(); mBrightnessMaxReason = builder.getBrightnessMaxReason(); } /** Loading Loading @@ -159,6 +163,13 @@ public final class DisplayBrightnessState { return mIsUserInitiatedChange; } /** * Gets reason for max brightness restriction */ public @BrightnessInfo.BrightnessMaxReason int getBrightnessMaxReason() { return mBrightnessMaxReason; } @Override public String toString() { StringBuilder stringBuilder = new StringBuilder("DisplayBrightnessState:"); Loading @@ -180,6 +191,8 @@ public final class DisplayBrightnessState { .append(Objects.toString(mBrightnessEvent, "null")); stringBuilder.append("\n mBrightnessAdjustmentFlag:").append(mBrightnessAdjustmentFlag); stringBuilder.append("\n mIsUserInitiatedChange:").append(mIsUserInitiatedChange); stringBuilder.append("\n mBrightnessMaxReason:") .append(BrightnessInfo.briMaxReasonToString(mBrightnessMaxReason)); return stringBuilder.toString(); } Loading Loading @@ -212,7 +225,8 @@ public final class DisplayBrightnessState { == otherState.shouldUpdateScreenBrightnessSetting() && Objects.equals(mBrightnessEvent, otherState.getBrightnessEvent()) && mBrightnessAdjustmentFlag == otherState.getBrightnessAdjustmentFlag() && mIsUserInitiatedChange == otherState.isUserInitiatedChange(); && mIsUserInitiatedChange == otherState.isUserInitiatedChange() && mBrightnessMaxReason == otherState.getBrightnessMaxReason(); } @Override Loading @@ -221,7 +235,7 @@ public final class DisplayBrightnessState { mShouldUseAutoBrightness, mIsSlowChange, mMaxBrightness, mMinBrightness, mCustomAnimationRate, mShouldUpdateScreenBrightnessSetting, mBrightnessEvent, mBrightnessAdjustmentFlag, mIsUserInitiatedChange); mIsUserInitiatedChange, mBrightnessMaxReason); } /** Loading @@ -245,12 +259,11 @@ public final class DisplayBrightnessState { private float mMinBrightness; private float mCustomAnimationRate = CUSTOM_ANIMATION_RATE_NOT_SET; private boolean mShouldUpdateScreenBrightnessSetting; private BrightnessEvent mBrightnessEvent; public int mBrightnessAdjustmentFlag = 0; private int mBrightnessAdjustmentFlag = 0; private boolean mIsUserInitiatedChange; private @BrightnessInfo.BrightnessMaxReason int mBrightnessMaxReason = BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE; /** * Create a builder starting with the values from the specified {@link Loading @@ -274,6 +287,7 @@ public final class DisplayBrightnessState { builder.setBrightnessEvent(state.getBrightnessEvent()); builder.setBrightnessAdjustmentFlag(state.getBrightnessAdjustmentFlag()); builder.setIsUserInitiatedChange(state.isUserInitiatedChange()); builder.setBrightnessMaxReason(state.getBrightnessMaxReason()); return builder; } Loading Loading @@ -506,5 +520,21 @@ public final class DisplayBrightnessState { mIsUserInitiatedChange = isUserInitiatedChange; return this; } /** * Gets reason for max brightness restriction */ public @BrightnessInfo.BrightnessMaxReason int getBrightnessMaxReason() { return mBrightnessMaxReason; } /** * Sets reason for max brightness restriction */ public Builder setBrightnessMaxReason( @BrightnessInfo.BrightnessMaxReason int brightnessMaxReason) { mBrightnessMaxReason = brightnessMaxReason; return this; } } } services/core/java/com/android/server/display/DisplayPowerController.java +9 −5 Original line number Diff line number Diff line Loading @@ -1588,7 +1588,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // brightness sources (such as an app override) are not saved to the setting, but should be // reflected in HBM calculations. mBrightnessRangeController.onBrightnessChanged(brightnessState, unthrottledBrightnessState, mBrightnessClamperController.getBrightnessMaxReason()); clampedState.getBrightnessMaxReason()); // Animate the screen brightness when the screen is on or dozing. // Skip the animation when the screen is off or suspended. Loading Loading @@ -1804,7 +1804,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (userSetBrightnessChanged || newEvent.getReason().getReason() != BrightnessReason.REASON_TEMPORARY) { logBrightnessEvent(newEvent, unthrottledBrightnessState); logBrightnessEvent(newEvent, unthrottledBrightnessState, clampedState); } if (mBrightnessEventRingBuffer != null) { mBrightnessEventRingBuffer.append(newEvent); Loading Loading @@ -1997,6 +1997,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call synchronized (mCachedBrightnessInfo) { float stateMax = state != null ? state.getMaxBrightness() : PowerManager.BRIGHTNESS_MAX; float stateMin = state != null ? state.getMinBrightness() : PowerManager.BRIGHTNESS_MAX; @BrightnessInfo.BrightnessMaxReason int maxReason = state != null ? state.getBrightnessMaxReason() : BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE; final float minBrightness = Math.max(stateMin, Math.min( mBrightnessRangeController.getCurrentBrightnessMin(), stateMax)); final float maxBrightness = Math.min( Loading @@ -2023,7 +2026,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessRangeController.getTransitionPoint()); changed |= mCachedBrightnessInfo.checkAndSetInt(mCachedBrightnessInfo.brightnessMaxReason, mBrightnessClamperController.getBrightnessMaxReason()); maxReason); return changed; } } Loading Loading @@ -2926,7 +2929,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call return FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__ENTIRE_REASON__REASON_UNKNOWN; } private void logBrightnessEvent(BrightnessEvent event, float unmodifiedBrightness) { private void logBrightnessEvent(BrightnessEvent event, float unmodifiedBrightness, DisplayBrightnessState brightnessState) { int modifier = event.getReason().getModifier(); int flags = event.getFlags(); // It's easier to check if the brightness is at maximum level using the brightness Loading Loading @@ -2963,7 +2967,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call event.getHbmMode() == BrightnessInfo.HIGH_BRIGHTNESS_MODE_SUNLIGHT, event.getHbmMode() == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR, (modifier & BrightnessReason.MODIFIER_LOW_POWER) > 0, mBrightnessClamperController.getBrightnessMaxReason(), brightnessState.getBrightnessMaxReason(), // TODO: (flc) add brightnessMinReason here too. (modifier & BrightnessReason.MODIFIER_DIMMED) > 0, event.isRbcEnabled(), Loading services/core/java/com/android/server/display/brightness/clamper/BrightnessClamperController.java +2 −12 Original line number Diff line number Diff line Loading @@ -161,6 +161,7 @@ public class BrightnessClamperController { builder.setBrightness(cappedBrightness); builder.setMaxBrightness(mBrightnessCap); builder.setCustomAnimationRate(mCustomAnimationRate); builder.setBrightnessMaxReason(getBrightnessMaxReason()); if (mClamperType != null) { builder.getBrightnessReason().addModifier(BrightnessReason.MODIFIER_THROTTLED); Loading @@ -185,19 +186,8 @@ public class BrightnessClamperController { return builder.build(); } /** * See BrightnessThrottler.getBrightnessMaxReason: * used in: * 1) DPC2.CachedBrightnessInfo to determine changes * 2) DPC2.logBrightnessEvent * 3) HBMController - for logging * Method is called in mHandler thread (DisplayControllerHandler), in the same thread * recalculateBrightnessCap and DPC2.updatePowerStateInternal are called. * Should be moved to DisplayBrightnessState OR derived from DisplayBrightnessState * TODO: b/263362199 */ @BrightnessInfo.BrightnessMaxReason public int getBrightnessMaxReason() { private int getBrightnessMaxReason() { if (mClamperType == null) { return BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE; } else if (mClamperType == Type.THERMAL) { Loading services/tests/displayservicetests/src/com/android/server/display/DisplayBrightnessStateTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.display; import static org.junit.Assert.assertEquals; import android.hardware.display.BrightnessInfo; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; Loading Loading @@ -112,7 +114,10 @@ public class DisplayBrightnessStateTest { .append("\n mBrightnessAdjustmentFlag:") .append(displayBrightnessState.getBrightnessAdjustmentFlag()) .append("\n mIsUserInitiatedChange:") .append(displayBrightnessState.isUserInitiatedChange()); .append(displayBrightnessState.isUserInitiatedChange()) .append("\n mBrightnessMaxReason:") .append(BrightnessInfo.briMaxReasonToString( displayBrightnessState.getBrightnessMaxReason())); return sb.toString(); } } Loading
core/java/android/hardware/display/BrightnessInfo.java +2 −0 Original line number Diff line number Diff line Loading @@ -158,6 +158,8 @@ public final class BrightnessInfo implements Parcelable { return "thermal"; case BRIGHTNESS_MAX_REASON_POWER_IC: return "power IC"; case BRIGHTNESS_MAX_REASON_WEAR_BEDTIME_MODE: return "wear bedtime"; } return "invalid"; } Loading
services/core/java/com/android/server/display/DisplayBrightnessState.java +36 −6 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.display; import android.hardware.display.BrightnessInfo; import android.text.TextUtils; import com.android.server.display.brightness.BrightnessEvent; Loading Loading @@ -50,6 +51,8 @@ public final class DisplayBrightnessState { private final boolean mIsUserInitiatedChange; private @BrightnessInfo.BrightnessMaxReason int mBrightnessMaxReason; private DisplayBrightnessState(Builder builder) { mBrightness = builder.getBrightness(); mHdrBrightness = builder.getHdrBrightness(); Loading @@ -64,6 +67,7 @@ public final class DisplayBrightnessState { mBrightnessEvent = builder.getBrightnessEvent(); mBrightnessAdjustmentFlag = builder.getBrightnessAdjustmentFlag(); mIsUserInitiatedChange = builder.isUserInitiatedChange(); mBrightnessMaxReason = builder.getBrightnessMaxReason(); } /** Loading Loading @@ -159,6 +163,13 @@ public final class DisplayBrightnessState { return mIsUserInitiatedChange; } /** * Gets reason for max brightness restriction */ public @BrightnessInfo.BrightnessMaxReason int getBrightnessMaxReason() { return mBrightnessMaxReason; } @Override public String toString() { StringBuilder stringBuilder = new StringBuilder("DisplayBrightnessState:"); Loading @@ -180,6 +191,8 @@ public final class DisplayBrightnessState { .append(Objects.toString(mBrightnessEvent, "null")); stringBuilder.append("\n mBrightnessAdjustmentFlag:").append(mBrightnessAdjustmentFlag); stringBuilder.append("\n mIsUserInitiatedChange:").append(mIsUserInitiatedChange); stringBuilder.append("\n mBrightnessMaxReason:") .append(BrightnessInfo.briMaxReasonToString(mBrightnessMaxReason)); return stringBuilder.toString(); } Loading Loading @@ -212,7 +225,8 @@ public final class DisplayBrightnessState { == otherState.shouldUpdateScreenBrightnessSetting() && Objects.equals(mBrightnessEvent, otherState.getBrightnessEvent()) && mBrightnessAdjustmentFlag == otherState.getBrightnessAdjustmentFlag() && mIsUserInitiatedChange == otherState.isUserInitiatedChange(); && mIsUserInitiatedChange == otherState.isUserInitiatedChange() && mBrightnessMaxReason == otherState.getBrightnessMaxReason(); } @Override Loading @@ -221,7 +235,7 @@ public final class DisplayBrightnessState { mShouldUseAutoBrightness, mIsSlowChange, mMaxBrightness, mMinBrightness, mCustomAnimationRate, mShouldUpdateScreenBrightnessSetting, mBrightnessEvent, mBrightnessAdjustmentFlag, mIsUserInitiatedChange); mIsUserInitiatedChange, mBrightnessMaxReason); } /** Loading @@ -245,12 +259,11 @@ public final class DisplayBrightnessState { private float mMinBrightness; private float mCustomAnimationRate = CUSTOM_ANIMATION_RATE_NOT_SET; private boolean mShouldUpdateScreenBrightnessSetting; private BrightnessEvent mBrightnessEvent; public int mBrightnessAdjustmentFlag = 0; private int mBrightnessAdjustmentFlag = 0; private boolean mIsUserInitiatedChange; private @BrightnessInfo.BrightnessMaxReason int mBrightnessMaxReason = BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE; /** * Create a builder starting with the values from the specified {@link Loading @@ -274,6 +287,7 @@ public final class DisplayBrightnessState { builder.setBrightnessEvent(state.getBrightnessEvent()); builder.setBrightnessAdjustmentFlag(state.getBrightnessAdjustmentFlag()); builder.setIsUserInitiatedChange(state.isUserInitiatedChange()); builder.setBrightnessMaxReason(state.getBrightnessMaxReason()); return builder; } Loading Loading @@ -506,5 +520,21 @@ public final class DisplayBrightnessState { mIsUserInitiatedChange = isUserInitiatedChange; return this; } /** * Gets reason for max brightness restriction */ public @BrightnessInfo.BrightnessMaxReason int getBrightnessMaxReason() { return mBrightnessMaxReason; } /** * Sets reason for max brightness restriction */ public Builder setBrightnessMaxReason( @BrightnessInfo.BrightnessMaxReason int brightnessMaxReason) { mBrightnessMaxReason = brightnessMaxReason; return this; } } }
services/core/java/com/android/server/display/DisplayPowerController.java +9 −5 Original line number Diff line number Diff line Loading @@ -1588,7 +1588,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // brightness sources (such as an app override) are not saved to the setting, but should be // reflected in HBM calculations. mBrightnessRangeController.onBrightnessChanged(brightnessState, unthrottledBrightnessState, mBrightnessClamperController.getBrightnessMaxReason()); clampedState.getBrightnessMaxReason()); // Animate the screen brightness when the screen is on or dozing. // Skip the animation when the screen is off or suspended. Loading Loading @@ -1804,7 +1804,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (userSetBrightnessChanged || newEvent.getReason().getReason() != BrightnessReason.REASON_TEMPORARY) { logBrightnessEvent(newEvent, unthrottledBrightnessState); logBrightnessEvent(newEvent, unthrottledBrightnessState, clampedState); } if (mBrightnessEventRingBuffer != null) { mBrightnessEventRingBuffer.append(newEvent); Loading Loading @@ -1997,6 +1997,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call synchronized (mCachedBrightnessInfo) { float stateMax = state != null ? state.getMaxBrightness() : PowerManager.BRIGHTNESS_MAX; float stateMin = state != null ? state.getMinBrightness() : PowerManager.BRIGHTNESS_MAX; @BrightnessInfo.BrightnessMaxReason int maxReason = state != null ? state.getBrightnessMaxReason() : BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE; final float minBrightness = Math.max(stateMin, Math.min( mBrightnessRangeController.getCurrentBrightnessMin(), stateMax)); final float maxBrightness = Math.min( Loading @@ -2023,7 +2026,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessRangeController.getTransitionPoint()); changed |= mCachedBrightnessInfo.checkAndSetInt(mCachedBrightnessInfo.brightnessMaxReason, mBrightnessClamperController.getBrightnessMaxReason()); maxReason); return changed; } } Loading Loading @@ -2926,7 +2929,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call return FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__ENTIRE_REASON__REASON_UNKNOWN; } private void logBrightnessEvent(BrightnessEvent event, float unmodifiedBrightness) { private void logBrightnessEvent(BrightnessEvent event, float unmodifiedBrightness, DisplayBrightnessState brightnessState) { int modifier = event.getReason().getModifier(); int flags = event.getFlags(); // It's easier to check if the brightness is at maximum level using the brightness Loading Loading @@ -2963,7 +2967,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call event.getHbmMode() == BrightnessInfo.HIGH_BRIGHTNESS_MODE_SUNLIGHT, event.getHbmMode() == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR, (modifier & BrightnessReason.MODIFIER_LOW_POWER) > 0, mBrightnessClamperController.getBrightnessMaxReason(), brightnessState.getBrightnessMaxReason(), // TODO: (flc) add brightnessMinReason here too. (modifier & BrightnessReason.MODIFIER_DIMMED) > 0, event.isRbcEnabled(), Loading
services/core/java/com/android/server/display/brightness/clamper/BrightnessClamperController.java +2 −12 Original line number Diff line number Diff line Loading @@ -161,6 +161,7 @@ public class BrightnessClamperController { builder.setBrightness(cappedBrightness); builder.setMaxBrightness(mBrightnessCap); builder.setCustomAnimationRate(mCustomAnimationRate); builder.setBrightnessMaxReason(getBrightnessMaxReason()); if (mClamperType != null) { builder.getBrightnessReason().addModifier(BrightnessReason.MODIFIER_THROTTLED); Loading @@ -185,19 +186,8 @@ public class BrightnessClamperController { return builder.build(); } /** * See BrightnessThrottler.getBrightnessMaxReason: * used in: * 1) DPC2.CachedBrightnessInfo to determine changes * 2) DPC2.logBrightnessEvent * 3) HBMController - for logging * Method is called in mHandler thread (DisplayControllerHandler), in the same thread * recalculateBrightnessCap and DPC2.updatePowerStateInternal are called. * Should be moved to DisplayBrightnessState OR derived from DisplayBrightnessState * TODO: b/263362199 */ @BrightnessInfo.BrightnessMaxReason public int getBrightnessMaxReason() { private int getBrightnessMaxReason() { if (mClamperType == null) { return BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE; } else if (mClamperType == Type.THERMAL) { Loading
services/tests/displayservicetests/src/com/android/server/display/DisplayBrightnessStateTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.display; import static org.junit.Assert.assertEquals; import android.hardware.display.BrightnessInfo; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; Loading Loading @@ -112,7 +114,10 @@ public class DisplayBrightnessStateTest { .append("\n mBrightnessAdjustmentFlag:") .append(displayBrightnessState.getBrightnessAdjustmentFlag()) .append("\n mIsUserInitiatedChange:") .append(displayBrightnessState.isUserInitiatedChange()); .append(displayBrightnessState.isUserInitiatedChange()) .append("\n mBrightnessMaxReason:") .append(BrightnessInfo.briMaxReasonToString( displayBrightnessState.getBrightnessMaxReason())); return sb.toString(); } }