Loading services/core/java/com/android/server/display/DisplayManagerService.java +5 −8 Original line number Diff line number Diff line Loading @@ -258,7 +258,7 @@ public final class DisplayManagerService extends SystemService { mDisplayWindowPolicyControllers = new SparseArray<>(); /** * Map of every internal primary display device {@link HighBrightnessModeMetadata}s indexed by * Map of every display device {@link HighBrightnessModeMetadata}s indexed by * {@link DisplayDevice#mUniqueId}. */ public final ArrayMap<String, HighBrightnessModeMetadata> mHighBrightnessModeMetadataMap = Loading Loading @@ -1525,6 +1525,7 @@ public final class DisplayManagerService extends SystemService { final int displayId = display.getDisplayIdLocked(); final boolean isDefault = displayId == Display.DEFAULT_DISPLAY; configureColorModeLocked(display, device); if (!mAreUserDisabledHdrTypesAllowed) { display.setUserDisabledHdrTypes(mUserDisabledHdrTypes); } Loading Loading @@ -2636,7 +2637,8 @@ public final class DisplayManagerService extends SystemService { mLogicalDisplayMapper.forEachLocked(this::addDisplayPowerControllerLocked); } private HighBrightnessModeMetadata getHighBrightnessModeMetadata(LogicalDisplay display) { @VisibleForTesting HighBrightnessModeMetadata getHighBrightnessModeMetadata(LogicalDisplay display) { final DisplayDevice device = display.getPrimaryDisplayDeviceLocked(); if (device == null) { Slog.wtf(TAG, "Display Device is null in DisplayPowerController for display: " Loading @@ -2644,11 +2646,6 @@ public final class DisplayManagerService extends SystemService { return null; } // HBM brightness mode is only applicable to internal physical displays. if (display.getDisplayInfoLocked().type != Display.TYPE_INTERNAL) { return null; } final String uniqueId = device.getUniqueId(); if (mHighBrightnessModeMetadataMap.containsKey(uniqueId)) { Loading @@ -2673,7 +2670,7 @@ public final class DisplayManagerService extends SystemService { final BrightnessSetting brightnessSetting = new BrightnessSetting(mPersistentDataStore, display, mSyncRoot); // If display is internal and has a HighBrightnessModeMetadata mapping, use that. // If display already has a HighBrightnessModeMetadata mapping, use that. // Or create a new one and use that. // We also need to pass a mapping of the HighBrightnessModeTimeInfoMap to // displayPowerController, so the hbm info can be correctly associated Loading services/core/java/com/android/server/display/HighBrightnessModeMetadata.java +2 −3 Original line number Diff line number Diff line Loading @@ -21,10 +21,9 @@ import java.util.ArrayDeque; /** * Represents High Brightness Mode metadata associated * with a specific internal physical display. * with a specific display. * Required for separately storing data like time information, * and related events when display was in HBM mode per * physical internal display. * and related events when display was in HBM mode per display. */ class HighBrightnessModeMetadata { /** Loading services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java +36 −0 Original line number Diff line number Diff line Loading @@ -423,6 +423,37 @@ public class DisplayManagerServiceTest { assertTrue(callback.mDisplayChangedCalled); } /** * Tests that HighBrightnessModeMetadata is non-null on all display devices. */ @Test public void testHighBrightnessModeMetadataNonNull() throws Exception { DisplayManagerService displayManager = new DisplayManagerService(mContext, mShortMockedInjector); registerDefaultDisplays(displayManager); displayManager.onBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY); // Add the FakeDisplayDevice FakeDisplayDevice displayDevice = new FakeDisplayDevice("unique_hbm_device"); DisplayDeviceInfo displayDeviceInfo = new DisplayDeviceInfo(); displayDevice.setDisplayDeviceInfo(displayDeviceInfo); LogicalDisplay logicalDisplay = new LogicalDisplay(1, 1, displayDevice); HighBrightnessModeMetadata hbmMeta = displayManager.getHighBrightnessModeMetadata(logicalDisplay); assertNotNull(hbmMeta); // Check is Hbm metadata is correctly added for the display device. String uniqueId = displayDevice.getUniqueId(); assertTrue(uniqueId.equals("unique_hbm_device")); assertTrue(displayManager.mHighBrightnessModeMetadataMap.containsKey(uniqueId)); HighBrightnessModeMetadata hbmMetaFromMap = displayManager.mHighBrightnessModeMetadataMap.get(uniqueId); assertEquals(hbmMeta, hbmMetaFromMap); } /** * Tests that we get a Runtime exception when we cannot initialize the default display. */ Loading Loading @@ -1349,6 +1380,11 @@ public class DisplayManagerServiceTest { super(null, null, "", mContext); } FakeDisplayDevice(String uniqueDeviceId) { super(null, null, uniqueDeviceId, mContext); } public void setDisplayDeviceInfo(DisplayDeviceInfo displayDeviceInfo) { mDisplayDeviceInfo = displayDeviceInfo; } Loading Loading
services/core/java/com/android/server/display/DisplayManagerService.java +5 −8 Original line number Diff line number Diff line Loading @@ -258,7 +258,7 @@ public final class DisplayManagerService extends SystemService { mDisplayWindowPolicyControllers = new SparseArray<>(); /** * Map of every internal primary display device {@link HighBrightnessModeMetadata}s indexed by * Map of every display device {@link HighBrightnessModeMetadata}s indexed by * {@link DisplayDevice#mUniqueId}. */ public final ArrayMap<String, HighBrightnessModeMetadata> mHighBrightnessModeMetadataMap = Loading Loading @@ -1525,6 +1525,7 @@ public final class DisplayManagerService extends SystemService { final int displayId = display.getDisplayIdLocked(); final boolean isDefault = displayId == Display.DEFAULT_DISPLAY; configureColorModeLocked(display, device); if (!mAreUserDisabledHdrTypesAllowed) { display.setUserDisabledHdrTypes(mUserDisabledHdrTypes); } Loading Loading @@ -2636,7 +2637,8 @@ public final class DisplayManagerService extends SystemService { mLogicalDisplayMapper.forEachLocked(this::addDisplayPowerControllerLocked); } private HighBrightnessModeMetadata getHighBrightnessModeMetadata(LogicalDisplay display) { @VisibleForTesting HighBrightnessModeMetadata getHighBrightnessModeMetadata(LogicalDisplay display) { final DisplayDevice device = display.getPrimaryDisplayDeviceLocked(); if (device == null) { Slog.wtf(TAG, "Display Device is null in DisplayPowerController for display: " Loading @@ -2644,11 +2646,6 @@ public final class DisplayManagerService extends SystemService { return null; } // HBM brightness mode is only applicable to internal physical displays. if (display.getDisplayInfoLocked().type != Display.TYPE_INTERNAL) { return null; } final String uniqueId = device.getUniqueId(); if (mHighBrightnessModeMetadataMap.containsKey(uniqueId)) { Loading @@ -2673,7 +2670,7 @@ public final class DisplayManagerService extends SystemService { final BrightnessSetting brightnessSetting = new BrightnessSetting(mPersistentDataStore, display, mSyncRoot); // If display is internal and has a HighBrightnessModeMetadata mapping, use that. // If display already has a HighBrightnessModeMetadata mapping, use that. // Or create a new one and use that. // We also need to pass a mapping of the HighBrightnessModeTimeInfoMap to // displayPowerController, so the hbm info can be correctly associated Loading
services/core/java/com/android/server/display/HighBrightnessModeMetadata.java +2 −3 Original line number Diff line number Diff line Loading @@ -21,10 +21,9 @@ import java.util.ArrayDeque; /** * Represents High Brightness Mode metadata associated * with a specific internal physical display. * with a specific display. * Required for separately storing data like time information, * and related events when display was in HBM mode per * physical internal display. * and related events when display was in HBM mode per display. */ class HighBrightnessModeMetadata { /** Loading
services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java +36 −0 Original line number Diff line number Diff line Loading @@ -423,6 +423,37 @@ public class DisplayManagerServiceTest { assertTrue(callback.mDisplayChangedCalled); } /** * Tests that HighBrightnessModeMetadata is non-null on all display devices. */ @Test public void testHighBrightnessModeMetadataNonNull() throws Exception { DisplayManagerService displayManager = new DisplayManagerService(mContext, mShortMockedInjector); registerDefaultDisplays(displayManager); displayManager.onBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY); // Add the FakeDisplayDevice FakeDisplayDevice displayDevice = new FakeDisplayDevice("unique_hbm_device"); DisplayDeviceInfo displayDeviceInfo = new DisplayDeviceInfo(); displayDevice.setDisplayDeviceInfo(displayDeviceInfo); LogicalDisplay logicalDisplay = new LogicalDisplay(1, 1, displayDevice); HighBrightnessModeMetadata hbmMeta = displayManager.getHighBrightnessModeMetadata(logicalDisplay); assertNotNull(hbmMeta); // Check is Hbm metadata is correctly added for the display device. String uniqueId = displayDevice.getUniqueId(); assertTrue(uniqueId.equals("unique_hbm_device")); assertTrue(displayManager.mHighBrightnessModeMetadataMap.containsKey(uniqueId)); HighBrightnessModeMetadata hbmMetaFromMap = displayManager.mHighBrightnessModeMetadataMap.get(uniqueId); assertEquals(hbmMeta, hbmMetaFromMap); } /** * Tests that we get a Runtime exception when we cannot initialize the default display. */ Loading Loading @@ -1349,6 +1380,11 @@ public class DisplayManagerServiceTest { super(null, null, "", mContext); } FakeDisplayDevice(String uniqueDeviceId) { super(null, null, uniqueDeviceId, mContext); } public void setDisplayDeviceInfo(DisplayDeviceInfo displayDeviceInfo) { mDisplayDeviceInfo = displayDeviceInfo; } Loading