Loading services/core/java/com/android/server/display/HighBrightnessModeController.java +22 −2 Original line number Diff line number Diff line Loading @@ -91,6 +91,7 @@ class HighBrightnessModeController { private int mHeight; private float mAmbientLux; private int mDisplayStatsId; private int mHbmStatsState = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF; /** * If HBM is currently running, this is the start time for the current HBM session. Loading Loading @@ -278,6 +279,7 @@ class HighBrightnessModeController { pw.println(" mHbmMode=" + BrightnessInfo.hbmToString(mHbmMode) + (mHbmMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR ? "(" + getHdrBrightnessValue() + ")" : "")); pw.println(" mHbmStatsState=" + hbmStatsStateToString(mHbmStatsState)); pw.println(" mHbmData=" + mHbmData); pw.println(" mAmbientLux=" + mAmbientLux + (mIsAutoBrightnessEnabled ? "" : " (old/invalid)")); Loading Loading @@ -444,8 +446,8 @@ class HighBrightnessModeController { private void updateHbmMode() { int newHbmMode = calculateHighBrightnessMode(); if (mHbmMode != newHbmMode) { updateHbmStats(mHbmMode, newHbmMode); if (mHbmMode != newHbmMode) { mHbmMode = newHbmMode; mHbmChangeCallback.run(); } Loading @@ -453,11 +455,16 @@ class HighBrightnessModeController { private void updateHbmStats(int mode, int newMode) { int state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF; if (newMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR) { 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) { 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; Loading Loading @@ -491,6 +498,19 @@ class HighBrightnessModeController { mInjector.reportHbmStateChange(mDisplayStatsId, state, reason); } private String hbmStatsStateToString(int hbmStatsState) { switch (hbmStatsState) { case FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF: return "HBM_OFF"; case FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_HDR: return "HBM_ON_HDR"; case FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_SUNLIGHT: return "HBM_ON_SUNLIGHT"; default: return String.valueOf(hbmStatsState); } } private int calculateHighBrightnessMode() { if (!deviceSupportsHbm()) { return BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF; Loading services/tests/servicestests/src/com/android/server/display/HighBrightnessModeControllerTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -28,7 +28,9 @@ import static com.android.server.display.AutomaticBrightnessController import static com.android.server.display.HighBrightnessModeController.HBM_TRANSITION_POINT_INVALID; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -503,6 +505,24 @@ public class HighBrightnessModeControllerTest { eq(FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__REASON__HBM_SV_OFF_LUX_DROP)); } @Test public void tetHbmStats_NbmHdrNoReport() { final HighBrightnessModeController hbmc = createDefaultHbm(new OffsettableClock()); final int displayStatsId = mDisplayUniqueId.hashCode(); hbmc.setAutoBrightnessEnabled(AUTO_BRIGHTNESS_ENABLED); hbmc.onBrightnessChanged(DEFAULT_MIN); hbmc.getHdrListener().onHdrInfoChanged(null /*displayToken*/, 1 /*numberOfHdrLayers*/, DISPLAY_WIDTH, DISPLAY_HEIGHT, 0 /*flags*/); advanceTime(0); assertEquals(HIGH_BRIGHTNESS_MODE_HDR, hbmc.getHighBrightnessMode()); // Verify Stats HBM_ON_HDR not report verify(mInjectorMock, never()).reportHbmStateChange(eq(displayStatsId), eq(FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_HDR), anyInt()); } @Test public void testHbmStats_ThermalOff() throws Exception { final HighBrightnessModeController hbmc = createDefaultHbm(new OffsettableClock()); Loading Loading
services/core/java/com/android/server/display/HighBrightnessModeController.java +22 −2 Original line number Diff line number Diff line Loading @@ -91,6 +91,7 @@ class HighBrightnessModeController { private int mHeight; private float mAmbientLux; private int mDisplayStatsId; private int mHbmStatsState = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF; /** * If HBM is currently running, this is the start time for the current HBM session. Loading Loading @@ -278,6 +279,7 @@ class HighBrightnessModeController { pw.println(" mHbmMode=" + BrightnessInfo.hbmToString(mHbmMode) + (mHbmMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR ? "(" + getHdrBrightnessValue() + ")" : "")); pw.println(" mHbmStatsState=" + hbmStatsStateToString(mHbmStatsState)); pw.println(" mHbmData=" + mHbmData); pw.println(" mAmbientLux=" + mAmbientLux + (mIsAutoBrightnessEnabled ? "" : " (old/invalid)")); Loading Loading @@ -444,8 +446,8 @@ class HighBrightnessModeController { private void updateHbmMode() { int newHbmMode = calculateHighBrightnessMode(); if (mHbmMode != newHbmMode) { updateHbmStats(mHbmMode, newHbmMode); if (mHbmMode != newHbmMode) { mHbmMode = newHbmMode; mHbmChangeCallback.run(); } Loading @@ -453,11 +455,16 @@ class HighBrightnessModeController { private void updateHbmStats(int mode, int newMode) { int state = FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF; if (newMode == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR) { 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) { 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; Loading Loading @@ -491,6 +498,19 @@ class HighBrightnessModeController { mInjector.reportHbmStateChange(mDisplayStatsId, state, reason); } private String hbmStatsStateToString(int hbmStatsState) { switch (hbmStatsState) { case FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_OFF: return "HBM_OFF"; case FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_HDR: return "HBM_ON_HDR"; case FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_SUNLIGHT: return "HBM_ON_SUNLIGHT"; default: return String.valueOf(hbmStatsState); } } private int calculateHighBrightnessMode() { if (!deviceSupportsHbm()) { return BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF; Loading
services/tests/servicestests/src/com/android/server/display/HighBrightnessModeControllerTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -28,7 +28,9 @@ import static com.android.server.display.AutomaticBrightnessController import static com.android.server.display.HighBrightnessModeController.HBM_TRANSITION_POINT_INVALID; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -503,6 +505,24 @@ public class HighBrightnessModeControllerTest { eq(FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__REASON__HBM_SV_OFF_LUX_DROP)); } @Test public void tetHbmStats_NbmHdrNoReport() { final HighBrightnessModeController hbmc = createDefaultHbm(new OffsettableClock()); final int displayStatsId = mDisplayUniqueId.hashCode(); hbmc.setAutoBrightnessEnabled(AUTO_BRIGHTNESS_ENABLED); hbmc.onBrightnessChanged(DEFAULT_MIN); hbmc.getHdrListener().onHdrInfoChanged(null /*displayToken*/, 1 /*numberOfHdrLayers*/, DISPLAY_WIDTH, DISPLAY_HEIGHT, 0 /*flags*/); advanceTime(0); assertEquals(HIGH_BRIGHTNESS_MODE_HDR, hbmc.getHighBrightnessMode()); // Verify Stats HBM_ON_HDR not report verify(mInjectorMock, never()).reportHbmStateChange(eq(displayStatsId), eq(FrameworkStatsLog.DISPLAY_HBM_STATE_CHANGED__STATE__HBM_ON_HDR), anyInt()); } @Test public void testHbmStats_ThermalOff() throws Exception { final HighBrightnessModeController hbmc = createDefaultHbm(new OffsettableClock()); Loading