Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2bda9e3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add notion of Quirks the Device Display Config files."

parents 6fe207d7 0f42b0bb
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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";
@@ -55,6 +59,7 @@ public class DisplayDeviceConfig {

    private float[] mNits;
    private float[] mBrightness;
    private List<String> mQuirks;

    private DisplayDeviceConfig() {
    }
@@ -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;
    }
@@ -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);
@@ -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());
        }
    }
}
+23 −9
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -409,7 +410,7 @@ final class LocalDisplayAdapter extends DisplayAdapter {
            return mDisplayDeviceConfig;
        }

        private void loadDisplayConfigurationBrightnessMapping() {
        private void loadDisplayConfiguration() {
            Spline nitsToHal = null;
            Spline sysToNits = null;

@@ -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) {
@@ -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.
@@ -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.
@@ -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;

@@ -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 + "]";
        }
    }
+7 −0
Original line number Diff line number Diff line
@@ -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">
+7 −0
Original line number Diff line number Diff line
@@ -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();