Loading services/core/java/com/android/server/display/DisplayDeviceConfig.java +65 −9 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.display; import android.os.Environment; import android.os.Environment; import android.util.Slog; import android.util.Slog; import android.view.DisplayAddress; import com.android.server.display.config.DisplayConfiguration; import com.android.server.display.config.DisplayConfiguration; import com.android.server.display.config.NitsMap; import com.android.server.display.config.NitsMap; Loading @@ -31,6 +32,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.IOException; import java.io.InputStream; import java.io.InputStream; import java.util.Arrays; import java.util.List; import java.util.List; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeConfigurationException; Loading @@ -45,7 +47,11 @@ public class DisplayDeviceConfig { private static final String ETC_DIR = "etc"; private static final String ETC_DIR = "etc"; private static final String DISPLAY_CONFIG_DIR = "displayconfig"; private static final String DISPLAY_CONFIG_DIR = "displayconfig"; private static final String CONFIG_FILE_FORMAT = "display_%d.xml"; private static final String CONFIG_FILE_FORMAT = "display_%s.xml"; private static final String PORT_SUFFIX_FORMAT = "port_%d"; private static final String STABLE_ID_SUFFIX_FORMAT = "id_%d"; private static final String NO_SUFFIX_FORMAT = "%d"; private static final long STABLE_FLAG = 1L << 62; private float[] mNits; private float[] mNits; private float[] mBrightness; private float[] mBrightness; Loading @@ -55,19 +61,45 @@ public class DisplayDeviceConfig { /** /** * Creates an instance for the specified display. * Creates an instance for the specified display. * * Tries to find a file with identifier in the following priority order: * <ol> * <li>physicalDisplayId</li> * <li>physicalDisplayId without a stable flag (old system)</li> * <li>portId</li> * </ol> * @param physicalDisplayId The display ID for which to load the configuration. * @param physicalDisplayId The display ID for which to load the configuration. * @return A configuration instance for the specified display. * @return A configuration instance for the specified display. */ */ public static DisplayDeviceConfig create(long physicalDisplayId) { public static DisplayDeviceConfig create(long physicalDisplayId) { final DisplayDeviceConfig config = new DisplayDeviceConfig(); DisplayDeviceConfig config; final String filename = String.format(CONFIG_FILE_FORMAT, physicalDisplayId); // Create config using filename from physical ID (including "stable" bit). config = getConfigFromSuffix(STABLE_ID_SUFFIX_FORMAT, physicalDisplayId); if (config != null) { return config; } config.initFromFile(Environment.buildPath( // Create config using filename from physical ID (excluding "stable" bit). Environment.getProductDirectory(), ETC_DIR, DISPLAY_CONFIG_DIR, filename)); final long withoutStableFlag = physicalDisplayId & ~STABLE_FLAG; config = getConfigFromSuffix(NO_SUFFIX_FORMAT, withoutStableFlag); if (config != null) { return config; return config; } } // Create config using filename from port ID. final DisplayAddress.Physical physicalAddress = DisplayAddress.fromPhysicalDisplayId(physicalDisplayId); int port = physicalAddress.getPort(); config = getConfigFromSuffix(PORT_SUFFIX_FORMAT, port); if (config != null) { return config; } // None of these files exist. return null; } /** /** * Return the brightness mapping nits array if one is defined in the configuration file. * Return the brightness mapping nits array if one is defined in the configuration file. * * Loading @@ -86,6 +118,30 @@ public class DisplayDeviceConfig { return mBrightness; return mBrightness; } } @Override public String toString() { String str = "DisplayDeviceConfig{" + "mBrightness=" + Arrays.toString(mBrightness) + ", mNits=" + Arrays.toString(mNits) + "}"; return str; } private static DisplayDeviceConfig getConfigFromSuffix(String suffixFormat, long idNumber) { final String suffix = String.format(suffixFormat, idNumber); final String filename = String.format(CONFIG_FILE_FORMAT, suffix); final File filePath = Environment.buildPath( Environment.getProductDirectory(), ETC_DIR, DISPLAY_CONFIG_DIR, filename); if (filePath.exists()) { final DisplayDeviceConfig config = new DisplayDeviceConfig(); config.initFromFile(filePath); return config; } return null; } private void initFromFile(File configFile) { private void initFromFile(File configFile) { if (!configFile.exists()) { if (!configFile.exists()) { // Display configuration files aren't required to exist. // Display configuration files aren't required to exist. Loading services/core/java/com/android/server/display/LocalDisplayAdapter.java +5 −4 Original line number Original line Diff line number Diff line Loading @@ -391,11 +391,11 @@ final class LocalDisplayAdapter extends DisplayAdapter { Spline sysToNits = null; Spline sysToNits = null; // Load the mapping from nits to HAL brightness range (display-device-config.xml) // Load the mapping from nits to HAL brightness range (display-device-config.xml) DisplayDeviceConfig config = DisplayDeviceConfig.create(mPhysicalDisplayId); mDisplayDeviceConfig = DisplayDeviceConfig.create(mPhysicalDisplayId); mDisplayDeviceConfig = config; if (mDisplayDeviceConfig == null) { if (config == null) { return; return; } } final float[] halNits = mDisplayDeviceConfig.getNits(); final float[] halNits = mDisplayDeviceConfig.getNits(); final float[] halBrightness = mDisplayDeviceConfig.getBrightness(); final float[] halBrightness = mDisplayDeviceConfig.getBrightness(); if (halNits == null || halBrightness == null) { if (halNits == null || halBrightness == null) { Loading Loading @@ -942,7 +942,8 @@ final class LocalDisplayAdapter extends DisplayAdapter { for (int i = 0; i < mSupportedModes.size(); i++) { for (int i = 0; i < mSupportedModes.size(); i++) { pw.println(" " + mSupportedModes.valueAt(i)); pw.println(" " + mSupportedModes.valueAt(i)); } } pw.print("mSupportedColorModes=" + mSupportedColorModes.toString()); pw.println("mSupportedColorModes=" + mSupportedColorModes.toString()); pw.print("mDisplayDeviceConfig=" + mDisplayDeviceConfig); } } private int findDisplayConfigIdLocked(int modeId, int configGroup) { private int findDisplayConfigIdLocked(int modeId, int configGroup) { Loading Loading
services/core/java/com/android/server/display/DisplayDeviceConfig.java +65 −9 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.display; import android.os.Environment; import android.os.Environment; import android.util.Slog; import android.util.Slog; import android.view.DisplayAddress; import com.android.server.display.config.DisplayConfiguration; import com.android.server.display.config.DisplayConfiguration; import com.android.server.display.config.NitsMap; import com.android.server.display.config.NitsMap; Loading @@ -31,6 +32,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.IOException; import java.io.InputStream; import java.io.InputStream; import java.util.Arrays; import java.util.List; import java.util.List; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeConfigurationException; Loading @@ -45,7 +47,11 @@ public class DisplayDeviceConfig { private static final String ETC_DIR = "etc"; private static final String ETC_DIR = "etc"; private static final String DISPLAY_CONFIG_DIR = "displayconfig"; private static final String DISPLAY_CONFIG_DIR = "displayconfig"; private static final String CONFIG_FILE_FORMAT = "display_%d.xml"; private static final String CONFIG_FILE_FORMAT = "display_%s.xml"; private static final String PORT_SUFFIX_FORMAT = "port_%d"; private static final String STABLE_ID_SUFFIX_FORMAT = "id_%d"; private static final String NO_SUFFIX_FORMAT = "%d"; private static final long STABLE_FLAG = 1L << 62; private float[] mNits; private float[] mNits; private float[] mBrightness; private float[] mBrightness; Loading @@ -55,19 +61,45 @@ public class DisplayDeviceConfig { /** /** * Creates an instance for the specified display. * Creates an instance for the specified display. * * Tries to find a file with identifier in the following priority order: * <ol> * <li>physicalDisplayId</li> * <li>physicalDisplayId without a stable flag (old system)</li> * <li>portId</li> * </ol> * @param physicalDisplayId The display ID for which to load the configuration. * @param physicalDisplayId The display ID for which to load the configuration. * @return A configuration instance for the specified display. * @return A configuration instance for the specified display. */ */ public static DisplayDeviceConfig create(long physicalDisplayId) { public static DisplayDeviceConfig create(long physicalDisplayId) { final DisplayDeviceConfig config = new DisplayDeviceConfig(); DisplayDeviceConfig config; final String filename = String.format(CONFIG_FILE_FORMAT, physicalDisplayId); // Create config using filename from physical ID (including "stable" bit). config = getConfigFromSuffix(STABLE_ID_SUFFIX_FORMAT, physicalDisplayId); if (config != null) { return config; } config.initFromFile(Environment.buildPath( // Create config using filename from physical ID (excluding "stable" bit). Environment.getProductDirectory(), ETC_DIR, DISPLAY_CONFIG_DIR, filename)); final long withoutStableFlag = physicalDisplayId & ~STABLE_FLAG; config = getConfigFromSuffix(NO_SUFFIX_FORMAT, withoutStableFlag); if (config != null) { return config; return config; } } // Create config using filename from port ID. final DisplayAddress.Physical physicalAddress = DisplayAddress.fromPhysicalDisplayId(physicalDisplayId); int port = physicalAddress.getPort(); config = getConfigFromSuffix(PORT_SUFFIX_FORMAT, port); if (config != null) { return config; } // None of these files exist. return null; } /** /** * Return the brightness mapping nits array if one is defined in the configuration file. * Return the brightness mapping nits array if one is defined in the configuration file. * * Loading @@ -86,6 +118,30 @@ public class DisplayDeviceConfig { return mBrightness; return mBrightness; } } @Override public String toString() { String str = "DisplayDeviceConfig{" + "mBrightness=" + Arrays.toString(mBrightness) + ", mNits=" + Arrays.toString(mNits) + "}"; return str; } private static DisplayDeviceConfig getConfigFromSuffix(String suffixFormat, long idNumber) { final String suffix = String.format(suffixFormat, idNumber); final String filename = String.format(CONFIG_FILE_FORMAT, suffix); final File filePath = Environment.buildPath( Environment.getProductDirectory(), ETC_DIR, DISPLAY_CONFIG_DIR, filename); if (filePath.exists()) { final DisplayDeviceConfig config = new DisplayDeviceConfig(); config.initFromFile(filePath); return config; } return null; } private void initFromFile(File configFile) { private void initFromFile(File configFile) { if (!configFile.exists()) { if (!configFile.exists()) { // Display configuration files aren't required to exist. // Display configuration files aren't required to exist. Loading
services/core/java/com/android/server/display/LocalDisplayAdapter.java +5 −4 Original line number Original line Diff line number Diff line Loading @@ -391,11 +391,11 @@ final class LocalDisplayAdapter extends DisplayAdapter { Spline sysToNits = null; Spline sysToNits = null; // Load the mapping from nits to HAL brightness range (display-device-config.xml) // Load the mapping from nits to HAL brightness range (display-device-config.xml) DisplayDeviceConfig config = DisplayDeviceConfig.create(mPhysicalDisplayId); mDisplayDeviceConfig = DisplayDeviceConfig.create(mPhysicalDisplayId); mDisplayDeviceConfig = config; if (mDisplayDeviceConfig == null) { if (config == null) { return; return; } } final float[] halNits = mDisplayDeviceConfig.getNits(); final float[] halNits = mDisplayDeviceConfig.getNits(); final float[] halBrightness = mDisplayDeviceConfig.getBrightness(); final float[] halBrightness = mDisplayDeviceConfig.getBrightness(); if (halNits == null || halBrightness == null) { if (halNits == null || halBrightness == null) { Loading Loading @@ -942,7 +942,8 @@ final class LocalDisplayAdapter extends DisplayAdapter { for (int i = 0; i < mSupportedModes.size(); i++) { for (int i = 0; i < mSupportedModes.size(); i++) { pw.println(" " + mSupportedModes.valueAt(i)); pw.println(" " + mSupportedModes.valueAt(i)); } } pw.print("mSupportedColorModes=" + mSupportedColorModes.toString()); pw.println("mSupportedColorModes=" + mSupportedColorModes.toString()); pw.print("mDisplayDeviceConfig=" + mDisplayDeviceConfig); } } private int findDisplayConfigIdLocked(int modeId, int configGroup) { private int findDisplayConfigIdLocked(int modeId, int configGroup) { Loading