summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerService.java5
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java2
-rw-r--r--services/core/java/com/android/server/display/HighBrightnessModeController.java43
-rw-r--r--services/core/java/com/android/server/display/HighBrightnessModeMetadataMapper.java3
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java6
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java7
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java60
7 files changed, 88 insertions, 38 deletions
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 3b779ecf77e5..626502ef07b4 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -3151,11 +3151,6 @@ public final class DisplayManagerService extends SystemService {
// with the corresponding displaydevice.
HighBrightnessModeMetadata hbmMetadata =
mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
- if (hbmMetadata == null) {
- Slog.wtf(TAG, "High Brightness Mode Metadata is null in DisplayManagerService for "
- + "display: " + display.getDisplayIdLocked());
- return null;
- }
if (mConfigParameterProvider.isNewPowerControllerFeatureEnabled()) {
displayPowerController = new DisplayPowerController2(
mContext, /* injector= */ null, mDisplayPowerCallbacks, mPowerHandler,
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 46b543b9cfb9..1dfe6b2de5ab 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -450,6 +450,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private float[] mNitsRange;
private final BrightnessRangeController mBrightnessRangeController;
+
+ @Nullable
private final HighBrightnessModeMetadata mHighBrightnessModeMetadata;
private final BrightnessThrottler mBrightnessThrottler;
diff --git a/services/core/java/com/android/server/display/HighBrightnessModeController.java b/services/core/java/com/android/server/display/HighBrightnessModeController.java
index 11160a532609..c04c2793b3c5 100644
--- a/services/core/java/com/android/server/display/HighBrightnessModeController.java
+++ b/services/core/java/com/android/server/display/HighBrightnessModeController.java
@@ -16,6 +16,7 @@
package com.android.server.display;
+import android.annotation.Nullable;
import android.content.Context;
import android.database.ContentObserver;
import android.hardware.display.BrightnessInfo;
@@ -75,6 +76,8 @@ class HighBrightnessModeController {
private final Injector mInjector;
private HdrListener mHdrListener;
+
+ @Nullable
private HighBrightnessModeData mHbmData;
private HdrBrightnessDeviceConfig mHdrBrightnessCfg;
private IBinder mRegisteredDisplayToken;
@@ -107,7 +110,9 @@ class HighBrightnessModeController {
* If HBM is currently running, this is the start time and set of all events,
* for the current HBM session.
*/
- private HighBrightnessModeMetadata mHighBrightnessModeMetadata = null;
+ @Nullable
+ private HighBrightnessModeMetadata mHighBrightnessModeMetadata;
+
HighBrightnessModeController(Handler handler, int width, int height, IBinder displayToken,
String displayUniqueId, float brightnessMin, float brightnessMax,
HighBrightnessModeData hbmData, HdrBrightnessDeviceConfig hdrBrightnessCfg,
@@ -310,23 +315,29 @@ class HighBrightnessModeController {
pw.println(" mBrightnessMax=" + mBrightnessMax);
pw.println(" remainingTime=" + calculateRemainingTime(mClock.uptimeMillis()));
pw.println(" mIsTimeAvailable= " + mIsTimeAvailable);
- pw.println(" mRunningStartTimeMillis="
- + TimeUtils.formatUptime(mHighBrightnessModeMetadata.getRunningStartTimeMillis()));
pw.println(" mIsBlockedByLowPowerMode=" + mIsBlockedByLowPowerMode);
pw.println(" width*height=" + mWidth + "*" + mHeight);
- pw.println(" mEvents=");
- final long currentTime = mClock.uptimeMillis();
- long lastStartTime = currentTime;
- long runningStartTimeMillis = mHighBrightnessModeMetadata.getRunningStartTimeMillis();
- if (runningStartTimeMillis != -1) {
- lastStartTime = dumpHbmEvent(pw, new HbmEvent(runningStartTimeMillis, currentTime));
- }
- for (HbmEvent event : mHighBrightnessModeMetadata.getHbmEventQueue()) {
- if (lastStartTime > event.getEndTimeMillis()) {
- pw.println(" event: [normal brightness]: "
- + TimeUtils.formatDuration(lastStartTime - event.getEndTimeMillis()));
+
+ if (mHighBrightnessModeMetadata != null) {
+ pw.println(" mRunningStartTimeMillis="
+ + TimeUtils.formatUptime(
+ mHighBrightnessModeMetadata.getRunningStartTimeMillis()));
+ pw.println(" mEvents=");
+ final long currentTime = mClock.uptimeMillis();
+ long lastStartTime = currentTime;
+ long runningStartTimeMillis = mHighBrightnessModeMetadata.getRunningStartTimeMillis();
+ if (runningStartTimeMillis != -1) {
+ lastStartTime = dumpHbmEvent(pw, new HbmEvent(runningStartTimeMillis, currentTime));
}
- lastStartTime = dumpHbmEvent(pw, event);
+ for (HbmEvent event : mHighBrightnessModeMetadata.getHbmEventQueue()) {
+ if (lastStartTime > event.getEndTimeMillis()) {
+ pw.println(" event: [normal brightness]: "
+ + TimeUtils.formatDuration(lastStartTime - event.getEndTimeMillis()));
+ }
+ lastStartTime = dumpHbmEvent(pw, event);
+ }
+ } else {
+ pw.println(" mHighBrightnessModeMetadata=null");
}
}
@@ -353,7 +364,7 @@ class HighBrightnessModeController {
}
private boolean deviceSupportsHbm() {
- return mHbmData != null;
+ return mHbmData != null && mHighBrightnessModeMetadata != null;
}
private long calculateRemainingTime(long currentTime) {
diff --git a/services/core/java/com/android/server/display/HighBrightnessModeMetadataMapper.java b/services/core/java/com/android/server/display/HighBrightnessModeMetadataMapper.java
index 76702d3f6f8c..9e6f0eb93831 100644
--- a/services/core/java/com/android/server/display/HighBrightnessModeMetadataMapper.java
+++ b/services/core/java/com/android/server/display/HighBrightnessModeMetadataMapper.java
@@ -41,6 +41,9 @@ class HighBrightnessModeMetadataMapper {
+ display.getDisplayIdLocked());
return null;
}
+ if (device.getDisplayDeviceConfig().getHighBrightnessModeData() == null) {
+ return null;
+ }
final String uniqueId = device.getUniqueId();
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java
index d54eca2ada9b..ad8c5e56b9b4 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java
@@ -50,6 +50,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.PowerManager;
import android.os.SystemProperties;
+import android.os.UserHandle;
import android.os.test.TestLooper;
import android.provider.Settings;
import android.testing.TestableContext;
@@ -144,11 +145,12 @@ public final class DisplayPowerController2Test {
mTestLooper = new TestLooper(mClock::now);
mHandler = new Handler(mTestLooper.getLooper());
- // Put the system into manual brightness by default, just to minimize unexpected events and
- // have a consistent starting state
+ // Set some settings to minimize unexpected events and have a consistent starting state
Settings.System.putInt(mContext.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
+ Settings.System.putFloatForUser(mContext.getContentResolver(),
+ Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0, UserHandle.USER_CURRENT);
addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock);
addLocalServiceMock(ColorDisplayService.ColorDisplayServiceInternal.class,
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
index 5de187641ef5..8ddf7b66e816 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
@@ -50,6 +50,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.PowerManager;
import android.os.SystemProperties;
+import android.os.UserHandle;
import android.os.test.TestLooper;
import android.provider.Settings;
import android.testing.TestableContext;
@@ -144,12 +145,12 @@ public final class DisplayPowerControllerTest {
mTestLooper = new TestLooper(mClock::now);
mHandler = new Handler(mTestLooper.getLooper());
- // Put the system into manual brightness by default, just to minimize unexpected events and
- // have a consistent starting state
+ // Set some settings to minimize unexpected events and have a consistent starting state
Settings.System.putInt(mContext.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
-
+ Settings.System.putFloatForUser(mContext.getContentResolver(),
+ Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0, UserHandle.USER_CURRENT);
addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock);
addLocalServiceMock(ColorDisplayService.ColorDisplayServiceInternal.class,
diff --git a/services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java b/services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java
index d9fbba5b4274..7e7ccf733876 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java
@@ -17,35 +17,69 @@
package com.android.server.display;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
public class HighBrightnessModeMetadataMapperTest {
+ @Mock
+ private LogicalDisplay mDisplayMock;
+
+ @Mock
+ private DisplayDevice mDeviceMock;
+
+ @Mock
+ private DisplayDeviceConfig mDdcMock;
+
+ @Mock
+ private DisplayDeviceConfig.HighBrightnessModeData mHbmDataMock;
+
private HighBrightnessModeMetadataMapper mHighBrightnessModeMetadataMapper;
@Before
public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ when(mDisplayMock.getPrimaryDisplayDeviceLocked()).thenReturn(mDeviceMock);
+ when(mDeviceMock.getDisplayDeviceConfig()).thenReturn(mDdcMock);
+ when(mDdcMock.getHighBrightnessModeData()).thenReturn(mHbmDataMock);
mHighBrightnessModeMetadataMapper = new HighBrightnessModeMetadataMapper();
}
@Test
- public void testGetHighBrightnessModeMetadata() {
- // Display device is null
- final LogicalDisplay display = mock(LogicalDisplay.class);
- when(display.getPrimaryDisplayDeviceLocked()).thenReturn(null);
- assertNull(mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display));
-
- // No HBM metadata stored for this display yet
- final DisplayDevice device = mock(DisplayDevice.class);
- when(display.getPrimaryDisplayDeviceLocked()).thenReturn(device);
+ public void testGetHighBrightnessModeMetadata_NoDisplayDevice() {
+ when(mDisplayMock.getPrimaryDisplayDeviceLocked()).thenReturn(null);
+ assertNull(mHighBrightnessModeMetadataMapper
+ .getHighBrightnessModeMetadataLocked(mDisplayMock));
+ }
+
+ @Test
+ public void testGetHighBrightnessModeMetadata_NoHBMData() {
+ when(mDdcMock.getHighBrightnessModeData()).thenReturn(null);
+ assertNull(mHighBrightnessModeMetadataMapper
+ .getHighBrightnessModeMetadataLocked(mDisplayMock));
+ }
+
+ @Test
+ public void testGetHighBrightnessModeMetadata_NewDisplay() {
HighBrightnessModeMetadata hbmMetadata =
- mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
+ mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(mDisplayMock);
+ assertNotNull(hbmMetadata);
+ assertTrue(hbmMetadata.getHbmEventQueue().isEmpty());
+ assertTrue(hbmMetadata.getRunningStartTimeMillis() < 0);
+ }
+
+ @Test
+ public void testGetHighBrightnessModeMetadata_Modify() {
+ HighBrightnessModeMetadata hbmMetadata =
+ mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(mDisplayMock);
+ assertNotNull(hbmMetadata);
assertTrue(hbmMetadata.getHbmEventQueue().isEmpty());
assertTrue(hbmMetadata.getRunningStartTimeMillis() < 0);
@@ -55,8 +89,10 @@ public class HighBrightnessModeMetadataMapperTest {
long setTime = 300;
hbmMetadata.addHbmEvent(new HbmEvent(startTimeMillis, endTimeMillis));
hbmMetadata.setRunningStartTimeMillis(setTime);
+
hbmMetadata =
- mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
+ mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(mDisplayMock);
+
assertEquals(1, hbmMetadata.getHbmEventQueue().size());
assertEquals(startTimeMillis,
hbmMetadata.getHbmEventQueue().getFirst().getStartTimeMillis());