summaryrefslogtreecommitdiff
path: root/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp')
-rw-r--r--libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp26
1 files changed, 9 insertions, 17 deletions
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp
index 8320553..6398f11 100644
--- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp
+++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp
@@ -164,7 +164,7 @@ int ExynosPrimaryDisplay::getDDIScalerMode(int width, int height) {
int32_t ExynosPrimaryDisplay::doDisplayConfigInternal(hwc2_config_t config) {
if (!mPowerModeState.has_value() || (*mPowerModeState != HWC2_POWER_MODE_ON)) {
mPendActiveConfig = config;
- mConfigRequestState = hwc_request_state_t::SET_CONFIG_STATE_NONE;
+ mConfigRequestState = hwc_request_state_t::SET_CONFIG_STATE_DONE;
DISPLAY_LOGI("%s:: Pending desired Config: %d", __func__, config);
return NO_ERROR;
}
@@ -533,22 +533,14 @@ int32_t ExynosPrimaryDisplay::setLhbmState(bool enabled) {
if (enabled) {
ATRACE_NAME("wait for peak refresh rate");
- for (int32_t i = 0; i <= kLhbmWaitForPeakRefreshRate; i++) {
- if (!isCurrentPeakRefreshRate()) {
- if (i == kLhbmWaitForPeakRefreshRate) {
- ALOGW("setLhbmState(on) wait for peak refresh rate timeout !");
- return TIMED_OUT;
- }
-
- ATRACE_NAME("wait for one vblank");
- if (mDisplayInterface->waitVBlank()) {
- ALOGE("%s failed to wait vblank for peak refresh rate, %d", __func__, i);
- return -ENODEV;
- }
- } else {
- ALOGI_IF(i, "waited %d vblank to reach peak refresh rate", i);
- break;
- }
+ std::unique_lock<std::mutex> lock(mPeakRefreshRateMutex);
+ mNotifyPeakRefreshRate = true;
+ if (!mPeakRefreshRateCondition.wait_for(lock,
+ std::chrono::milliseconds(
+ kLhbmWaitForPeakRefreshRateMs),
+ [this]() { return isCurrentPeakRefreshRate(); })) {
+ ALOGW("setLhbmState(on) wait for peak refresh rate timeout !");
+ return TIMED_OUT;
}
}