summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kriti Dang <kritidang@google.com> 2021-12-14 12:19:39 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-12-14 12:19:39 +0000
commitff4d15c1e5567dace46710daba9b6dd10bd850fe (patch)
tree7e3cff9d611999fb5a982623d5c7bd95462a8f84
parenta83cfd59d8da062b13b6b23a427b2bce72b3d194 (diff)
parentd8db601962b9c52521907439344e5b410d644b11 (diff)
Merge "Adding display commands for hostSide CTS tests"
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerService.java16
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerShellCommand.java179
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;
+ }
+ }
}