diff options
| author | 2021-12-14 12:19:39 +0000 | |
|---|---|---|
| committer | 2021-12-14 12:19:39 +0000 | |
| commit | ff4d15c1e5567dace46710daba9b6dd10bd850fe (patch) | |
| tree | 7e3cff9d611999fb5a982623d5c7bd95462a8f84 | |
| parent | a83cfd59d8da062b13b6b23a427b2bce72b3d194 (diff) | |
| parent | d8db601962b9c52521907439344e5b410d644b11 (diff) | |
Merge "Adding display commands for hostSide CTS tests"
| -rw-r--r-- | services/core/java/com/android/server/display/DisplayManagerService.java | 16 | ||||
| -rw-r--r-- | services/core/java/com/android/server/display/DisplayManagerShellCommand.java | 179 |
2 files changed, 195 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index 3f55848e26a8..4c569996817d 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -1072,6 +1072,13 @@ public final class DisplayManagerService extends SystemService { + "setUserDisabledHdrTypesInternal"); return; } + + // Verify if userDisabledHdrTypes contains expected HDR types + if (!isSubsetOf(Display.HdrCapabilities.HDR_TYPES, userDisabledHdrTypes)) { + Slog.e(TAG, "userDisabledHdrTypes contains unexpected types"); + return; + } + Arrays.sort(userDisabledHdrTypes); if (Arrays.equals(mUserDisabledHdrTypes, userDisabledHdrTypes)) { return; @@ -1094,6 +1101,15 @@ public final class DisplayManagerService extends SystemService { } } + private boolean isSubsetOf(int[] sortedSuperset, int[] subset) { + for (int i : subset) { + if (Arrays.binarySearch(sortedSuperset, i) < 0) { + return false; + } + } + return true; + } + private void setAreUserDisabledHdrTypesAllowedInternal( boolean areUserDisabledHdrTypesAllowed) { synchronized (mSyncRoot) { diff --git a/services/core/java/com/android/server/display/DisplayManagerShellCommand.java b/services/core/java/com/android/server/display/DisplayManagerShellCommand.java index 9412c938f934..43a850c5d626 100644 --- a/services/core/java/com/android/server/display/DisplayManagerShellCommand.java +++ b/services/core/java/com/android/server/display/DisplayManagerShellCommand.java @@ -20,9 +20,11 @@ import android.content.Context; import android.content.Intent; import android.hardware.display.DisplayManager; import android.os.ShellCommand; +import android.util.Slog; import android.view.Display; import java.io.PrintWriter; +import java.util.Arrays; class DisplayManagerShellCommand extends ShellCommand { private static final String TAG = "DisplayManagerShellCommand"; @@ -60,6 +62,20 @@ class DisplayManagerShellCommand extends ShellCommand { return setAmbientColorTemperatureOverride(); case "constrain-launcher-metrics": return setConstrainLauncherMetrics(); + case "set-user-preferred-display-mode": + return setUserPreferredDisplayMode(); + case "clear-user-preferred-display-mode": + return clearUserPreferredDisplayMode(); + case "get-user-preferred-display-mode": + return getUserPreferredDisplayMode(); + case "set-match-content-frame-rate-pref": + return setMatchContentFrameRateUserPreference(); + case "get-match-content-frame-rate-pref": + return getMatchContentFrameRateUserPreference(); + case "set-user-disabled-hdr-types": + return setUserDisabledHdrTypes(); + case "get-user-disabled-hdr-types": + return getUserDisabledHdrTypes(); default: return handleDefaultCommands(cmd); } @@ -93,6 +109,21 @@ class DisplayManagerShellCommand extends ShellCommand { pw.println(" constrain-launcher-metrics [true|false]"); pw.println(" Sets if Display#getRealSize and getRealMetrics should be constrained for "); pw.println(" Launcher."); + pw.println(" set-user-preferred-display-mode WIDTH HEIGHT REFRESH-RATE"); + pw.println(" Sets the user preferred display mode which has fields WIDTH, HEIGHT and " + + "REFRESH-RATE"); + pw.println(" clear-user-preferred-display-mode"); + pw.println(" Clears the user preferred display mode"); + pw.println(" get-user-preferred-display-mode"); + pw.println(" Returns the user preferred display mode or null id no mode is set by user"); + pw.println(" set-match-content-frame-rate-pref PREFERENCE"); + pw.println(" Sets the match content frame rate preference as PREFERENCE "); + pw.println(" get-match-content-frame-rate-pref"); + pw.println(" Returns the match content frame rate preference"); + pw.println(" set-user-disabled-hdr-types TYPES..."); + pw.println(" Sets the user disabled HDR types as TYPES"); + pw.println(" get-user-disabled-hdr-types"); + pw.println(" Returns the user disabled HDR types"); pw.println(); Intent.printIntentArgsHelp(pw , ""); } @@ -166,4 +197,152 @@ class DisplayManagerShellCommand extends ShellCommand { mService.setShouldConstrainMetricsForLauncher(constrain); return 0; } + + private int setUserPreferredDisplayMode() { + final String widthText = getNextArg(); + if (widthText == null) { + getErrPrintWriter().println("Error: no width specified"); + return 1; + } + + final String heightText = getNextArg(); + if (heightText == null) { + getErrPrintWriter().println("Error: no height specified"); + return 1; + } + + final String refreshRateText = getNextArg(); + if (refreshRateText == null) { + getErrPrintWriter().println("Error: no refresh-rate specified"); + return 1; + } + + final int width, height; + final float refreshRate; + try { + width = Integer.parseInt(widthText); + height = Integer.parseInt(heightText); + refreshRate = Float.parseFloat(refreshRateText); + } catch (NumberFormatException e) { + getErrPrintWriter().println("Error: invalid format of width, height or refresh rate"); + return 1; + } + if (width < 0 || height < 0 || refreshRate <= 0.0f) { + getErrPrintWriter().println("Error: invalid value of width, height or refresh rate"); + return 1; + } + + final Context context = mService.getContext(); + final DisplayManager dm = context.getSystemService(DisplayManager.class); + dm.setUserPreferredDisplayMode(new Display.Mode(width, height, refreshRate)); + return 0; + } + + private int clearUserPreferredDisplayMode() { + final Context context = mService.getContext(); + final DisplayManager dm = context.getSystemService(DisplayManager.class); + dm.clearUserPreferredDisplayMode(); + return 0; + } + + private int getUserPreferredDisplayMode() { + final Context context = mService.getContext(); + final DisplayManager dm = context.getSystemService(DisplayManager.class); + final Display.Mode mode = dm.getUserPreferredDisplayMode(); + if (mode == null) { + getOutPrintWriter().println("User preferred display mode: null"); + return 0; + } + + getOutPrintWriter().println("User preferred display mode: " + mode.getPhysicalWidth() + " " + + mode.getPhysicalHeight() + " " + mode.getRefreshRate()); + return 0; + } + + private int setMatchContentFrameRateUserPreference() { + final String matchContentFrameRatePrefText = getNextArg(); + if (matchContentFrameRatePrefText == null) { + getErrPrintWriter().println("Error: no matchContentFrameRatePref specified"); + return 1; + } + + final int matchContentFrameRatePreference; + try { + matchContentFrameRatePreference = Integer.parseInt(matchContentFrameRatePrefText); + } catch (NumberFormatException e) { + getErrPrintWriter().println("Error: invalid format of matchContentFrameRatePreference"); + return 1; + } + if (matchContentFrameRatePreference < 0) { + getErrPrintWriter().println("Error: invalid value of matchContentFrameRatePreference"); + return 1; + } + + final Context context = mService.getContext(); + final DisplayManager dm = context.getSystemService(DisplayManager.class); + + final int refreshRateSwitchingType = + toRefreshRateSwitchingType(matchContentFrameRatePreference); + dm.setRefreshRateSwitchingType(refreshRateSwitchingType); + return 0; + } + + private int getMatchContentFrameRateUserPreference() { + final Context context = mService.getContext(); + final DisplayManager dm = context.getSystemService(DisplayManager.class); + getOutPrintWriter().println("Match content frame rate type: " + + dm.getMatchContentFrameRateUserPreference()); + return 0; + } + + private int setUserDisabledHdrTypes() { + final String[] userDisabledHdrTypesText = getAllArgs(); + if (userDisabledHdrTypesText == null) { + getErrPrintWriter().println("Error: no userDisabledHdrTypes specified"); + return 1; + } + + int[] userDisabledHdrTypes = new int[userDisabledHdrTypesText.length]; + try { + int index = 0; + for (String userDisabledHdrType : userDisabledHdrTypesText) { + userDisabledHdrTypes[index++] = Integer.parseInt(userDisabledHdrType); + } + } catch (NumberFormatException e) { + getErrPrintWriter().println("Error: invalid format of userDisabledHdrTypes"); + return 1; + } + + final Context context = mService.getContext(); + final DisplayManager dm = context.getSystemService(DisplayManager.class); + dm.setUserDisabledHdrTypes(userDisabledHdrTypes); + return 0; + } + + private int getUserDisabledHdrTypes() { + final Context context = mService.getContext(); + final DisplayManager dm = context.getSystemService(DisplayManager.class); + final int[] userDisabledHdrTypes = dm.getUserDisabledHdrTypes(); + getOutPrintWriter().println("User disabled HDR types: " + + Arrays.toString(userDisabledHdrTypes)); + return 0; + } + + @DisplayManager.SwitchingType + private int toRefreshRateSwitchingType( + @DisplayManager.MatchContentFrameRateType int matchContentFrameRateType) { + switch (matchContentFrameRateType) { + case DisplayManager.MATCH_CONTENT_FRAMERATE_NEVER: + return DisplayManager.SWITCHING_TYPE_NONE; + case DisplayManager.MATCH_CONTENT_FRAMERATE_SEAMLESSS_ONLY: + return DisplayManager.SWITCHING_TYPE_WITHIN_GROUPS; + case DisplayManager.MATCH_CONTENT_FRAMERATE_ALWAYS: + return DisplayManager.SWITCHING_TYPE_ACROSS_AND_WITHIN_GROUPS; + case DisplayManager.MATCH_CONTENT_FRAMERATE_UNKNOWN: + default: + Slog.e(TAG, matchContentFrameRateType + " is not a valid value of " + + "matchContentFrameRate type."); + return -1; + } + } } |