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

View File

@@ -729,7 +729,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
final String brightnessThrottlingDataId =
mLogicalDisplay.getBrightnessThrottlingDataIdLocked();
mHandler.post(() -> {
mHandler.postAtTime(() -> {
boolean changed = false;
if (mDisplayDevice != device) {
changed = true;
@@ -761,7 +761,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
if (changed) {
updatePowerState();
}
});
}, mClock.uptimeMillis());
}
/**
@@ -1028,6 +1028,10 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
mBrightnessEventRingBuffer =
new RingBuffer<>(BrightnessEvent.class, RINGBUFFER_MAX);
if (mScreenOffBrightnessSensorController != null) {
mScreenOffBrightnessSensorController.stop();
mScreenOffBrightnessSensorController = null;
}
loadScreenOffBrightnessSensor();
int[] sensorValueToLux = mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux();
if (mScreenOffBrightnessSensor != null && sensorValueToLux != null) {
@@ -1133,6 +1137,10 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
mPowerState.stop();
mPowerState = null;
}
if (mScreenOffBrightnessSensorController != null) {
mScreenOffBrightnessSensorController.stop();
}
}
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.brightness.BrightnessEvent;
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.policy.WindowManagerPolicy;
import com.android.server.testutils.OffsettableClock;
@@ -240,12 +241,15 @@ public final class DisplayPowerController2Test {
boolean isEnabled) {
DisplayInfo info = new DisplayInfo();
DisplayDeviceInfo deviceInfo = new DisplayDeviceInfo();
deviceInfo.uniqueId = uniqueId;
when(logicalDisplayMock.getDisplayIdLocked()).thenReturn(displayId);
when(logicalDisplayMock.getPrimaryDisplayDeviceLocked()).thenReturn(displayDeviceMock);
when(logicalDisplayMock.getDisplayInfoLocked()).thenReturn(info);
when(logicalDisplayMock.isEnabledLocked()).thenReturn(isEnabled);
when(logicalDisplayMock.isInTransitionLocked()).thenReturn(false);
when(logicalDisplayMock.getBrightnessThrottlingDataIdLocked()).thenReturn(
DisplayDeviceConfig.DEFAULT_BRIGHTNESS_THROTTLING_DATA_ID);
when(displayDeviceMock.getDisplayDeviceInfoLocked()).thenReturn(deviceInfo);
when(displayDeviceMock.getUniqueId()).thenReturn(uniqueId);
when(displayDeviceMock.getDisplayDeviceConfig()).thenReturn(displayDeviceConfigMock);
@@ -626,6 +630,19 @@ public final class DisplayPowerController2Test {
.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,
String uniqueId) {
return createDisplayPowerController(displayId, uniqueId, /* isEnabled= */ true);
@@ -662,8 +679,8 @@ public final class DisplayPowerController2Test {
mBrightnessTrackerMock, brightnessSetting, () -> {},
hbmMetadata, /* bootCompleted= */ false);
return new DisplayPowerControllerHolder(dpc, displayPowerState, brightnessSetting, animator,
automaticBrightnessController, wakelockController,
return new DisplayPowerControllerHolder(dpc, display, displayPowerState, brightnessSetting,
animator, automaticBrightnessController, wakelockController,
screenOffBrightnessSensorController, hbmMetadata);
}
@@ -673,6 +690,7 @@ public final class DisplayPowerController2Test {
*/
private static class DisplayPowerControllerHolder {
public final DisplayPowerController2 dpc;
public final LogicalDisplay display;
public final DisplayPowerState displayPowerState;
public final BrightnessSetting brightnessSetting;
public final DualRampAnimator<DisplayPowerState> animator;
@@ -681,7 +699,7 @@ public final class DisplayPowerController2Test {
public final ScreenOffBrightnessSensorController screenOffBrightnessSensorController;
public final HighBrightnessModeMetadata hbmMetadata;
DisplayPowerControllerHolder(DisplayPowerController2 dpc,
DisplayPowerControllerHolder(DisplayPowerController2 dpc, LogicalDisplay display,
DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting,
DualRampAnimator<DisplayPowerState> animator,
AutomaticBrightnessController automaticBrightnessController,
@@ -689,6 +707,7 @@ public final class DisplayPowerController2Test {
ScreenOffBrightnessSensorController screenOffBrightnessSensorController,
HighBrightnessModeMetadata hbmMetadata) {
this.dpc = dpc;
this.display = display;
this.displayPowerState = displayPowerState;
this.brightnessSetting = brightnessSetting;
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.brightness.BrightnessEvent;
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.policy.WindowManagerPolicy;
import com.android.server.testutils.OffsettableClock;
@@ -243,12 +244,15 @@ public final class DisplayPowerControllerTest {
boolean isEnabled) {
DisplayInfo info = new DisplayInfo();
DisplayDeviceInfo deviceInfo = new DisplayDeviceInfo();
deviceInfo.uniqueId = uniqueId;
when(logicalDisplayMock.getDisplayIdLocked()).thenReturn(displayId);
when(logicalDisplayMock.getPrimaryDisplayDeviceLocked()).thenReturn(displayDeviceMock);
when(logicalDisplayMock.getDisplayInfoLocked()).thenReturn(info);
when(logicalDisplayMock.isEnabledLocked()).thenReturn(isEnabled);
when(logicalDisplayMock.isInTransitionLocked()).thenReturn(false);
when(logicalDisplayMock.getBrightnessThrottlingDataIdLocked()).thenReturn(
DisplayDeviceConfig.DEFAULT_BRIGHTNESS_THROTTLING_DATA_ID);
when(displayDeviceMock.getDisplayDeviceInfoLocked()).thenReturn(deviceInfo);
when(displayDeviceMock.getUniqueId()).thenReturn(uniqueId);
when(displayDeviceMock.getDisplayDeviceConfig()).thenReturn(displayDeviceConfigMock);
@@ -630,6 +634,19 @@ public final class DisplayPowerControllerTest {
.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,
String uniqueId) {
return createDisplayPowerController(displayId, uniqueId, /* isEnabled= */ true);
@@ -665,8 +682,9 @@ public final class DisplayPowerControllerTest {
mBrightnessTrackerMock, brightnessSetting, () -> {},
hbmMetadata, /* bootCompleted= */ false);
return new DisplayPowerControllerHolder(dpc, displayPowerState, brightnessSetting, animator,
automaticBrightnessController, screenOffBrightnessSensorController, hbmMetadata);
return new DisplayPowerControllerHolder(dpc, display, displayPowerState, brightnessSetting,
animator, automaticBrightnessController, screenOffBrightnessSensorController,
hbmMetadata);
}
/**
@@ -675,6 +693,7 @@ public final class DisplayPowerControllerTest {
*/
private static class DisplayPowerControllerHolder {
public final DisplayPowerController dpc;
public final LogicalDisplay display;
public final DisplayPowerState displayPowerState;
public final BrightnessSetting brightnessSetting;
public final DualRampAnimator<DisplayPowerState> animator;
@@ -682,13 +701,14 @@ public final class DisplayPowerControllerTest {
public final ScreenOffBrightnessSensorController screenOffBrightnessSensorController;
public final HighBrightnessModeMetadata hbmMetadata;
DisplayPowerControllerHolder(DisplayPowerController dpc,
DisplayPowerControllerHolder(DisplayPowerController dpc, LogicalDisplay display,
DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting,
DualRampAnimator<DisplayPowerState> animator,
AutomaticBrightnessController automaticBrightnessController,
ScreenOffBrightnessSensorController screenOffBrightnessSensorController,
HighBrightnessModeMetadata hbmMetadata) {
this.dpc = dpc;
this.display = display;
this.displayPowerState = displayPowerState;
this.brightnessSetting = brightnessSetting;
this.animator = animator;