Loading services/core/java/com/android/server/display/DisplayDeviceConfig.java +23 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.util.Slog; import android.view.DisplayAddress; import com.android.server.display.config.DisplayConfiguration; import com.android.server.display.config.DisplayQuirks; import com.android.server.display.config.NitsMap; import com.android.server.display.config.Point; import com.android.server.display.config.XmlParser; Loading @@ -32,6 +33,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; Loading @@ -45,6 +47,8 @@ public class DisplayDeviceConfig { public static final float HIGH_BRIGHTNESS_MODE_UNSUPPORTED = Float.NaN; public static final String QUIRK_CAN_SET_BRIGHTNESS_VIA_HWC = "canSetBrightnessViaHwc"; private static final String ETC_DIR = "etc"; private static final String DISPLAY_CONFIG_DIR = "displayconfig"; private static final String CONFIG_FILE_FORMAT = "display_%s.xml"; Loading @@ -55,6 +59,7 @@ public class DisplayDeviceConfig { private float[] mNits; private float[] mBrightness; private List<String> mQuirks; private DisplayDeviceConfig() { } Loading Loading @@ -134,11 +139,21 @@ public class DisplayDeviceConfig { return mBrightness; } /** * @param quirkValue The quirk to test. * @return {@code true} if the specified quirk is present in this configuration, * {@code false} otherwise. */ public boolean hasQuirk(String quirkValue) { return mQuirks != null && mQuirks.contains(quirkValue); } @Override public String toString() { String str = "DisplayDeviceConfig{" + "mBrightness=" + Arrays.toString(mBrightness) + ", mNits=" + Arrays.toString(mNits) + ", mQuirks=" + mQuirks + "}"; return str; } Loading Loading @@ -173,6 +188,7 @@ public class DisplayDeviceConfig { try (InputStream in = new BufferedInputStream(new FileInputStream(configFile))) { final DisplayConfiguration config = XmlParser.read(in); loadBrightnessMap(config); loadQuirks(config); } catch (IOException | DatatypeConfigurationException | XmlPullParserException e) { Slog.e(TAG, "Encountered an error while reading/parsing display config file: " + configFile, e); Loading Loading @@ -210,4 +226,11 @@ public class DisplayDeviceConfig { mNits = nits; mBrightness = backlight; } private void loadQuirks(DisplayConfiguration config) { final DisplayQuirks quirks = config.getQuirks(); if (quirks != null) { mQuirks = new ArrayList<>(quirks.getQuirk()); } } } services/core/java/com/android/server/display/LocalDisplayAdapter.java +23 −9 Original line number Diff line number Diff line Loading @@ -185,6 +185,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { private DisplayDeviceInfo mInfo; private boolean mHavePendingChanges; private int mState = Display.STATE_UNKNOWN; // This is only set in the runnable returned from requestDisplayStateLocked. private float mBrightnessState = PowerManager.BRIGHTNESS_INVALID_FLOAT; private int mDefaultModeId; private int mDefaultConfigGroup; Loading Loading @@ -227,7 +228,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { mDisplayDeviceConfig = null; // Defer configuration file loading BackgroundThread.getHandler().sendMessage(PooledLambda.obtainMessage( LocalDisplayDevice::loadDisplayConfigurationBrightnessMapping, this)); LocalDisplayDevice::loadDisplayConfiguration, this)); } @Override Loading Loading @@ -409,7 +410,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { return mDisplayDeviceConfig; } private void loadDisplayConfigurationBrightnessMapping() { private void loadDisplayConfiguration() { Spline nitsToHal = null; Spline sysToNits = null; Loading @@ -419,6 +420,9 @@ final class LocalDisplayAdapter extends DisplayAdapter { return; } mBacklightAdapter.setForceSurfaceControl(mDisplayDeviceConfig.hasQuirk( DisplayDeviceConfig.QUIRK_CAN_SET_BRIGHTNESS_VIA_HWC)); final float[] halNits = mDisplayDeviceConfig.getNits(); final float[] halBrightness = mDisplayDeviceConfig.getBrightness(); if (halNits == null || halBrightness == null) { Loading Loading @@ -648,10 +652,6 @@ final class LocalDisplayAdapter extends DisplayAdapter { updateDeviceInfoLocked(); } if (brightnessChanged) { mBrightnessState = brightnessState; } // Defer actually setting the display state until after we have exited // the critical section since it can take hundreds of milliseconds // to complete. Loading Loading @@ -691,6 +691,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { // Apply brightness changes given that we are in a non-suspended state. if (brightnessChanged || vrModeChange) { setDisplayBrightness(brightnessState); mBrightnessState = brightnessState; } // Enter the final desired state, possibly suspended. Loading Loading @@ -1208,6 +1209,14 @@ final class LocalDisplayAdapter extends DisplayAdapter { private final LogicalLight mBacklight; private final boolean mUseSurfaceControlBrightness; private boolean mForceSurfaceControl = false; /** * @param displayToken Token for display associated with this backlight. * @param isDefaultDisplay {@code true} if it is the default display. * @param forceSurfaceControl {@code true} if brightness should always be * set via SurfaceControl API. */ BacklightAdapter(IBinder displayToken, boolean isDefaultDisplay) { mDisplayToken = displayToken; Loading @@ -1222,23 +1231,28 @@ final class LocalDisplayAdapter extends DisplayAdapter { } } public void setBrightness(float brightness) { if (mUseSurfaceControlBrightness) { void setBrightness(float brightness) { if (mUseSurfaceControlBrightness || mForceSurfaceControl) { SurfaceControl.setDisplayBrightness(mDisplayToken, brightness); } else if (mBacklight != null) { mBacklight.setBrightness(brightness); } } public void setVrMode(boolean isVrModeEnabled) { void setVrMode(boolean isVrModeEnabled) { if (mBacklight != null) { mBacklight.setVrMode(isVrModeEnabled); } } void setForceSurfaceControl(boolean forceSurfaceControl) { mForceSurfaceControl = forceSurfaceControl; } @Override public String toString() { return "BacklightAdapter [useSurfaceControl=" + mUseSurfaceControlBrightness + " (force_anyway? " + mForceSurfaceControl + ")" + ", backlight=" + mBacklight + "]"; } } Loading services/core/xsd/display-device-config/display-device-config.xsd +7 −0 Original line number Diff line number Diff line Loading @@ -29,12 +29,19 @@ <xs:annotation name="nonnull"/> <xs:annotation name="final"/> </xs:element> <xs:element type="displayQuirks" name="quirks" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <!-- Type definitions --> <xs:complexType name="displayQuirks"> <xs:sequence> <xs:element name="quirk" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> <xs:complexType name="nitsMap"> <xs:sequence> <xs:element name="point" type="point" maxOccurs="unbounded" minOccurs="2"> Loading services/core/xsd/display-device-config/schema/current.txt +7 −0 Original line number Diff line number Diff line Loading @@ -3,10 +3,17 @@ package com.android.server.display.config { public class DisplayConfiguration { ctor public DisplayConfiguration(); method public com.android.server.display.config.DisplayQuirks getQuirks(); method @NonNull public final com.android.server.display.config.NitsMap getScreenBrightnessMap(); method public void setQuirks(com.android.server.display.config.DisplayQuirks); method public final void setScreenBrightnessMap(@NonNull com.android.server.display.config.NitsMap); } public class DisplayQuirks { ctor public DisplayQuirks(); method public java.util.List<java.lang.String> getQuirk(); } public class NitsMap { ctor public NitsMap(); method @NonNull public final java.util.List<com.android.server.display.config.Point> getPoint(); Loading Loading
services/core/java/com/android/server/display/DisplayDeviceConfig.java +23 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.util.Slog; import android.view.DisplayAddress; import com.android.server.display.config.DisplayConfiguration; import com.android.server.display.config.DisplayQuirks; import com.android.server.display.config.NitsMap; import com.android.server.display.config.Point; import com.android.server.display.config.XmlParser; Loading @@ -32,6 +33,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; Loading @@ -45,6 +47,8 @@ public class DisplayDeviceConfig { public static final float HIGH_BRIGHTNESS_MODE_UNSUPPORTED = Float.NaN; public static final String QUIRK_CAN_SET_BRIGHTNESS_VIA_HWC = "canSetBrightnessViaHwc"; private static final String ETC_DIR = "etc"; private static final String DISPLAY_CONFIG_DIR = "displayconfig"; private static final String CONFIG_FILE_FORMAT = "display_%s.xml"; Loading @@ -55,6 +59,7 @@ public class DisplayDeviceConfig { private float[] mNits; private float[] mBrightness; private List<String> mQuirks; private DisplayDeviceConfig() { } Loading Loading @@ -134,11 +139,21 @@ public class DisplayDeviceConfig { return mBrightness; } /** * @param quirkValue The quirk to test. * @return {@code true} if the specified quirk is present in this configuration, * {@code false} otherwise. */ public boolean hasQuirk(String quirkValue) { return mQuirks != null && mQuirks.contains(quirkValue); } @Override public String toString() { String str = "DisplayDeviceConfig{" + "mBrightness=" + Arrays.toString(mBrightness) + ", mNits=" + Arrays.toString(mNits) + ", mQuirks=" + mQuirks + "}"; return str; } Loading Loading @@ -173,6 +188,7 @@ public class DisplayDeviceConfig { try (InputStream in = new BufferedInputStream(new FileInputStream(configFile))) { final DisplayConfiguration config = XmlParser.read(in); loadBrightnessMap(config); loadQuirks(config); } catch (IOException | DatatypeConfigurationException | XmlPullParserException e) { Slog.e(TAG, "Encountered an error while reading/parsing display config file: " + configFile, e); Loading Loading @@ -210,4 +226,11 @@ public class DisplayDeviceConfig { mNits = nits; mBrightness = backlight; } private void loadQuirks(DisplayConfiguration config) { final DisplayQuirks quirks = config.getQuirks(); if (quirks != null) { mQuirks = new ArrayList<>(quirks.getQuirk()); } } }
services/core/java/com/android/server/display/LocalDisplayAdapter.java +23 −9 Original line number Diff line number Diff line Loading @@ -185,6 +185,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { private DisplayDeviceInfo mInfo; private boolean mHavePendingChanges; private int mState = Display.STATE_UNKNOWN; // This is only set in the runnable returned from requestDisplayStateLocked. private float mBrightnessState = PowerManager.BRIGHTNESS_INVALID_FLOAT; private int mDefaultModeId; private int mDefaultConfigGroup; Loading Loading @@ -227,7 +228,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { mDisplayDeviceConfig = null; // Defer configuration file loading BackgroundThread.getHandler().sendMessage(PooledLambda.obtainMessage( LocalDisplayDevice::loadDisplayConfigurationBrightnessMapping, this)); LocalDisplayDevice::loadDisplayConfiguration, this)); } @Override Loading Loading @@ -409,7 +410,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { return mDisplayDeviceConfig; } private void loadDisplayConfigurationBrightnessMapping() { private void loadDisplayConfiguration() { Spline nitsToHal = null; Spline sysToNits = null; Loading @@ -419,6 +420,9 @@ final class LocalDisplayAdapter extends DisplayAdapter { return; } mBacklightAdapter.setForceSurfaceControl(mDisplayDeviceConfig.hasQuirk( DisplayDeviceConfig.QUIRK_CAN_SET_BRIGHTNESS_VIA_HWC)); final float[] halNits = mDisplayDeviceConfig.getNits(); final float[] halBrightness = mDisplayDeviceConfig.getBrightness(); if (halNits == null || halBrightness == null) { Loading Loading @@ -648,10 +652,6 @@ final class LocalDisplayAdapter extends DisplayAdapter { updateDeviceInfoLocked(); } if (brightnessChanged) { mBrightnessState = brightnessState; } // Defer actually setting the display state until after we have exited // the critical section since it can take hundreds of milliseconds // to complete. Loading Loading @@ -691,6 +691,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { // Apply brightness changes given that we are in a non-suspended state. if (brightnessChanged || vrModeChange) { setDisplayBrightness(brightnessState); mBrightnessState = brightnessState; } // Enter the final desired state, possibly suspended. Loading Loading @@ -1208,6 +1209,14 @@ final class LocalDisplayAdapter extends DisplayAdapter { private final LogicalLight mBacklight; private final boolean mUseSurfaceControlBrightness; private boolean mForceSurfaceControl = false; /** * @param displayToken Token for display associated with this backlight. * @param isDefaultDisplay {@code true} if it is the default display. * @param forceSurfaceControl {@code true} if brightness should always be * set via SurfaceControl API. */ BacklightAdapter(IBinder displayToken, boolean isDefaultDisplay) { mDisplayToken = displayToken; Loading @@ -1222,23 +1231,28 @@ final class LocalDisplayAdapter extends DisplayAdapter { } } public void setBrightness(float brightness) { if (mUseSurfaceControlBrightness) { void setBrightness(float brightness) { if (mUseSurfaceControlBrightness || mForceSurfaceControl) { SurfaceControl.setDisplayBrightness(mDisplayToken, brightness); } else if (mBacklight != null) { mBacklight.setBrightness(brightness); } } public void setVrMode(boolean isVrModeEnabled) { void setVrMode(boolean isVrModeEnabled) { if (mBacklight != null) { mBacklight.setVrMode(isVrModeEnabled); } } void setForceSurfaceControl(boolean forceSurfaceControl) { mForceSurfaceControl = forceSurfaceControl; } @Override public String toString() { return "BacklightAdapter [useSurfaceControl=" + mUseSurfaceControlBrightness + " (force_anyway? " + mForceSurfaceControl + ")" + ", backlight=" + mBacklight + "]"; } } Loading
services/core/xsd/display-device-config/display-device-config.xsd +7 −0 Original line number Diff line number Diff line Loading @@ -29,12 +29,19 @@ <xs:annotation name="nonnull"/> <xs:annotation name="final"/> </xs:element> <xs:element type="displayQuirks" name="quirks" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <!-- Type definitions --> <xs:complexType name="displayQuirks"> <xs:sequence> <xs:element name="quirk" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> <xs:complexType name="nitsMap"> <xs:sequence> <xs:element name="point" type="point" maxOccurs="unbounded" minOccurs="2"> Loading
services/core/xsd/display-device-config/schema/current.txt +7 −0 Original line number Diff line number Diff line Loading @@ -3,10 +3,17 @@ package com.android.server.display.config { public class DisplayConfiguration { ctor public DisplayConfiguration(); method public com.android.server.display.config.DisplayQuirks getQuirks(); method @NonNull public final com.android.server.display.config.NitsMap getScreenBrightnessMap(); method public void setQuirks(com.android.server.display.config.DisplayQuirks); method public final void setScreenBrightnessMap(@NonNull com.android.server.display.config.NitsMap); } public class DisplayQuirks { ctor public DisplayQuirks(); method public java.util.List<java.lang.String> getQuirk(); } public class NitsMap { ctor public NitsMap(); method @NonNull public final java.util.List<com.android.server.display.config.Point> getPoint(); Loading