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

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

Merge "Filter external display mode by refresh rate" into main

parents c00165b1 f1a9d77b
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -723,7 +723,9 @@ public class DisplayModeDirector {
            if (mode.getPhysicalWidth() > maxAllowedWidth
            if (mode.getPhysicalWidth() > maxAllowedWidth
                    || mode.getPhysicalHeight() > maxAllowedHeight
                    || mode.getPhysicalHeight() > maxAllowedHeight
                    || mode.getPhysicalWidth() < outSummary.minWidth
                    || mode.getPhysicalWidth() < outSummary.minWidth
                    || mode.getPhysicalHeight() < outSummary.minHeight) {
                    || mode.getPhysicalHeight() < outSummary.minHeight
                    || mode.getRefreshRate() < outSummary.minPhysicalRefreshRate
                    || mode.getRefreshRate() > outSummary.maxPhysicalRefreshRate) {
                continue;
                continue;
            }
            }


+66 −23
Original line number Original line Diff line number Diff line
@@ -102,6 +102,9 @@ import com.android.server.sensors.SensorManagerInternal.ProximityActiveListener;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.testutils.FakeDeviceConfigInterface;
import com.android.server.testutils.FakeDeviceConfigInterface;


import junitparams.JUnitParamsRunner;
import junitparams.Parameters;

import org.junit.Before;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
@@ -121,26 +124,28 @@ import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Collectors;


import junitparams.JUnitParamsRunner;
import junitparams.Parameters;

@SmallTest
@SmallTest
@RunWith(JUnitParamsRunner.class)
@RunWith(JUnitParamsRunner.class)
public class DisplayModeDirectorTest {
public class DisplayModeDirectorTest {
    public static Collection<Object[]> getAppRequestedSizeTestCases() {
    public static Collection<Object[]> getAppRequestedSizeTestCases() {
        var appRequestedSizeTestCases = Arrays.asList(new Object[][] {
        var appRequestedSizeTestCases = Arrays.asList(new Object[][] {
                {DEFAULT_MODE_75.getModeId(), Float.POSITIVE_INFINITY,
                {/*expectedBaseModeId*/ DEFAULT_MODE_75.getModeId(),
                        DEFAULT_MODE_75.getRefreshRate(), Map.of()},
                        /*expectedPhysicalRefreshRate*/ Float.POSITIVE_INFINITY,
                {APP_MODE_HIGH_90.getModeId(), Float.POSITIVE_INFINITY,
                        /*expectedAppRequestedRefreshRate*/ DEFAULT_MODE_75.getRefreshRate(),
                        APP_MODE_HIGH_90.getRefreshRate(),
                        /*votesWithPriorities*/ Map.of()},
                        Map.of(
                {/*expectedBaseModeId*/ APP_MODE_HIGH_90.getModeId(),
                        /*expectedPhysicalRefreshRate*/ Float.POSITIVE_INFINITY,
                        /*expectedAppRequestedRefreshRate*/ APP_MODE_HIGH_90.getRefreshRate(),
                        /*votesWithPriorities*/ Map.of(
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.forSize(APP_MODE_HIGH_90.getPhysicalWidth(),
                                Vote.forSize(APP_MODE_HIGH_90.getPhysicalWidth(),
                                        APP_MODE_HIGH_90.getPhysicalHeight()),
                                        APP_MODE_HIGH_90.getPhysicalHeight()),
                                Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE,
                                Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE,
                                Vote.forBaseModeRefreshRate(APP_MODE_HIGH_90.getRefreshRate()))},
                                Vote.forBaseModeRefreshRate(APP_MODE_HIGH_90.getRefreshRate()))},
                {LIMIT_MODE_70.getModeId(), Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY,
                {/*expectedBaseModeId*/ LIMIT_MODE_70.getModeId(),
                        Map.of(
                        /*expectedPhysicalRefreshRate*/ Float.POSITIVE_INFINITY,
                        /*expectedAppRequestedRefreshRate*/ Float.POSITIVE_INFINITY,
                        /*votesWithPriorities*/ Map.of(
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.forSize(APP_MODE_HIGH_90.getPhysicalWidth(),
                                Vote.forSize(APP_MODE_HIGH_90.getPhysicalWidth(),
                                        APP_MODE_HIGH_90.getPhysicalHeight()),
                                        APP_MODE_HIGH_90.getPhysicalHeight()),
@@ -149,9 +154,10 @@ public class DisplayModeDirectorTest {
                                Vote.PRIORITY_LOW_POWER_MODE,
                                Vote.PRIORITY_LOW_POWER_MODE,
                                Vote.forSize(LIMIT_MODE_70.getPhysicalWidth(),
                                Vote.forSize(LIMIT_MODE_70.getPhysicalWidth(),
                                        LIMIT_MODE_70.getPhysicalHeight()))},
                                        LIMIT_MODE_70.getPhysicalHeight()))},
                {LIMIT_MODE_70.getModeId(), LIMIT_MODE_70.getRefreshRate(),
                {/*expectedBaseModeId*/ LIMIT_MODE_70.getModeId(),
                        LIMIT_MODE_70.getRefreshRate(),
                        /*expectedPhysicalRefreshRate*/ LIMIT_MODE_70.getRefreshRate(),
                        Map.of(
                        /*expectedAppRequestedRefreshRate*/ LIMIT_MODE_70.getRefreshRate(),
                        /*votesWithPriorities*/ Map.of(
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.forSize(APP_MODE_65.getPhysicalWidth(),
                                Vote.forSize(APP_MODE_65.getPhysicalWidth(),
                                        APP_MODE_65.getPhysicalHeight()),
                                        APP_MODE_65.getPhysicalHeight()),
@@ -160,9 +166,10 @@ public class DisplayModeDirectorTest {
                                Vote.PRIORITY_LOW_POWER_MODE,
                                Vote.PRIORITY_LOW_POWER_MODE,
                                Vote.forSize(LIMIT_MODE_70.getPhysicalWidth(),
                                Vote.forSize(LIMIT_MODE_70.getPhysicalWidth(),
                                        LIMIT_MODE_70.getPhysicalHeight()))},
                                        LIMIT_MODE_70.getPhysicalHeight()))},
                {LIMIT_MODE_70.getModeId(), LIMIT_MODE_70.getRefreshRate(),
                {/*expectedBaseModeId*/ LIMIT_MODE_70.getModeId(),
                        LIMIT_MODE_70.getRefreshRate(),
                        /*expectedPhysicalRefreshRate*/ LIMIT_MODE_70.getRefreshRate(),
                        Map.of(
                        /*expectedAppRequestedRefreshRate*/ LIMIT_MODE_70.getRefreshRate(),
                        /*votesWithPriorities*/ Map.of(
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.forSize(APP_MODE_65.getPhysicalWidth(),
                                Vote.forSize(APP_MODE_65.getPhysicalWidth(),
                                        APP_MODE_65.getPhysicalHeight()),
                                        APP_MODE_65.getPhysicalHeight()),
@@ -173,10 +180,12 @@ public class DisplayModeDirectorTest {
                                    0, 0,
                                    0, 0,
                                    LIMIT_MODE_70.getPhysicalWidth(),
                                    LIMIT_MODE_70.getPhysicalWidth(),
                                    LIMIT_MODE_70.getPhysicalHeight(),
                                    LIMIT_MODE_70.getPhysicalHeight(),
                                    0, Float.POSITIVE_INFINITY)), false},
                                    0, Float.POSITIVE_INFINITY)),
                {APP_MODE_65.getModeId(), APP_MODE_65.getRefreshRate(),
                        /*displayResolutionRangeVotingEnabled*/ false},
                        APP_MODE_65.getRefreshRate(),
                {/*expectedBaseModeId*/ APP_MODE_65.getModeId(),
                        Map.of(
                        /*expectedPhysicalRefreshRate*/ APP_MODE_65.getRefreshRate(),
                        /*expectedAppRequestedRefreshRate*/ APP_MODE_65.getRefreshRate(),
                        /*votesWithPriorities*/ Map.of(
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.forSize(APP_MODE_65.getPhysicalWidth(),
                                Vote.forSize(APP_MODE_65.getPhysicalWidth(),
                                        APP_MODE_65.getPhysicalHeight()),
                                        APP_MODE_65.getPhysicalHeight()),
@@ -187,7 +196,40 @@ public class DisplayModeDirectorTest {
                                    0, 0,
                                    0, 0,
                                    LIMIT_MODE_70.getPhysicalWidth(),
                                    LIMIT_MODE_70.getPhysicalWidth(),
                                    LIMIT_MODE_70.getPhysicalHeight(),
                                    LIMIT_MODE_70.getPhysicalHeight(),
                                    0, Float.POSITIVE_INFINITY)), true}});
                                    0, Float.POSITIVE_INFINITY)),
                        /*displayResolutionRangeVotingEnabled*/ true},
                {/*expectedBaseModeId*/ DEFAULT_MODE_75.getModeId(),
                        /*expectedPhysicalRefreshRate*/ APP_MODE_65.getRefreshRate(),
                        /*expectedAppRequestedRefreshRate*/ APP_MODE_HIGH_90.getRefreshRate(),
                        /*votesWithPriorities*/ Map.of(
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.forSize(APP_MODE_HIGH_90.getPhysicalWidth(),
                                        APP_MODE_HIGH_90.getPhysicalHeight()),
                                Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE,
                                Vote.forBaseModeRefreshRate(APP_MODE_HIGH_90.getRefreshRate()),
                                Vote.PRIORITY_LOW_POWER_MODE,
                                Vote.forSizeAndPhysicalRefreshRatesRange(
                                    0, 0,
                                    LIMIT_MODE_70.getPhysicalWidth(),
                                    LIMIT_MODE_70.getPhysicalHeight(),
                                    0, APP_MODE_65.getRefreshRate())),
                        /*displayResolutionRangeVotingEnabled*/ false},
                {/*expectedBaseModeId*/ DEFAULT_MODE_60.getModeId(), // Resolution == APP_MODE_65
                        /*expectedPhysicalRefreshRate*/ APP_MODE_65.getRefreshRate(),
                        /*expectedAppRequestedRefreshRate*/ APP_MODE_65.getRefreshRate(),
                        /*votesWithPriorities*/ Map.of(
                                Vote.PRIORITY_APP_REQUEST_SIZE,
                                Vote.forSize(APP_MODE_HIGH_90.getPhysicalWidth(),
                                        APP_MODE_HIGH_90.getPhysicalHeight()),
                                Vote.PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE,
                                Vote.forBaseModeRefreshRate(APP_MODE_HIGH_90.getRefreshRate()),
                                Vote.PRIORITY_LOW_POWER_MODE,
                                Vote.forSizeAndPhysicalRefreshRatesRange(
                                    0, 0,
                                    LIMIT_MODE_70.getPhysicalWidth(),
                                    LIMIT_MODE_70.getPhysicalHeight(),
                                    0, APP_MODE_65.getRefreshRate())),
                        /*displayResolutionRangeVotingEnabled*/ true}});


        final var res = new ArrayList<Object[]>(appRequestedSizeTestCases.size() * 2);
        final var res = new ArrayList<Object[]>(appRequestedSizeTestCases.size() * 2);


@@ -218,6 +260,8 @@ public class DisplayModeDirectorTest {
    private static final boolean DEBUG = false;
    private static final boolean DEBUG = false;
    private static final float FLOAT_TOLERANCE = 0.01f;
    private static final float FLOAT_TOLERANCE = 0.01f;


    private static final Display.Mode DEFAULT_MODE_60 = new Display.Mode(
            /*modeId=*/60, /*width=*/1900, /*height=*/1900, 60);
    private static final Display.Mode APP_MODE_65 = new Display.Mode(
    private static final Display.Mode APP_MODE_65 = new Display.Mode(
            /*modeId=*/65, /*width=*/1900, /*height=*/1900, 65);
            /*modeId=*/65, /*width=*/1900, /*height=*/1900, 65);
    private static final Display.Mode LIMIT_MODE_70 = new Display.Mode(
    private static final Display.Mode LIMIT_MODE_70 = new Display.Mode(
@@ -227,8 +271,7 @@ public class DisplayModeDirectorTest {
    private static final Display.Mode APP_MODE_HIGH_90 = new Display.Mode(
    private static final Display.Mode APP_MODE_HIGH_90 = new Display.Mode(
            /*modeId=*/90, /*width=*/3000, /*height=*/3000, 90);
            /*modeId=*/90, /*width=*/3000, /*height=*/3000, 90);
    private static final Display.Mode[] TEST_MODES = new Display.Mode[] {
    private static final Display.Mode[] TEST_MODES = new Display.Mode[] {
        new Display.Mode(
        DEFAULT_MODE_60,
            /*modeId=*/60, /*width=*/1900, /*height=*/1900, 60),
        APP_MODE_65,
        APP_MODE_65,
        LIMIT_MODE_70,
        LIMIT_MODE_70,
        DEFAULT_MODE_75,
        DEFAULT_MODE_75,