diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-13 00:20:48 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-13 00:20:48 +0000 |
commit | 5cbd03ab4f8e45cae7c059c638e5c5a2428d2887 (patch) | |
tree | aa0c0b3e8c451c7dfc71f5d92c99702f1d5ce62f | |
parent | 045061ecc844ce3a3d347bd0e7b81d5030bacee0 (diff) | |
parent | ae59bf782af735a45e16b75f4dee43ac173c8808 (diff) | |
download | common-5cbd03ab4f8e45cae7c059c638e5c5a2428d2887.tar.gz |
Snap for 11211173 from ae59bf782af735a45e16b75f4dee43ac173c8808 to 24Q1-release
Change-Id: If2ba2e248098cced1df70bd0f472839a5a8bce93
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | 17 | ||||
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h | 6 |
2 files changed, 15 insertions, 8 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp index b982e05..badaa61 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp @@ -461,9 +461,14 @@ void ExynosDisplayDrmInterface::destroyLayer(ExynosLayer *layer) { } int32_t ExynosDisplayDrmInterface::getDisplayIdleTimerSupport(bool &outSupport) { - if (mIsVrrModeSupported) { + if (isFullVrrSupported()) { outSupport = false; return NO_ERROR; + } else if (isPseudoVrrSupported()) { + // Retuen true to avoid SF idle timer working. We insert frames manually + // for pseudo VRR, so ideally panel idle should be disabled in the driver. + outSupport = true; + return NO_ERROR; } auto [ret, support] = mDrmConnector->panel_idle_support().value(); @@ -1025,8 +1030,7 @@ int32_t ExynosDisplayDrmInterface::getDisplayConfigs( std::lock_guard<std::recursive_mutex> lock(mDrmConnector->modesLock()); if (!outConfigs) { - bool isVrrApiSupported = mExynosDisplay->mDevice->isVrrApiSupported(); - bool useVrrConfigs = mIsVrrModeSupported && isVrrApiSupported; + bool useVrrConfigs = isFullVrrSupported(); int ret = mDrmConnector->UpdateModes(useVrrConfigs); if (ret < 0) { ALOGE("Failed to update display modes %d", ret); @@ -1036,11 +1040,8 @@ int32_t ExynosDisplayDrmInterface::getDisplayConfigs( // no need to update mExynosDisplay->mDisplayConfigs goto no_mode_changes; } - ALOGI("Select Vrr Config for display %s: composer interface compatibility = %s, display " - "hardware " - "Compatibility = %s, use Vrr config = %s", - mExynosDisplay->mDisplayName.c_str(), isVrrApiSupported ? "true" : "false", - mIsVrrModeSupported ? "true" : "false", useVrrConfigs ? "true" : "false"); + ALOGI("Select Vrr Config for display %s: %s", mExynosDisplay->mDisplayName.c_str(), + useVrrConfigs ? "full" : (isPseudoVrrSupported() ? "pseudo" : "non-Vrr")); if (mDrmConnector->state() == DRM_MODE_CONNECTED) { /* diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h index 82d706a..0d28aa7 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h @@ -407,6 +407,12 @@ class ExynosDisplayDrmInterface : int32_t triggerClearDisplayPlanes(); virtual void setVrrSettings(const VrrSettings_t& vrrSettings) override; + bool isFullVrrSupported() const { + return (mIsVrrModeSupported && mExynosDisplay->mDevice->isVrrApiSupported()); + } + bool isPseudoVrrSupported() const { + return (mIsVrrModeSupported && !mExynosDisplay->mDevice->isVrrApiSupported()); + } protected: enum class HalMipiSyncType : uint32_t { |