summaryrefslogtreecommitdiff
path: root/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
diff options
context:
space:
mode:
authorJoen Chen <joenchen@google.com>2022-12-16 04:00:49 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-12-16 04:00:49 +0000
commitbeca89949197a06b4ae9c9e7af724973bfc66e77 (patch)
tree7713feb6f6eafaa440d78fc5d3328f950d101346 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
parent633a1b48f71655c7f7b63eda43eb070d835e787f (diff)
parent584bce05dad5c4cc47d8cd8e214f979a58097990 (diff)
Merge "libhwc2.1: do not send change resolution commit before 1st frame update" into tm-qpr-dev am: 584bce05da
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/google/graphics/common/+/20641143 Change-Id: Ib6067dfa07e03a00c322efd0e43aad9c7a23aaa1 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp')
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
index 62e6f16..994027a 100644
--- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
+++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
@@ -842,18 +842,31 @@ int32_t ExynosDisplayDrmInterface::chosePreferredConfig()
err = HWC2_ERROR_BAD_CONFIG;
}
+ const int32_t drmPreferredConfig = mDrmConnector->get_preferred_mode_id();
if (err != HWC2_ERROR_NONE) {
- config = mDrmConnector->get_preferred_mode_id();
+ config = drmPreferredConfig;
}
ALOGI("Preferred mode id: %d(%s), state: %d", config, modeStr, mDrmConnector->state());
- if ((err = setActiveConfig(config)) < 0) {
- ALOGE("failed to set default config, err %d", err);
- return err;
+ auto &configs = mExynosDisplay->mDisplayConfigs;
+ if (config != drmPreferredConfig &&
+ (configs[config].width != configs[drmPreferredConfig].width ||
+ configs[config].height != configs[drmPreferredConfig].height)) {
+ // HWC cannot send a resolution change commit here until 1st frame update because of
+ // some panels requirement. Therefore, it calls setActiveConfigWithConstraints() help
+ // set mDesiredModeState correctly, and then trigger modeset in the 1s frame update.
+ if ((err = setActiveConfigWithConstraints(config)) < 0) {
+ ALOGE("failed to setActiveConfigWithConstraints(), err %d", err);
+ return err;
+ }
+ } else {
+ if ((err = setActiveConfig(config)) < 0) {
+ ALOGE("failed to set default config, err %d", err);
+ return err;
+ }
}
- mExynosDisplay->updateInternalDisplayConfigVariables(config);
- return err;
+ return mExynosDisplay->updateInternalDisplayConfigVariables(config);
}
int32_t ExynosDisplayDrmInterface::getDisplayConfigs(