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

Commit e0cc1121 authored by Oleg Blinnikov's avatar Oleg Blinnikov Committed by Android (Google) Code Review
Browse files

Merge changes from topics "limit-external-display-mode-main", "sync-refresh-rates-vote" into main

* changes:
  Added synchronization of displays refresh rates
  Added vote to limit external display mode
  Vote for userPreferredMode
  Pass userPreferredMode separately from defaultMode
  Resolution range voting in DisplayModeDirector
  Added more tests to DisplayModeDirectorTest
parents dc3bdc7d 78cd762a
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.view;

import static android.view.Display.Mode.INVALID_MODE_ID;
import static android.view.DisplayInfoProto.APP_HEIGHT;
import static android.view.DisplayInfoProto.APP_WIDTH;
import static android.view.DisplayInfoProto.CUTOUT;
@@ -199,6 +200,11 @@ public final class DisplayInfo implements Parcelable {
     */
    public int defaultModeId;

    /**
     * The user preferred display mode.
     */
    public int userPreferredModeId = INVALID_MODE_ID;

    /**
     * The supported modes of this display.
     */
@@ -420,6 +426,7 @@ public final class DisplayInfo implements Parcelable {
                && modeId == other.modeId
                && renderFrameRate == other.renderFrameRate
                && defaultModeId == other.defaultModeId
                && userPreferredModeId == other.userPreferredModeId
                && Arrays.equals(supportedModes, other.supportedModes)
                && colorMode == other.colorMode
                && Arrays.equals(supportedColorModes, other.supportedColorModes)
@@ -478,6 +485,7 @@ public final class DisplayInfo implements Parcelable {
        modeId = other.modeId;
        renderFrameRate = other.renderFrameRate;
        defaultModeId = other.defaultModeId;
        userPreferredModeId = other.userPreferredModeId;
        supportedModes = Arrays.copyOf(other.supportedModes, other.supportedModes.length);
        colorMode = other.colorMode;
        supportedColorModes = Arrays.copyOf(
@@ -530,6 +538,7 @@ public final class DisplayInfo implements Parcelable {
        modeId = source.readInt();
        renderFrameRate = source.readFloat();
        defaultModeId = source.readInt();
        userPreferredModeId = source.readInt();
        int nModes = source.readInt();
        supportedModes = new Display.Mode[nModes];
        for (int i = 0; i < nModes; i++) {
@@ -596,6 +605,7 @@ public final class DisplayInfo implements Parcelable {
        dest.writeInt(modeId);
        dest.writeFloat(renderFrameRate);
        dest.writeInt(defaultModeId);
        dest.writeInt(userPreferredModeId);
        dest.writeInt(supportedModes.length);
        for (int i = 0; i < supportedModes.length; i++) {
            supportedModes[i].writeToParcel(dest, flags);
@@ -832,9 +842,12 @@ public final class DisplayInfo implements Parcelable {
        sb.append(presentationDeadlineNanos);
        sb.append(", mode ");
        sb.append(modeId);
        sb.append(", renderFrameRate ");
        sb.append(renderFrameRate);
        sb.append(", defaultMode ");
        sb.append(defaultModeId);
        sb.append(", userPreferredModeId ");
        sb.append(userPreferredModeId);
        sb.append(", modes ");
        sb.append(Arrays.toString(supportedModes));
        sb.append(", hdrCapabilities ");
+22 −0
Original line number Diff line number Diff line
@@ -5227,6 +5227,28 @@
         non-zero. -->
    <integer name="config_defaultPeakRefreshRate">0</integer>

    <!-- External display peak refresh rate for the given device. Change this value if you want to
         prevent the framework from using higher refresh rates, even if display modes with higher
         refresh rates are available from hardware composer. Only has an effect if this value and
         config_externalDisplayPeakWidth and config_externalDisplayPeakHeight are non-zero. -->
    <integer name="config_externalDisplayPeakRefreshRate">0</integer>

    <!-- External display peak width for the given device. Change this value if you want
         to prevent the framework from using higher resolution, even if display modes with higher
         resolutions are available from hardware composer. Only has an effect if this value and
         config_externalDisplayPeakRefreshRate and config_externalDisplayPeakHeight are non-zero.-->
    <integer name="config_externalDisplayPeakWidth">0</integer>

    <!-- External display peak height for the given device. Change this value if you want
         to prevent the framework from using higher resolution, even if display modes with higher
         resolutions are available from hardware composer. Only has an effect if this value and
         config_externalDisplayPeakRefreshRate and config_externalDisplayPeakWidth are non-zero. -->
    <integer name="config_externalDisplayPeakHeight">0</integer>

    <!-- Enable synchronization of the displays refresh rates by applying the default low refresh
         rate. -->
    <bool name="config_refreshRateSynchronizationEnabled">false</bool>

    <!-- The display uses different gamma curves for different refresh rates. It's hard for panel
         vendors to tune the curves to have exact same brightness for different refresh rate. So
         flicker could be observed at switch time. The issue is worse at the gamma lower end.
+4 −0
Original line number Diff line number Diff line
@@ -4231,6 +4231,10 @@
  <!-- For high refresh rate displays -->
  <java-symbol type="integer" name="config_defaultRefreshRate" />
  <java-symbol type="integer" name="config_defaultPeakRefreshRate" />
  <java-symbol type="integer" name="config_externalDisplayPeakRefreshRate" />
  <java-symbol type="integer" name="config_externalDisplayPeakWidth" />
  <java-symbol type="integer" name="config_externalDisplayPeakHeight" />
  <java-symbol type="bool" name="config_refreshRateSynchronizationEnabled" />
  <java-symbol type="integer" name="config_defaultRefreshRateInZone" />
  <java-symbol type="array" name="config_brightnessThresholdsOfPeakRefreshRate" />
  <java-symbol type="array" name="config_ambientThresholdsOfPeakRefreshRate" />
+2 −1
Original line number Diff line number Diff line
@@ -500,6 +500,8 @@ public class DisplayDeviceConfig {

    public static final String DEFAULT_ID = "default";

    public static final int DEFAULT_LOW_REFRESH_RATE = 60;

    private static final float BRIGHTNESS_DEFAULT = 0.5f;
    private static final String ETC_DIR = "etc";
    private static final String DISPLAY_CONFIG_DIR = "displayconfig";
@@ -513,7 +515,6 @@ public class DisplayDeviceConfig {
    private static final int DEFAULT_PEAK_REFRESH_RATE = 0;
    private static final int DEFAULT_REFRESH_RATE = 60;
    private static final int DEFAULT_REFRESH_RATE_IN_HBM = 0;
    private static final int DEFAULT_LOW_REFRESH_RATE = 60;
    private static final int DEFAULT_HIGH_REFRESH_RATE = 0;
    private static final float[] DEFAULT_BRIGHTNESS_THRESHOLDS = new float[]{};

+10 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.display;

import static android.view.Display.Mode.INVALID_MODE_ID;

import android.hardware.display.DeviceProductInfo;
import android.hardware.display.DisplayViewport;
import android.util.DisplayMetrics;
@@ -274,6 +276,11 @@ final class DisplayDeviceInfo {
     */
    public int defaultModeId;

    /**
     * The mode of the display which is preferred by user.
     */
    public int userPreferredModeId = INVALID_MODE_ID;

    /**
     * The supported modes of the display.
     */
@@ -472,6 +479,7 @@ final class DisplayDeviceInfo {
                || modeId != other.modeId
                || renderFrameRate != other.renderFrameRate
                || defaultModeId != other.defaultModeId
                || userPreferredModeId != other.userPreferredModeId
                || !Arrays.equals(supportedModes, other.supportedModes)
                || !Arrays.equals(supportedColorModes, other.supportedColorModes)
                || !Objects.equals(hdrCapabilities, other.hdrCapabilities)
@@ -517,6 +525,7 @@ final class DisplayDeviceInfo {
        modeId = other.modeId;
        renderFrameRate = other.renderFrameRate;
        defaultModeId = other.defaultModeId;
        userPreferredModeId = other.userPreferredModeId;
        supportedModes = other.supportedModes;
        colorMode = other.colorMode;
        supportedColorModes = other.supportedColorModes;
@@ -559,6 +568,7 @@ final class DisplayDeviceInfo {
        sb.append(", modeId ").append(modeId);
        sb.append(", renderFrameRate ").append(renderFrameRate);
        sb.append(", defaultModeId ").append(defaultModeId);
        sb.append(", userPreferredModeId ").append(userPreferredModeId);
        sb.append(", supportedModes ").append(Arrays.toString(supportedModes));
        sb.append(", colorMode ").append(colorMode);
        sb.append(", supportedColorModes ").append(Arrays.toString(supportedColorModes));
Loading