diff options
| author | 2023-03-22 10:41:49 +0000 | |
|---|---|---|
| committer | 2023-03-22 10:41:49 +0000 | |
| commit | 310e20565b7fb37c2bdc3601c48b1d65258f116e (patch) | |
| tree | d2422769a0e9a2a5979b3d108a1f717f6967eb71 | |
| parent | b234b657a1ae8e316c51ac2be883e8da7bdbc347 (diff) | |
| parent | 73dee75148b8ddbfb0edcfebff6d3449d4956da4 (diff) | |
Merge "Translate the float scale value to a nit value when transferring the short-term model" into udc-dev
4 files changed, 149 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index e12cd8c9a43b..656882f3f615 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -1056,10 +1056,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } float userLux = BrightnessMappingStrategy.NO_USER_LUX; - float userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS; + float userNits = -1; if (mInteractiveModeBrightnessMapper != null) { userLux = mInteractiveModeBrightnessMapper.getUserLux(); - userBrightness = mInteractiveModeBrightnessMapper.getUserBrightness(); + float userBrightness = mInteractiveModeBrightnessMapper.getUserBrightness(); + userNits = mInteractiveModeBrightnessMapper.convertToNits(userBrightness); } final boolean isIdleScreenBrightnessEnabled = resources.getBoolean( @@ -1179,6 +1180,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (mAutomaticBrightnessController != null) { mAutomaticBrightnessController.stop(); } + float userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS; + if (userNits >= 0) { + userBrightness = mInteractiveModeBrightnessMapper.convertToFloatScale(userNits); + if (userBrightness == PowerManager.BRIGHTNESS_INVALID_FLOAT) { + userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS; + } + } mAutomaticBrightnessController = mInjector.getAutomaticBrightnessController( this, handler.getLooper(), mSensorManager, mLightSensor, mInteractiveModeBrightnessMapper, lightSensorWarmUpTimeConfig, diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java index fbc354eb4c11..3e01222bbae6 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController2.java +++ b/services/core/java/com/android/server/display/DisplayPowerController2.java @@ -893,10 +893,11 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal } float userLux = BrightnessMappingStrategy.NO_USER_LUX; - float userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS; + float userNits = -1; if (mInteractiveModeBrightnessMapper != null) { userLux = mInteractiveModeBrightnessMapper.getUserLux(); - userBrightness = mInteractiveModeBrightnessMapper.getUserBrightness(); + float userBrightness = mInteractiveModeBrightnessMapper.getUserBrightness(); + userNits = mInteractiveModeBrightnessMapper.convertToNits(userBrightness); } final boolean isIdleScreenBrightnessEnabled = resources.getBoolean( @@ -1016,6 +1017,13 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal if (mAutomaticBrightnessController != null) { mAutomaticBrightnessController.stop(); } + float userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS; + if (userNits >= 0) { + userBrightness = mInteractiveModeBrightnessMapper.convertToFloatScale(userNits); + if (userBrightness == PowerManager.BRIGHTNESS_INVALID_FLOAT) { + userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS; + } + } mAutomaticBrightnessController = mInjector.getAutomaticBrightnessController( this, handler.getLooper(), mSensorManager, mLightSensor, mInteractiveModeBrightnessMapper, lightSensorWarmUpTimeConfig, diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java index 51dcc0323a96..0ab984bd9381 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java +++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java @@ -21,11 +21,14 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; import static org.junit.Assert.assertNotNull; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.mock; @@ -672,6 +675,7 @@ public final class DisplayPowerController2Test { @Test public void testStopScreenOffBrightnessSensorControllerWhenDisplayDeviceChanges() { + // New display device setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class), mock(DisplayDeviceConfig.class), /* isEnabled= */ true); @@ -711,6 +715,56 @@ public final class DisplayPowerController2Test { verify(mHolder.animator, times(2)).animateTo(eq(newBrightness), anyFloat(), anyFloat()); } + @Test + public void testShortTermModelPersistsWhenDisplayDeviceChanges() { + float lux = 2000; + float brightness = 0.4f; + float nits = 500; + when(mHolder.brightnessMappingStrategy.getUserLux()).thenReturn(lux); + when(mHolder.brightnessMappingStrategy.getUserBrightness()).thenReturn(brightness); + when(mHolder.brightnessMappingStrategy.convertToNits(brightness)).thenReturn(nits); + when(mHolder.brightnessMappingStrategy.convertToFloatScale(nits)).thenReturn(brightness); + DisplayPowerRequest dpr = new DisplayPowerRequest(); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + advanceTime(1); + clearInvocations(mHolder.injector); + + // New display device + setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class), + mock(DisplayDeviceConfig.class), /* isEnabled= */ true); + mHolder.dpc.onDisplayChanged(mHolder.hbmMetadata, Layout.NO_LEAD_DISPLAY); + advanceTime(1); + + verify(mHolder.injector).getAutomaticBrightnessController( + any(AutomaticBrightnessController.Callbacks.class), + any(Looper.class), + eq(mSensorManagerMock), + any(), + eq(mHolder.brightnessMappingStrategy), + anyInt(), + anyFloat(), + anyFloat(), + anyFloat(), + anyInt(), + anyInt(), + anyLong(), + anyLong(), + anyBoolean(), + any(HysteresisLevels.class), + any(HysteresisLevels.class), + any(HysteresisLevels.class), + any(HysteresisLevels.class), + eq(mContextSpy), + any(HighBrightnessModeController.class), + any(BrightnessThrottler.class), + isNull(), + anyInt(), + anyInt(), + eq(lux), + eq(brightness) + ); + } + /** * Creates a mock and registers it to {@link LocalServices}. */ @@ -796,9 +850,9 @@ public final class DisplayPowerController2Test { final ScreenOffBrightnessSensorController screenOffBrightnessSensorController = mock(ScreenOffBrightnessSensorController.class); - TestInjector injector = new TestInjector(displayPowerState, animator, + TestInjector injector = spy(new TestInjector(displayPowerState, animator, automaticBrightnessController, wakelockController, brightnessMappingStrategy, - hysteresisLevels, screenOffBrightnessSensorController); + hysteresisLevels, screenOffBrightnessSensorController)); final LogicalDisplay display = mock(LogicalDisplay.class); final DisplayDevice device = mock(DisplayDevice.class); @@ -816,7 +870,8 @@ public final class DisplayPowerController2Test { return new DisplayPowerControllerHolder(dpc, display, displayPowerState, brightnessSetting, animator, automaticBrightnessController, wakelockController, - screenOffBrightnessSensorController, hbmMetadata); + screenOffBrightnessSensorController, hbmMetadata, brightnessMappingStrategy, + injector); } /** @@ -833,6 +888,8 @@ public final class DisplayPowerController2Test { public final WakelockController wakelockController; public final ScreenOffBrightnessSensorController screenOffBrightnessSensorController; public final HighBrightnessModeMetadata hbmMetadata; + public final BrightnessMappingStrategy brightnessMappingStrategy; + public final DisplayPowerController2.Injector injector; DisplayPowerControllerHolder(DisplayPowerController2 dpc, LogicalDisplay display, DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting, @@ -840,7 +897,9 @@ public final class DisplayPowerController2Test { AutomaticBrightnessController automaticBrightnessController, WakelockController wakelockController, ScreenOffBrightnessSensorController screenOffBrightnessSensorController, - HighBrightnessModeMetadata hbmMetadata) { + HighBrightnessModeMetadata hbmMetadata, + BrightnessMappingStrategy brightnessMappingStrategy, + DisplayPowerController2.Injector injector) { this.dpc = dpc; this.display = display; this.displayPowerState = displayPowerState; @@ -850,6 +909,8 @@ public final class DisplayPowerController2Test { this.wakelockController = wakelockController; this.screenOffBrightnessSensorController = screenOffBrightnessSensorController; this.hbmMetadata = hbmMetadata; + this.brightnessMappingStrategy = brightnessMappingStrategy; + this.injector = injector; } } diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java index 0a1bf1c9ed99..c021ef65a291 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java @@ -21,11 +21,14 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; import static org.junit.Assert.assertNotNull; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.mock; @@ -676,6 +679,7 @@ public final class DisplayPowerControllerTest { @Test public void testStopScreenOffBrightnessSensorControllerWhenDisplayDeviceChanges() { + // New display device setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class), mock(DisplayDeviceConfig.class), /* isEnabled= */ true); @@ -715,6 +719,56 @@ public final class DisplayPowerControllerTest { verify(mHolder.animator, times(2)).animateTo(eq(newBrightness), anyFloat(), anyFloat()); } + @Test + public void testShortTermModelPersistsWhenDisplayDeviceChanges() { + float lux = 2000; + float brightness = 0.4f; + float nits = 500; + when(mHolder.brightnessMappingStrategy.getUserLux()).thenReturn(lux); + when(mHolder.brightnessMappingStrategy.getUserBrightness()).thenReturn(brightness); + when(mHolder.brightnessMappingStrategy.convertToNits(brightness)).thenReturn(nits); + when(mHolder.brightnessMappingStrategy.convertToFloatScale(nits)).thenReturn(brightness); + DisplayPowerRequest dpr = new DisplayPowerRequest(); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + advanceTime(1); + clearInvocations(mHolder.injector); + + // New display device + setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class), + mock(DisplayDeviceConfig.class), /* isEnabled= */ true); + mHolder.dpc.onDisplayChanged(mHolder.hbmMetadata, Layout.NO_LEAD_DISPLAY); + advanceTime(1); + + verify(mHolder.injector).getAutomaticBrightnessController( + any(AutomaticBrightnessController.Callbacks.class), + any(Looper.class), + eq(mSensorManagerMock), + any(), + eq(mHolder.brightnessMappingStrategy), + anyInt(), + anyFloat(), + anyFloat(), + anyFloat(), + anyInt(), + anyInt(), + anyLong(), + anyLong(), + anyBoolean(), + any(HysteresisLevels.class), + any(HysteresisLevels.class), + any(HysteresisLevels.class), + any(HysteresisLevels.class), + eq(mContextSpy), + any(HighBrightnessModeController.class), + any(BrightnessThrottler.class), + isNull(), + anyInt(), + anyInt(), + eq(lux), + eq(brightness) + ); + } + /** * Creates a mock and registers it to {@link LocalServices}. */ @@ -799,9 +853,9 @@ public final class DisplayPowerControllerTest { final ScreenOffBrightnessSensorController screenOffBrightnessSensorController = mock(ScreenOffBrightnessSensorController.class); - DisplayPowerController.Injector injector = new TestInjector(displayPowerState, animator, + DisplayPowerController.Injector injector = spy(new TestInjector(displayPowerState, animator, automaticBrightnessController, brightnessMappingStrategy, hysteresisLevels, - screenOffBrightnessSensorController); + screenOffBrightnessSensorController)); final LogicalDisplay display = mock(LogicalDisplay.class); final DisplayDevice device = mock(DisplayDevice.class); @@ -819,7 +873,7 @@ public final class DisplayPowerControllerTest { return new DisplayPowerControllerHolder(dpc, display, displayPowerState, brightnessSetting, animator, automaticBrightnessController, screenOffBrightnessSensorController, - hbmMetadata); + hbmMetadata, brightnessMappingStrategy, injector); } /** @@ -835,13 +889,17 @@ public final class DisplayPowerControllerTest { public final AutomaticBrightnessController automaticBrightnessController; public final ScreenOffBrightnessSensorController screenOffBrightnessSensorController; public final HighBrightnessModeMetadata hbmMetadata; + public final BrightnessMappingStrategy brightnessMappingStrategy; + public final DisplayPowerController.Injector injector; DisplayPowerControllerHolder(DisplayPowerController dpc, LogicalDisplay display, DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting, DualRampAnimator<DisplayPowerState> animator, AutomaticBrightnessController automaticBrightnessController, ScreenOffBrightnessSensorController screenOffBrightnessSensorController, - HighBrightnessModeMetadata hbmMetadata) { + HighBrightnessModeMetadata hbmMetadata, + BrightnessMappingStrategy brightnessMappingStrategy, + DisplayPowerController.Injector injector) { this.dpc = dpc; this.display = display; this.displayPowerState = displayPowerState; @@ -850,6 +908,8 @@ public final class DisplayPowerControllerTest { this.automaticBrightnessController = automaticBrightnessController; this.screenOffBrightnessSensorController = screenOffBrightnessSensorController; this.hbmMetadata = hbmMetadata; + this.brightnessMappingStrategy = brightnessMappingStrategy; + this.injector = injector; } } |