diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-05-10 23:25:40 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-05-10 23:25:40 +0000 |
commit | ee153fc46f3e526c0a2919016067663a72c7d7bf (patch) | |
tree | 50e16d945763d0179f547a97e17e095907c77c8f | |
parent | f9c5a4fa43c2b7fb04fff9e7ff8270099388cbe1 (diff) | |
parent | 25001f3ea723c503414ba6cb8dcc8461a04fb6c2 (diff) |
Snap for 10106040 from 25001f3ea723c503414ba6cb8dcc8461a04fb6c2 to udc-release
Change-Id: Icd009adfbe60576d07427037c723ed8209fe1bfa
-rw-r--r-- | libhwc2.1/libdevice/ExynosDevice.cpp | 11 | ||||
-rw-r--r-- | libhwc2.1/libdevice/ExynosDevice.h | 1 | ||||
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | 3 |
3 files changed, 14 insertions, 1 deletions
diff --git a/libhwc2.1/libdevice/ExynosDevice.cpp b/libhwc2.1/libdevice/ExynosDevice.cpp index 97d7a15..99fbc1a 100644 --- a/libhwc2.1/libdevice/ExynosDevice.cpp +++ b/libhwc2.1/libdevice/ExynosDevice.cpp @@ -276,6 +276,17 @@ bool ExynosDevice::isLastValidate(ExynosDisplay *display) return true; } +bool ExynosDevice::hasOtherDisplayOn(ExynosDisplay *display) { + for (uint32_t i = 0; i < mDisplays.size(); i++) { + if (mDisplays[i] == display) continue; + if ((mDisplays[i]->mType != HWC_DISPLAY_VIRTUAL) && + mDisplays[i]->mPowerModeState.has_value() && + (mDisplays[i]->mPowerModeState.value() != (hwc2_power_mode_t)HWC_POWER_MODE_OFF)) + return true; + } + return false; +} + bool ExynosDevice::isDynamicRecompositionThreadAlive() { android_atomic_acquire_load(&mDRThreadStatus); diff --git a/libhwc2.1/libdevice/ExynosDevice.h b/libhwc2.1/libdevice/ExynosDevice.h index 3569643..35eb947 100644 --- a/libhwc2.1/libdevice/ExynosDevice.h +++ b/libhwc2.1/libdevice/ExynosDevice.h @@ -341,6 +341,7 @@ class ExynosDevice { hwc2_function_pointer_t point); void onVsyncIdle(hwc2_display_t displayId); bool isDispOffAsyncSupported() { return mDisplayOffAsync; }; + bool hasOtherDisplayOn(ExynosDisplay *display); virtual int32_t getOverlaySupport([[maybe_unused]] OverlayProperties* caps){ return HWC2_ERROR_UNSUPPORTED; } diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp index 375153b..267b4b9 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp @@ -2025,7 +2025,8 @@ int32_t ExynosDisplayDrmInterface::clearDisplayPlanes(DrmModeAtomicReq &drmReq) int32_t ExynosDisplayDrmInterface::clearDisplay(bool needModeClear) { ExynosDevice *exynosDevice = mExynosDisplay->mDevice; - const bool isAsyncOff = needModeClear && exynosDevice->isDispOffAsyncSupported(); + const bool isAsyncOff = needModeClear && exynosDevice->isDispOffAsyncSupported() && + !exynosDevice->hasOtherDisplayOn(mExynosDisplay); int ret = NO_ERROR; DrmModeAtomicReq drmReq(this); |