diff options
author | Midas Chien <midaschieh@google.com> | 2022-05-24 01:03:06 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-05-24 01:03:06 +0000 |
commit | c10d7dd53b05af9abdd7623e69a2de786fa3573a (patch) | |
tree | 026dbff4b619a6dc259d52fcba62543d9d526fbd /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | |
parent | 5baa02484393b8eb295aecd94eb69d7d68b4d35d (diff) | |
parent | 358e71d27890b120af01a787ec5f61b85a16d513 (diff) |
Merge "libhwc2.1: add lock for callback functions" into tm-dev am: 358e71d278
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/google/graphics/common/+/18344646
Change-Id: I6086beceeaa42910d48a04de64050deb4a48325d
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 | 60 |
1 files changed, 27 insertions, 33 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp index ab0b057..3ad7dda 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp @@ -690,47 +690,42 @@ int32_t ExynosDisplayDrmInterface::initDrmDevice(DrmDevice *drmDevice) void ExynosDisplayDrmInterface::Callback( int display, int64_t timestamp) { - Mutex::Autolock lock(mExynosDisplay->getDisplayMutex()); - bool configApplied = mVsyncCallback.Callback(display, timestamp); - - if (configApplied) { - if (mVsyncCallback.getDesiredVsyncPeriod()) { - mExynosDisplay->resetConfigRequestStateLocked(); - mDrmConnector->set_active_mode(mActiveModeState.mode); - mVsyncCallback.resetDesiredVsyncPeriod(); - } + { + Mutex::Autolock lock(mExynosDisplay->getDisplayMutex()); + bool configApplied = mVsyncCallback.Callback(display, timestamp); + + if (configApplied) { + if (mVsyncCallback.getDesiredVsyncPeriod()) { + mExynosDisplay->resetConfigRequestStateLocked(); + mDrmConnector->set_active_mode(mActiveModeState.mode); + mVsyncCallback.resetDesiredVsyncPeriod(); + } - /* - * Disable vsync if vsync config change is done - */ - if (!mVsyncCallback.getVSyncEnabled()) { - mDrmVSyncWorker.VSyncControl(false); - mVsyncCallback.resetVsyncTimeStamp(); + /* + * Disable vsync if vsync config change is done + */ + if (!mVsyncCallback.getVSyncEnabled()) { + mDrmVSyncWorker.VSyncControl(false); + mVsyncCallback.resetVsyncTimeStamp(); + } + } else { + mExynosDisplay->updateConfigRequestAppliedTime(); } - } else { - mExynosDisplay->updateConfigRequestAppliedTime(); - } - if (!mExynosDisplay->mPlugState || !mVsyncCallback.getVSyncEnabled()) { - return; + if (!mExynosDisplay->mPlugState || !mVsyncCallback.getVSyncEnabled()) { + return; + } } ExynosDevice *exynosDevice = mExynosDisplay->mDevice; - auto vsync_2_4CallbackInfo = - exynosDevice->mCallbackInfos[HWC2_CALLBACK_VSYNC_2_4]; - if (vsync_2_4CallbackInfo.funcPointer && vsync_2_4CallbackInfo.callbackData) { - ((HWC2_PFN_VSYNC_2_4)vsync_2_4CallbackInfo.funcPointer)( - vsync_2_4CallbackInfo.callbackData, - mExynosDisplay->mDisplayId, - timestamp, mExynosDisplay->mVsyncPeriod); + + if (exynosDevice->onVsync_2_4(mExynosDisplay->mDisplayId, timestamp, + mExynosDisplay->mVsyncPeriod)) { ATRACE_INT(vsyncPeriodTag, static_cast<int32_t>(mExynosDisplay->mVsyncPeriod)); return; } - auto vsyncCallbackInfo = exynosDevice->mCallbackInfos[HWC2_CALLBACK_VSYNC]; - if (vsyncCallbackInfo.funcPointer && vsyncCallbackInfo.callbackData) - ((HWC2_PFN_VSYNC)vsyncCallbackInfo.funcPointer)(vsyncCallbackInfo.callbackData, - mExynosDisplay->mDisplayId, timestamp); + exynosDevice->onVsync(mExynosDisplay->mDisplayId, timestamp); } bool ExynosDisplayDrmInterface::ExynosVsyncCallback::Callback( @@ -826,8 +821,7 @@ int32_t ExynosDisplayDrmInterface::setVsyncEnabled(uint32_t enabled) mVsyncCallback.enableVSync(HWC2_VSYNC_ENABLE == enabled); ExynosDevice *exynosDevice = mExynosDisplay->mDevice; - auto vsync_2_4CallbackInfo = exynosDevice->mCallbackInfos[HWC2_CALLBACK_VSYNC_2_4]; - if (vsync_2_4CallbackInfo.funcPointer && vsync_2_4CallbackInfo.callbackData) { + if (exynosDevice->isCallbackAvailable(HWC2_CALLBACK_VSYNC_2_4)) { ATRACE_INT(vsyncPeriodTag, 0); } |