Merge "Adding display commands for hostSide CTS tests"

This commit is contained in:
Kriti Dang
2021-12-14 12:19:39 +00:00
committed by Android (Google) Code Review
2 changed files with 195 additions and 0 deletions

View File

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

View File

@@ -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;
}
}
}