summaryrefslogtreecommitdiff
path: root/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
diff options
context:
space:
mode:
authorKen Huang <kenbshuang@google.com>2022-05-31 14:47:48 +0800
committerKen Huang <kenbshuang@google.com>2022-06-07 12:37:37 +0000
commit5ed4a469b334a8287ba8fa1b845c465d7dc07cdc (patch)
tree4810142c84106124c3bf723ebdadb545308f8ac9 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
parent0876d4aae686b49c28ec84efe087296abe696533 (diff)
libhwc2.1: correct config state and vsync period
If there is a pending config in AOD mode or change to same config rapidly, the config state will be REQUESTED. It should reset to NONE in those cases. Besides, vsync callback may get incorrect mVsyncPeriod if it refers to mActiveConfig while quickly switching fps. To avoid it, refer to mActiveModeState to update mVsyncPeriod. Bug: 232044740 Test: Suspend/resume, AoD, quickly fps switch Change-Id: Ifc8989256a9b6f6633abc2d4d74124874493c6c0
Diffstat (limited to 'libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp')
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
index 7ee98a7..847c0d4 100644
--- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
+++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
@@ -696,7 +696,7 @@ void ExynosDisplayDrmInterface::Callback(
if (configApplied) {
if (mVsyncCallback.getDesiredVsyncPeriod()) {
- mExynosDisplay->resetConfigRequestStateLocked();
+ mExynosDisplay->resetConfigRequestStateLocked(mActiveModeState.mode.id());
mDrmConnector->set_active_mode(mActiveModeState.mode);
mVsyncCallback.resetDesiredVsyncPeriod();
}
@@ -1064,6 +1064,9 @@ int32_t ExynosDisplayDrmInterface::setActiveConfigWithConstraints(
if ((mActiveModeState.blob_id != 0) &&
(mActiveModeState.mode.id() == config)) {
ALOGD("%s:: same mode %d", __func__, config);
+ /* trigger resetConfigRequestStateLocked() */
+ mVsyncCallback.setDesiredVsyncPeriod(nsecsPerSec / mActiveModeState.mode.v_refresh());
+ mDrmVSyncWorker.VSyncControl(true);
return HWC2_ERROR_NONE;
}