From 622b3a38dc1f73696c9d1544ddb3c7004df554ac Mon Sep 17 00:00:00 2001 From: Kriti Dang Date: Thu, 17 Feb 2022 11:51:05 +0100 Subject: Propagate user preferred mode to SurfaceControl, only if it has changed. Bug: 219968277 Test: atest LocalDisplayAdapterTest Change-Id: I3ad062be7c53c88f7312de12677fda39433ecb77 --- .../android/server/display/DisplayManagerService.java | 2 +- .../android/server/display/LocalDisplayAdapter.java | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index f50011020694..11d30d3236db 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -2463,7 +2463,7 @@ public final class DisplayManagerService extends SystemService { pw.println(" mMinimumBrightnessCurve=" + mMinimumBrightnessCurve); if (mUserPreferredMode != null) { - pw.println(mUserPreferredMode); + pw.println(" mUserPreferredMode=" + mUserPreferredMode); } pw.println(); diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index d233c5ee2ffc..789d92e62dda 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -871,20 +871,26 @@ final class LocalDisplayAdapter extends DisplayAdapter { public void setUserPreferredDisplayModeLocked(Display.Mode mode) { final int oldModeId = getPreferredModeId(); mUserPreferredMode = mode; - if (mode != null && (mode.isRefreshRateSet() ^ mode.isResolutionSet())) { - mUserPreferredMode = findMode(mode.getPhysicalWidth(), + if (mode != null && (mode.isRefreshRateSet() || mode.isResolutionSet())) { + Display.Mode matchingSupportedMode; + matchingSupportedMode = findMode(mode.getPhysicalWidth(), mode.getPhysicalHeight(), mode.getRefreshRate()); + if (matchingSupportedMode != null) { + mUserPreferredMode = matchingSupportedMode; + } } - mUserPreferredModeId = findUserPreferredModeIdLocked(mode); - if (oldModeId != getPreferredModeId()) { - updateDeviceInfoLocked(); + mUserPreferredModeId = findUserPreferredModeIdLocked(mUserPreferredMode); + + if (oldModeId == getPreferredModeId()) { + return; } + updateDeviceInfoLocked(); if (!mSurfaceControlProxy.getBootDisplayModeSupport()) { return; } - if (mUserPreferredMode == null) { + if (mUserPreferredModeId == INVALID_MODE_ID) { mSurfaceControlProxy.clearBootDisplayMode(getDisplayTokenLocked()); } else { mSurfaceControlProxy.setBootDisplayMode(getDisplayTokenLocked(), -- cgit v1.2.3-59-g8ed1b