Loading core/java/android/view/Display.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -1514,6 +1514,7 @@ public final class Display { public HdrCapabilities(int[] supportedHdrTypes, float maxLuminance, public HdrCapabilities(int[] supportedHdrTypes, float maxLuminance, float maxAverageLuminance, float minLuminance) { float maxAverageLuminance, float minLuminance) { mSupportedHdrTypes = supportedHdrTypes; mSupportedHdrTypes = supportedHdrTypes; Arrays.sort(mSupportedHdrTypes); mMaxLuminance = maxLuminance; mMaxLuminance = maxLuminance; mMaxAverageLuminance = maxAverageLuminance; mMaxAverageLuminance = maxAverageLuminance; mMinLuminance = minLuminance; mMinLuminance = minLuminance; Loading services/core/java/com/android/server/display/LocalDisplayAdapter.java +33 −19 Original line number Original line Diff line number Diff line Loading @@ -49,6 +49,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Arrays; import java.util.Collections; import java.util.Collections; import java.util.List; import java.util.List; import java.util.Objects; /** /** * A display adapter for the local displays managed by Surface Flinger. * A display adapter for the local displays managed by Surface Flinger. Loading Loading @@ -118,23 +119,29 @@ final class LocalDisplayAdapter extends DisplayAdapter { physicalDisplayId); physicalDisplayId); activeColorMode = Display.COLOR_MODE_INVALID; activeColorMode = Display.COLOR_MODE_INVALID; } } int[] colorModes = SurfaceControl.getDisplayColorModes(displayToken); SurfaceControl.DesiredDisplayConfigSpecs configSpecs = SurfaceControl.DesiredDisplayConfigSpecs configSpecs = SurfaceControl.getDesiredDisplayConfigSpecs(displayToken); SurfaceControl.getDesiredDisplayConfigSpecs(displayToken); int[] colorModes = SurfaceControl.getDisplayColorModes(displayToken); Display.HdrCapabilities hdrCapabilities = SurfaceControl.getHdrCapabilities(displayToken); LocalDisplayDevice device = mDevices.get(physicalDisplayId); LocalDisplayDevice device = mDevices.get(physicalDisplayId); if (device == null) { if (device == null) { // Display was added. // Display was added. final boolean isInternal = mDevices.size() == 0; final boolean isInternal = mDevices.size() == 0; device = new LocalDisplayDevice(displayToken, physicalDisplayId, info, device = new LocalDisplayDevice(displayToken, physicalDisplayId, info, configs, activeConfig, configSpecs, colorModes, activeColorMode, configs, activeConfig, configSpecs, colorModes, activeColorMode, isInternal); hdrCapabilities, isInternal); mDevices.put(physicalDisplayId, device); mDevices.put(physicalDisplayId, device); sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_ADDED); sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_ADDED); } else if (device.updateDisplayConfigsLocked(configs, activeConfig, configSpecs, } else { colorModes, activeColorMode)) { boolean changed = device.updateDisplayConfigsLocked(configs, activeConfig, // Display properties changed. configSpecs); changed |= device.updateColorModesLocked(colorModes, activeColorMode); changed |= device.updateHdrCapabilitiesLocked(hdrCapabilities); if (changed) { sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_CHANGED); sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_CHANGED); } } } } else { } else { // The display is no longer available. Ignore the attempt to add it. // The display is no longer available. Ignore the attempt to add it. // If it was connected but has already been disconnected, we'll get a // If it was connected but has already been disconnected, we'll get a Loading Loading @@ -202,16 +209,16 @@ final class LocalDisplayAdapter extends DisplayAdapter { LocalDisplayDevice(IBinder displayToken, long physicalDisplayId, LocalDisplayDevice(IBinder displayToken, long physicalDisplayId, SurfaceControl.DisplayInfo info, SurfaceControl.DisplayConfig[] configs, SurfaceControl.DisplayInfo info, SurfaceControl.DisplayConfig[] configs, int activeConfigId, SurfaceControl.DesiredDisplayConfigSpecs configSpecs, int activeConfigId, SurfaceControl.DesiredDisplayConfigSpecs configSpecs, int[] colorModes, int activeColorMode, boolean isInternal) { int[] colorModes, int activeColorMode, Display.HdrCapabilities hdrCapabilities, boolean isInternal) { super(LocalDisplayAdapter.this, displayToken, UNIQUE_ID_PREFIX + physicalDisplayId); super(LocalDisplayAdapter.this, displayToken, UNIQUE_ID_PREFIX + physicalDisplayId); mPhysicalDisplayId = physicalDisplayId; mPhysicalDisplayId = physicalDisplayId; mIsInternal = isInternal; mIsInternal = isInternal; mDisplayInfo = info; mDisplayInfo = info; updateDisplayConfigsLocked(configs, activeConfigId, configSpecs, colorModes, updateDisplayConfigsLocked(configs, activeConfigId, configSpecs); activeColorMode); updateColorModesLocked(colorModes, activeColorMode); updateColorModesLocked(colorModes, activeColorMode); updateHdrCapabilitiesLocked(hdrCapabilities); mSidekickInternal = LocalServices.getService(SidekickInternal.class); mSidekickInternal = LocalServices.getService(SidekickInternal.class); if (mIsInternal) { if (mIsInternal) { LightsManager lights = LocalServices.getService(LightsManager.class); LightsManager lights = LocalServices.getService(LightsManager.class); Loading @@ -219,7 +226,6 @@ final class LocalDisplayAdapter extends DisplayAdapter { } else { } else { mBacklight = null; mBacklight = null; } } mHdrCapabilities = SurfaceControl.getHdrCapabilities(displayToken); mAllmSupported = SurfaceControl.getAutoLowLatencyModeSupport(displayToken); mAllmSupported = SurfaceControl.getAutoLowLatencyModeSupport(displayToken); mGameContentTypeSupported = SurfaceControl.getGameContentTypeSupport(displayToken); mGameContentTypeSupported = SurfaceControl.getGameContentTypeSupport(displayToken); mHalBrightnessSupport = SurfaceControl.getDisplayBrightnessSupport(displayToken); mHalBrightnessSupport = SurfaceControl.getDisplayBrightnessSupport(displayToken); Loading @@ -236,11 +242,9 @@ final class LocalDisplayAdapter extends DisplayAdapter { public boolean updateDisplayConfigsLocked( public boolean updateDisplayConfigsLocked( SurfaceControl.DisplayConfig[] configs, int activeConfigId, SurfaceControl.DisplayConfig[] configs, int activeConfigId, SurfaceControl.DesiredDisplayConfigSpecs configSpecs, int[] colorModes, SurfaceControl.DesiredDisplayConfigSpecs configSpecs) { int activeColorMode) { mDisplayConfigs = Arrays.copyOf(configs, configs.length); mDisplayConfigs = Arrays.copyOf(configs, configs.length); mActiveConfigId = activeConfigId; mActiveConfigId = activeConfigId; // Build an updated list of all existing modes. // Build an updated list of all existing modes. ArrayList<DisplayModeRecord> records = new ArrayList<DisplayModeRecord>(); ArrayList<DisplayModeRecord> records = new ArrayList<DisplayModeRecord>(); boolean modesAdded = false; boolean modesAdded = false; Loading Loading @@ -389,11 +393,12 @@ final class LocalDisplayAdapter extends DisplayAdapter { mSystemBrightnessToNits = sysToNits; mSystemBrightnessToNits = sysToNits; } } private boolean updateColorModesLocked(int[] colorModes, private boolean updateColorModesLocked(int[] colorModes, int activeColorMode) { int activeColorMode) { if (colorModes == null) { List<Integer> pendingColorModes = new ArrayList<>(); return false; } if (colorModes == null) return false; List<Integer> pendingColorModes = new ArrayList<>(); // Build an updated list of all existing color modes. // Build an updated list of all existing color modes. boolean colorModesAdded = false; boolean colorModesAdded = false; for (int colorMode : colorModes) { for (int colorMode : colorModes) { Loading Loading @@ -441,6 +446,15 @@ final class LocalDisplayAdapter extends DisplayAdapter { return true; return true; } } private boolean updateHdrCapabilitiesLocked(Display.HdrCapabilities newHdrCapabilities) { // If the HDR capabilities haven't changed, then we're done here. if (Objects.equals(mHdrCapabilities, newHdrCapabilities)) { return false; } mHdrCapabilities = newHdrCapabilities; return true; } private DisplayModeRecord findDisplayModeRecord(SurfaceControl.DisplayConfig config) { private DisplayModeRecord findDisplayModeRecord(SurfaceControl.DisplayConfig config) { for (int i = 0; i < mSupportedModes.size(); i++) { for (int i = 0; i < mSupportedModes.size(); i++) { DisplayModeRecord record = mSupportedModes.valueAt(i); DisplayModeRecord record = mSupportedModes.valueAt(i); Loading Loading
core/java/android/view/Display.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -1514,6 +1514,7 @@ public final class Display { public HdrCapabilities(int[] supportedHdrTypes, float maxLuminance, public HdrCapabilities(int[] supportedHdrTypes, float maxLuminance, float maxAverageLuminance, float minLuminance) { float maxAverageLuminance, float minLuminance) { mSupportedHdrTypes = supportedHdrTypes; mSupportedHdrTypes = supportedHdrTypes; Arrays.sort(mSupportedHdrTypes); mMaxLuminance = maxLuminance; mMaxLuminance = maxLuminance; mMaxAverageLuminance = maxAverageLuminance; mMaxAverageLuminance = maxAverageLuminance; mMinLuminance = minLuminance; mMinLuminance = minLuminance; Loading
services/core/java/com/android/server/display/LocalDisplayAdapter.java +33 −19 Original line number Original line Diff line number Diff line Loading @@ -49,6 +49,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Arrays; import java.util.Collections; import java.util.Collections; import java.util.List; import java.util.List; import java.util.Objects; /** /** * A display adapter for the local displays managed by Surface Flinger. * A display adapter for the local displays managed by Surface Flinger. Loading Loading @@ -118,23 +119,29 @@ final class LocalDisplayAdapter extends DisplayAdapter { physicalDisplayId); physicalDisplayId); activeColorMode = Display.COLOR_MODE_INVALID; activeColorMode = Display.COLOR_MODE_INVALID; } } int[] colorModes = SurfaceControl.getDisplayColorModes(displayToken); SurfaceControl.DesiredDisplayConfigSpecs configSpecs = SurfaceControl.DesiredDisplayConfigSpecs configSpecs = SurfaceControl.getDesiredDisplayConfigSpecs(displayToken); SurfaceControl.getDesiredDisplayConfigSpecs(displayToken); int[] colorModes = SurfaceControl.getDisplayColorModes(displayToken); Display.HdrCapabilities hdrCapabilities = SurfaceControl.getHdrCapabilities(displayToken); LocalDisplayDevice device = mDevices.get(physicalDisplayId); LocalDisplayDevice device = mDevices.get(physicalDisplayId); if (device == null) { if (device == null) { // Display was added. // Display was added. final boolean isInternal = mDevices.size() == 0; final boolean isInternal = mDevices.size() == 0; device = new LocalDisplayDevice(displayToken, physicalDisplayId, info, device = new LocalDisplayDevice(displayToken, physicalDisplayId, info, configs, activeConfig, configSpecs, colorModes, activeColorMode, configs, activeConfig, configSpecs, colorModes, activeColorMode, isInternal); hdrCapabilities, isInternal); mDevices.put(physicalDisplayId, device); mDevices.put(physicalDisplayId, device); sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_ADDED); sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_ADDED); } else if (device.updateDisplayConfigsLocked(configs, activeConfig, configSpecs, } else { colorModes, activeColorMode)) { boolean changed = device.updateDisplayConfigsLocked(configs, activeConfig, // Display properties changed. configSpecs); changed |= device.updateColorModesLocked(colorModes, activeColorMode); changed |= device.updateHdrCapabilitiesLocked(hdrCapabilities); if (changed) { sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_CHANGED); sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_CHANGED); } } } } else { } else { // The display is no longer available. Ignore the attempt to add it. // The display is no longer available. Ignore the attempt to add it. // If it was connected but has already been disconnected, we'll get a // If it was connected but has already been disconnected, we'll get a Loading Loading @@ -202,16 +209,16 @@ final class LocalDisplayAdapter extends DisplayAdapter { LocalDisplayDevice(IBinder displayToken, long physicalDisplayId, LocalDisplayDevice(IBinder displayToken, long physicalDisplayId, SurfaceControl.DisplayInfo info, SurfaceControl.DisplayConfig[] configs, SurfaceControl.DisplayInfo info, SurfaceControl.DisplayConfig[] configs, int activeConfigId, SurfaceControl.DesiredDisplayConfigSpecs configSpecs, int activeConfigId, SurfaceControl.DesiredDisplayConfigSpecs configSpecs, int[] colorModes, int activeColorMode, boolean isInternal) { int[] colorModes, int activeColorMode, Display.HdrCapabilities hdrCapabilities, boolean isInternal) { super(LocalDisplayAdapter.this, displayToken, UNIQUE_ID_PREFIX + physicalDisplayId); super(LocalDisplayAdapter.this, displayToken, UNIQUE_ID_PREFIX + physicalDisplayId); mPhysicalDisplayId = physicalDisplayId; mPhysicalDisplayId = physicalDisplayId; mIsInternal = isInternal; mIsInternal = isInternal; mDisplayInfo = info; mDisplayInfo = info; updateDisplayConfigsLocked(configs, activeConfigId, configSpecs, colorModes, updateDisplayConfigsLocked(configs, activeConfigId, configSpecs); activeColorMode); updateColorModesLocked(colorModes, activeColorMode); updateColorModesLocked(colorModes, activeColorMode); updateHdrCapabilitiesLocked(hdrCapabilities); mSidekickInternal = LocalServices.getService(SidekickInternal.class); mSidekickInternal = LocalServices.getService(SidekickInternal.class); if (mIsInternal) { if (mIsInternal) { LightsManager lights = LocalServices.getService(LightsManager.class); LightsManager lights = LocalServices.getService(LightsManager.class); Loading @@ -219,7 +226,6 @@ final class LocalDisplayAdapter extends DisplayAdapter { } else { } else { mBacklight = null; mBacklight = null; } } mHdrCapabilities = SurfaceControl.getHdrCapabilities(displayToken); mAllmSupported = SurfaceControl.getAutoLowLatencyModeSupport(displayToken); mAllmSupported = SurfaceControl.getAutoLowLatencyModeSupport(displayToken); mGameContentTypeSupported = SurfaceControl.getGameContentTypeSupport(displayToken); mGameContentTypeSupported = SurfaceControl.getGameContentTypeSupport(displayToken); mHalBrightnessSupport = SurfaceControl.getDisplayBrightnessSupport(displayToken); mHalBrightnessSupport = SurfaceControl.getDisplayBrightnessSupport(displayToken); Loading @@ -236,11 +242,9 @@ final class LocalDisplayAdapter extends DisplayAdapter { public boolean updateDisplayConfigsLocked( public boolean updateDisplayConfigsLocked( SurfaceControl.DisplayConfig[] configs, int activeConfigId, SurfaceControl.DisplayConfig[] configs, int activeConfigId, SurfaceControl.DesiredDisplayConfigSpecs configSpecs, int[] colorModes, SurfaceControl.DesiredDisplayConfigSpecs configSpecs) { int activeColorMode) { mDisplayConfigs = Arrays.copyOf(configs, configs.length); mDisplayConfigs = Arrays.copyOf(configs, configs.length); mActiveConfigId = activeConfigId; mActiveConfigId = activeConfigId; // Build an updated list of all existing modes. // Build an updated list of all existing modes. ArrayList<DisplayModeRecord> records = new ArrayList<DisplayModeRecord>(); ArrayList<DisplayModeRecord> records = new ArrayList<DisplayModeRecord>(); boolean modesAdded = false; boolean modesAdded = false; Loading Loading @@ -389,11 +393,12 @@ final class LocalDisplayAdapter extends DisplayAdapter { mSystemBrightnessToNits = sysToNits; mSystemBrightnessToNits = sysToNits; } } private boolean updateColorModesLocked(int[] colorModes, private boolean updateColorModesLocked(int[] colorModes, int activeColorMode) { int activeColorMode) { if (colorModes == null) { List<Integer> pendingColorModes = new ArrayList<>(); return false; } if (colorModes == null) return false; List<Integer> pendingColorModes = new ArrayList<>(); // Build an updated list of all existing color modes. // Build an updated list of all existing color modes. boolean colorModesAdded = false; boolean colorModesAdded = false; for (int colorMode : colorModes) { for (int colorMode : colorModes) { Loading Loading @@ -441,6 +446,15 @@ final class LocalDisplayAdapter extends DisplayAdapter { return true; return true; } } private boolean updateHdrCapabilitiesLocked(Display.HdrCapabilities newHdrCapabilities) { // If the HDR capabilities haven't changed, then we're done here. if (Objects.equals(mHdrCapabilities, newHdrCapabilities)) { return false; } mHdrCapabilities = newHdrCapabilities; return true; } private DisplayModeRecord findDisplayModeRecord(SurfaceControl.DisplayConfig config) { private DisplayModeRecord findDisplayModeRecord(SurfaceControl.DisplayConfig config) { for (int i = 0; i < mSupportedModes.size(); i++) { for (int i = 0; i < mSupportedModes.size(); i++) { DisplayModeRecord record = mSupportedModes.valueAt(i); DisplayModeRecord record = mSupportedModes.valueAt(i); Loading