diff options
author | Joen Chen <joenchen@google.com> | 2022-12-16 04:43:35 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-12-16 04:43:35 +0000 |
commit | 4e4a367df8470c7c2743cd12997f70eba2e4dca7 (patch) | |
tree | 15f26df5f027e4222dcec81eaed3b65cfb8010b5 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | |
parent | 1fb12bba1a2958501511b7511111e38d3a094c1a (diff) | |
parent | beca89949197a06b4ae9c9e7af724973bfc66e77 (diff) |
Merge "libhwc2.1: do not send change resolution commit before 1st frame update" into tm-qpr-dev am: 584bce05da am: beca899491
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/google/graphics/common/+/20641143
Change-Id: Id560be0b1489c6526bc112b983d1fb7c02b606cd
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.cpp | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp index a2c7081..ebf45f5 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp @@ -844,18 +844,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( |