summaryrefslogtreecommitdiff
path: root/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
diff options
context:
space:
mode:
authorMidas Chien <midaschieh@google.com>2022-05-24 01:03:06 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-05-24 01:03:06 +0000
commitc10d7dd53b05af9abdd7623e69a2de786fa3573a (patch)
tree026dbff4b619a6dc259d52fcba62543d9d526fbd /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
parent5baa02484393b8eb295aecd94eb69d7d68b4d35d (diff)
parent358e71d27890b120af01a787ec5f61b85a16d513 (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.cpp60
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);
}