Stop the screen off brightness sensor controller

This change was implemented in DPC1 in ag/20869684 but has not been implemented in DPC2.

Bug: 269533295
Test: atest DisplayPowerControllerTest
Test: atest DisplayPowerController2Test
Change-Id: I57bfbef2830e30289368a0e0ad8df5ec46607e10
This commit is contained in:
Piotr Wilczyński
2023-02-24 14:11:41 +00:00
parent 7429467d02
commit e31de87e43
4 changed files with 62 additions and 14 deletions

View File

@@ -885,7 +885,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
final boolean isInTransition = mLogicalDisplay.isInTransitionLocked(); final boolean isInTransition = mLogicalDisplay.isInTransitionLocked();
final String brightnessThrottlingDataId = final String brightnessThrottlingDataId =
mLogicalDisplay.getBrightnessThrottlingDataIdLocked(); mLogicalDisplay.getBrightnessThrottlingDataIdLocked();
mHandler.post(() -> { mHandler.postAtTime(() -> {
boolean changed = false; boolean changed = false;
if (mDisplayDevice != device) { if (mDisplayDevice != device) {
changed = true; changed = true;
@@ -916,7 +916,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (changed) { if (changed) {
updatePowerState(); updatePowerState();
} }
}); }, mClock.uptimeMillis());
} }
/** /**
@@ -940,10 +940,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mAutomaticBrightnessController.stop(); mAutomaticBrightnessController.stop();
} }
if (mScreenOffBrightnessSensorController != null) {
mScreenOffBrightnessSensorController.stop();
}
if (mBrightnessSetting != null) { if (mBrightnessSetting != null) {
mBrightnessSetting.unregisterListener(mBrightnessSettingListener); mBrightnessSetting.unregisterListener(mBrightnessSettingListener);
} }
@@ -1190,6 +1186,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
if (mScreenOffBrightnessSensorController != null) { if (mScreenOffBrightnessSensorController != null) {
mScreenOffBrightnessSensorController.stop(); mScreenOffBrightnessSensorController.stop();
mScreenOffBrightnessSensorController = null;
} }
loadScreenOffBrightnessSensor(); loadScreenOffBrightnessSensor();
int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux(); int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux();
@@ -1311,6 +1308,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mPowerState.stop(); mPowerState.stop();
mPowerState = null; mPowerState = null;
} }
if (mScreenOffBrightnessSensorController != null) {
mScreenOffBrightnessSensorController.stop();
}
} }
private void updatePowerState() { private void updatePowerState() {

View File

@@ -729,7 +729,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
final String brightnessThrottlingDataId = final String brightnessThrottlingDataId =
mLogicalDisplay.getBrightnessThrottlingDataIdLocked(); mLogicalDisplay.getBrightnessThrottlingDataIdLocked();
mHandler.post(() -> { mHandler.postAtTime(() -> {
boolean changed = false; boolean changed = false;
if (mDisplayDevice != device) { if (mDisplayDevice != device) {
changed = true; changed = true;
@@ -761,7 +761,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
if (changed) { if (changed) {
updatePowerState(); updatePowerState();
} }
}); }, mClock.uptimeMillis());
} }
/** /**
@@ -1028,6 +1028,10 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
mBrightnessEventRingBuffer = mBrightnessEventRingBuffer =
new RingBuffer<>(BrightnessEvent.class, RINGBUFFER_MAX); new RingBuffer<>(BrightnessEvent.class, RINGBUFFER_MAX);
if (mScreenOffBrightnessSensorController != null) {
mScreenOffBrightnessSensorController.stop();
mScreenOffBrightnessSensorController = null;
}
loadScreenOffBrightnessSensor(); loadScreenOffBrightnessSensor();
int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux(); int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux();
if (mScreenOffBrightnessSensor != null && sensorValueToLux != null) { if (mScreenOffBrightnessSensor != null && sensorValueToLux != null) {
@@ -1133,6 +1137,10 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
mPowerState.stop(); mPowerState.stop();
mPowerState = null; mPowerState = null;
} }
if (mScreenOffBrightnessSensorController != null) {
mScreenOffBrightnessSensorController.stop();
}
} }
private void updatePowerState() { private void updatePowerState() {

View File

@@ -64,6 +64,7 @@ import com.android.server.am.BatteryStatsService;
import com.android.server.display.RampAnimator.DualRampAnimator; import com.android.server.display.RampAnimator.DualRampAnimator;
import com.android.server.display.brightness.BrightnessEvent; import com.android.server.display.brightness.BrightnessEvent;
import com.android.server.display.color.ColorDisplayService; import com.android.server.display.color.ColorDisplayService;
import com.android.server.display.layout.Layout;
import com.android.server.display.whitebalance.DisplayWhiteBalanceController; import com.android.server.display.whitebalance.DisplayWhiteBalanceController;
import com.android.server.policy.WindowManagerPolicy; import com.android.server.policy.WindowManagerPolicy;
import com.android.server.testutils.OffsettableClock; import com.android.server.testutils.OffsettableClock;
@@ -240,12 +241,15 @@ public final class DisplayPowerController2Test {
boolean isEnabled) { boolean isEnabled) {
DisplayInfo info = new DisplayInfo(); DisplayInfo info = new DisplayInfo();
DisplayDeviceInfo deviceInfo = new DisplayDeviceInfo(); DisplayDeviceInfo deviceInfo = new DisplayDeviceInfo();
deviceInfo.uniqueId = uniqueId;
when(logicalDisplayMock.getDisplayIdLocked()).thenReturn(displayId); when(logicalDisplayMock.getDisplayIdLocked()).thenReturn(displayId);
when(logicalDisplayMock.getPrimaryDisplayDeviceLocked()).thenReturn(displayDeviceMock); when(logicalDisplayMock.getPrimaryDisplayDeviceLocked()).thenReturn(displayDeviceMock);
when(logicalDisplayMock.getDisplayInfoLocked()).thenReturn(info); when(logicalDisplayMock.getDisplayInfoLocked()).thenReturn(info);
when(logicalDisplayMock.isEnabledLocked()).thenReturn(isEnabled); when(logicalDisplayMock.isEnabledLocked()).thenReturn(isEnabled);
when(logicalDisplayMock.isInTransitionLocked()).thenReturn(false); when(logicalDisplayMock.isInTransitionLocked()).thenReturn(false);
when(logicalDisplayMock.getBrightnessThrottlingDataIdLocked()).thenReturn(
DisplayDeviceConfig.DEFAULT_BRIGHTNESS_THROTTLING_DATA_ID);
when(displayDeviceMock.getDisplayDeviceInfoLocked()).thenReturn(deviceInfo); when(displayDeviceMock.getDisplayDeviceInfoLocked()).thenReturn(deviceInfo);
when(displayDeviceMock.getUniqueId()).thenReturn(uniqueId); when(displayDeviceMock.getUniqueId()).thenReturn(uniqueId);
when(displayDeviceMock.getDisplayDeviceConfig()).thenReturn(displayDeviceConfigMock); when(displayDeviceMock.getDisplayDeviceConfig()).thenReturn(displayDeviceConfigMock);
@@ -626,6 +630,19 @@ public final class DisplayPowerController2Test {
.setLightSensorEnabled(false); .setLightSensorEnabled(false);
} }
@Test
public void testStopScreenOffBrightnessSensorControllerWhenDisplayDeviceChanges() {
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);
DisplayPowerRequest dpr = new DisplayPowerRequest();
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
advanceTime(1); // Run updatePowerState
verify(mHolder.screenOffBrightnessSensorController).stop();
}
private DisplayPowerControllerHolder createDisplayPowerController(int displayId, private DisplayPowerControllerHolder createDisplayPowerController(int displayId,
String uniqueId) { String uniqueId) {
return createDisplayPowerController(displayId, uniqueId, /* isEnabled= */ true); return createDisplayPowerController(displayId, uniqueId, /* isEnabled= */ true);
@@ -662,8 +679,8 @@ public final class DisplayPowerController2Test {
mBrightnessTrackerMock, brightnessSetting, () -> {}, mBrightnessTrackerMock, brightnessSetting, () -> {},
hbmMetadata, /* bootCompleted= */ false); hbmMetadata, /* bootCompleted= */ false);
return new DisplayPowerControllerHolder(dpc, displayPowerState, brightnessSetting, animator, return new DisplayPowerControllerHolder(dpc, display, displayPowerState, brightnessSetting,
automaticBrightnessController, wakelockController, animator, automaticBrightnessController, wakelockController,
screenOffBrightnessSensorController, hbmMetadata); screenOffBrightnessSensorController, hbmMetadata);
} }
@@ -673,6 +690,7 @@ public final class DisplayPowerController2Test {
*/ */
private static class DisplayPowerControllerHolder { private static class DisplayPowerControllerHolder {
public final DisplayPowerController2 dpc; public final DisplayPowerController2 dpc;
public final LogicalDisplay display;
public final DisplayPowerState displayPowerState; public final DisplayPowerState displayPowerState;
public final BrightnessSetting brightnessSetting; public final BrightnessSetting brightnessSetting;
public final DualRampAnimator<DisplayPowerState> animator; public final DualRampAnimator<DisplayPowerState> animator;
@@ -681,7 +699,7 @@ public final class DisplayPowerController2Test {
public final ScreenOffBrightnessSensorController screenOffBrightnessSensorController; public final ScreenOffBrightnessSensorController screenOffBrightnessSensorController;
public final HighBrightnessModeMetadata hbmMetadata; public final HighBrightnessModeMetadata hbmMetadata;
DisplayPowerControllerHolder(DisplayPowerController2 dpc, DisplayPowerControllerHolder(DisplayPowerController2 dpc, LogicalDisplay display,
DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting, DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting,
DualRampAnimator<DisplayPowerState> animator, DualRampAnimator<DisplayPowerState> animator,
AutomaticBrightnessController automaticBrightnessController, AutomaticBrightnessController automaticBrightnessController,
@@ -689,6 +707,7 @@ public final class DisplayPowerController2Test {
ScreenOffBrightnessSensorController screenOffBrightnessSensorController, ScreenOffBrightnessSensorController screenOffBrightnessSensorController,
HighBrightnessModeMetadata hbmMetadata) { HighBrightnessModeMetadata hbmMetadata) {
this.dpc = dpc; this.dpc = dpc;
this.display = display;
this.displayPowerState = displayPowerState; this.displayPowerState = displayPowerState;
this.brightnessSetting = brightnessSetting; this.brightnessSetting = brightnessSetting;
this.animator = animator; this.animator = animator;

View File

@@ -64,6 +64,7 @@ import com.android.server.am.BatteryStatsService;
import com.android.server.display.RampAnimator.DualRampAnimator; import com.android.server.display.RampAnimator.DualRampAnimator;
import com.android.server.display.brightness.BrightnessEvent; import com.android.server.display.brightness.BrightnessEvent;
import com.android.server.display.color.ColorDisplayService; import com.android.server.display.color.ColorDisplayService;
import com.android.server.display.layout.Layout;
import com.android.server.display.whitebalance.DisplayWhiteBalanceController; import com.android.server.display.whitebalance.DisplayWhiteBalanceController;
import com.android.server.policy.WindowManagerPolicy; import com.android.server.policy.WindowManagerPolicy;
import com.android.server.testutils.OffsettableClock; import com.android.server.testutils.OffsettableClock;
@@ -243,12 +244,15 @@ public final class DisplayPowerControllerTest {
boolean isEnabled) { boolean isEnabled) {
DisplayInfo info = new DisplayInfo(); DisplayInfo info = new DisplayInfo();
DisplayDeviceInfo deviceInfo = new DisplayDeviceInfo(); DisplayDeviceInfo deviceInfo = new DisplayDeviceInfo();
deviceInfo.uniqueId = uniqueId;
when(logicalDisplayMock.getDisplayIdLocked()).thenReturn(displayId); when(logicalDisplayMock.getDisplayIdLocked()).thenReturn(displayId);
when(logicalDisplayMock.getPrimaryDisplayDeviceLocked()).thenReturn(displayDeviceMock); when(logicalDisplayMock.getPrimaryDisplayDeviceLocked()).thenReturn(displayDeviceMock);
when(logicalDisplayMock.getDisplayInfoLocked()).thenReturn(info); when(logicalDisplayMock.getDisplayInfoLocked()).thenReturn(info);
when(logicalDisplayMock.isEnabledLocked()).thenReturn(isEnabled); when(logicalDisplayMock.isEnabledLocked()).thenReturn(isEnabled);
when(logicalDisplayMock.isInTransitionLocked()).thenReturn(false); when(logicalDisplayMock.isInTransitionLocked()).thenReturn(false);
when(logicalDisplayMock.getBrightnessThrottlingDataIdLocked()).thenReturn(
DisplayDeviceConfig.DEFAULT_BRIGHTNESS_THROTTLING_DATA_ID);
when(displayDeviceMock.getDisplayDeviceInfoLocked()).thenReturn(deviceInfo); when(displayDeviceMock.getDisplayDeviceInfoLocked()).thenReturn(deviceInfo);
when(displayDeviceMock.getUniqueId()).thenReturn(uniqueId); when(displayDeviceMock.getUniqueId()).thenReturn(uniqueId);
when(displayDeviceMock.getDisplayDeviceConfig()).thenReturn(displayDeviceConfigMock); when(displayDeviceMock.getDisplayDeviceConfig()).thenReturn(displayDeviceConfigMock);
@@ -630,6 +634,19 @@ public final class DisplayPowerControllerTest {
.setLightSensorEnabled(false); .setLightSensorEnabled(false);
} }
@Test
public void testStopScreenOffBrightnessSensorControllerWhenDisplayDeviceChanges() {
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);
DisplayPowerRequest dpr = new DisplayPowerRequest();
mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
advanceTime(1); // Run updatePowerState
verify(mHolder.screenOffBrightnessSensorController).stop();
}
private DisplayPowerControllerHolder createDisplayPowerController(int displayId, private DisplayPowerControllerHolder createDisplayPowerController(int displayId,
String uniqueId) { String uniqueId) {
return createDisplayPowerController(displayId, uniqueId, /* isEnabled= */ true); return createDisplayPowerController(displayId, uniqueId, /* isEnabled= */ true);
@@ -665,8 +682,9 @@ public final class DisplayPowerControllerTest {
mBrightnessTrackerMock, brightnessSetting, () -> {}, mBrightnessTrackerMock, brightnessSetting, () -> {},
hbmMetadata, /* bootCompleted= */ false); hbmMetadata, /* bootCompleted= */ false);
return new DisplayPowerControllerHolder(dpc, displayPowerState, brightnessSetting, animator, return new DisplayPowerControllerHolder(dpc, display, displayPowerState, brightnessSetting,
automaticBrightnessController, screenOffBrightnessSensorController, hbmMetadata); animator, automaticBrightnessController, screenOffBrightnessSensorController,
hbmMetadata);
} }
/** /**
@@ -675,6 +693,7 @@ public final class DisplayPowerControllerTest {
*/ */
private static class DisplayPowerControllerHolder { private static class DisplayPowerControllerHolder {
public final DisplayPowerController dpc; public final DisplayPowerController dpc;
public final LogicalDisplay display;
public final DisplayPowerState displayPowerState; public final DisplayPowerState displayPowerState;
public final BrightnessSetting brightnessSetting; public final BrightnessSetting brightnessSetting;
public final DualRampAnimator<DisplayPowerState> animator; public final DualRampAnimator<DisplayPowerState> animator;
@@ -682,13 +701,14 @@ public final class DisplayPowerControllerTest {
public final ScreenOffBrightnessSensorController screenOffBrightnessSensorController; public final ScreenOffBrightnessSensorController screenOffBrightnessSensorController;
public final HighBrightnessModeMetadata hbmMetadata; public final HighBrightnessModeMetadata hbmMetadata;
DisplayPowerControllerHolder(DisplayPowerController dpc, DisplayPowerControllerHolder(DisplayPowerController dpc, LogicalDisplay display,
DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting, DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting,
DualRampAnimator<DisplayPowerState> animator, DualRampAnimator<DisplayPowerState> animator,
AutomaticBrightnessController automaticBrightnessController, AutomaticBrightnessController automaticBrightnessController,
ScreenOffBrightnessSensorController screenOffBrightnessSensorController, ScreenOffBrightnessSensorController screenOffBrightnessSensorController,
HighBrightnessModeMetadata hbmMetadata) { HighBrightnessModeMetadata hbmMetadata) {
this.dpc = dpc; this.dpc = dpc;
this.display = display;
this.displayPowerState = displayPowerState; this.displayPowerState = displayPowerState;
this.brightnessSetting = brightnessSetting; this.brightnessSetting = brightnessSetting;
this.animator = animator; this.animator = animator;