diff --git a/services/core/java/com/android/server/display/HighBrightnessModeController.java b/services/core/java/com/android/server/display/HighBrightnessModeController.java index b3be894b9510e..5f8a4ab71e88e 100644 --- a/services/core/java/com/android/server/display/HighBrightnessModeController.java +++ b/services/core/java/com/android/server/display/HighBrightnessModeController.java @@ -446,30 +446,32 @@ class HighBrightnessModeController { private void updateHbmMode() { int newHbmMode = calculateHighBrightnessMode(); - updateHbmStats(mHbmMode, newHbmMode); + updateHbmStats(newHbmMode); if (mHbmMode != newHbmMode) { mHbmMode = newHbmMode; mHbmChangeCallback.run(); } } - private void updateHbmStats(int mode, int newMode) { + private void updateHbmStats(int newMode) { int state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF; if (newMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR && getHdrBrightnessValue() > mHbmData.transitionPoint) { state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_HDR; - } else if (newMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_SUNLIGHT) { + } else if (newMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_SUNLIGHT + && mBrightness > mHbmData.transitionPoint) { state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_SUNLIGHT; } if (state == mHbmStatsState) { return; } - mHbmStatsState = state; int reason = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__REASON__HBM_TRANSITION_REASON_UNKNOWN; - boolean oldHbmSv = (mode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_SUNLIGHT); - boolean newHbmSv = (newMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_SUNLIGHT); + boolean oldHbmSv = (mHbmStatsState + == FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_SUNLIGHT); + boolean newHbmSv = + (state == FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_SUNLIGHT); if (oldHbmSv && !newHbmSv) { // If more than one conditions are flipped and turn off HBM sunlight // visibility, only one condition will be reported to make it simple. @@ -496,6 +498,7 @@ class HighBrightnessModeController { } mInjector.reportHbmStateChange(mDisplayStatsId, state, reason); + mHbmStatsState = state; } private String hbmStatsStateToString(int hbmStatsState) { diff --git a/services/tests/servicestests/src/com/android/server/display/HighBrightnessModeControllerTest.java b/services/tests/servicestests/src/com/android/server/display/HighBrightnessModeControllerTest.java index 4bb5d7482e25a..67ac1dc188493 100644 --- a/services/tests/servicestests/src/com/android/server/display/HighBrightnessModeControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/display/HighBrightnessModeControllerTest.java @@ -523,6 +523,24 @@ public class HighBrightnessModeControllerTest { anyInt()); } + @Test + public void tetHbmStats_HighLuxLowBrightnessNoReport() { + final HighBrightnessModeController hbmc = createDefaultHbm(new OffsettableClock()); + final int displayStatsId = mDisplayUniqueId.hashCode(); + + hbmc.setAutoBrightnessEnabled(AUTO_BRIGHTNESS_ENABLED); + hbmc.onAmbientLuxChange(MINIMUM_LUX + 1); + hbmc.onBrightnessChanged(DEFAULT_MIN); + advanceTime(0); + // verify in HBM sunlight mode + assertEquals(HIGH_BRIGHTNESS_MODE_SUNLIGHT, hbmc.getHighBrightnessMode()); + + // Verify Stats HBM_ON_SUNLIGHT not report + verify(mInjectorMock, never()).reportHbmStateChange(eq(displayStatsId), + eq(FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_SUNLIGHT), + anyInt()); + } + @Test public void testHbmStats_ThermalOff() throws Exception { final HighBrightnessModeController hbmc = createDefaultHbm(new OffsettableClock());