Merge "sdm: add property for anti-aging testing" into display.lnx.9.0
diff --git a/composer/hwc_session.cpp b/composer/hwc_session.cpp
index 1ca6e11..870c1b5 100644
--- a/composer/hwc_session.cpp
+++ b/composer/hwc_session.cpp
@@ -3720,23 +3720,69 @@
Fence::Wait(retire_fence);
+ SCOPE_LOCK(pluggable_handler_lock_);
+ HWDisplaysInfo hw_displays_info = {};
+ DisplayError error = core_intf_->GetDisplaysStatus(&hw_displays_info);
+ if (error != kErrorNone) {
+ DLOGE("Failed to get connected display list. Error = %d", error);
+ return;
+ }
+
for (hwc2_display_t display = HWC_DISPLAY_PRIMARY + 1;
display < HWCCallbacks::kNumDisplays; display++) {
- if (display != active_builtin_disp_id) {
- Locker::ScopeLock lock_d(locker_[display]);
- if (pending_power_mode_[display] && hwc_display_[display]) {
- HWC2::Error error =
- hwc_display_[display]->SetPowerMode(hwc_display_[display]->GetPendingPowerMode(), false);
- if (HWC2::Error::None == error) {
- pending_power_mode_[display] = false;
- hwc_display_[display]->ClearPendingPowerMode();
- pending_refresh_.set(UINT32(HWC_DISPLAY_PRIMARY));
- } else {
- DLOGE("SetDisplayStatus error = %d (%s)", error, to_string(error).c_str());
+ if (display == active_builtin_disp_id) {
+ continue;
+ }
+
+ Locker::ScopeLock lock_d(locker_[display]);
+ if (!pending_power_mode_[display] || !hwc_display_[display]) {
+ continue;
+ }
+
+ // check if a pluggable display which is in pending power state is already disconnected.
+ // In such cases, avoid powering up the display. It will be disconnected as part of
+ // HandlePendingHotplug.
+ bool disconnected = false;
+ hwc2_display_t client_id;
+ sdm::DisplayType disp_type;
+ for (auto &map_info : map_info_pluggable_) {
+ if (display != map_info.client_id) {
+ continue;
+ }
+
+ for (auto &iter : hw_displays_info) {
+ auto &info = iter.second;
+ if (info.display_id == map_info.sdm_id && !info.is_connected) {
+ disconnected = true;
+ break;
}
}
+ client_id = map_info.client_id;
+ disp_type = map_info.disp_type;
+ break;
+ }
+
+ if (disconnected) {
+ continue;
+ }
+
+ HWC2::PowerMode pending_mode = hwc_display_[display]->GetPendingPowerMode();
+
+ if (pending_mode == HWC2::PowerMode::Off || pending_mode == HWC2::PowerMode::DozeSuspend) {
+ map_active_displays_.erase(display);
+ } else {
+ map_active_displays_.insert(std::make_pair(client_id, disp_type));
+ }
+ HWC2::Error error = hwc_display_[display]->SetPowerMode(pending_mode, false);
+ if (HWC2::Error::None == error) {
+ pending_power_mode_[display] = false;
+ hwc_display_[display]->ClearPendingPowerMode();
+ pending_refresh_.set(UINT32(HWC_DISPLAY_PRIMARY));
+ } else {
+ DLOGE("SetDisplayStatus error = %d (%s)", error, to_string(error).c_str());
}
}
+
secure_session_active_ = false;
}
diff --git a/sdm/libs/core/display_builtin.cpp b/sdm/libs/core/display_builtin.cpp
index 4a16689..2a4bc76 100644
--- a/sdm/libs/core/display_builtin.cpp
+++ b/sdm/libs/core/display_builtin.cpp
@@ -255,6 +255,7 @@
DLOGE("Unable to DeInit DemuraTn on Display %d", display_id_);
}
}
+ demura_dynamic_enabled_ = true;
DeinitCWBBuffer();
}
@@ -960,7 +961,7 @@
}
// Must go in NullCommit
- if (demura_intended_ &&
+ if (demura_intended_ && demura_dynamic_enabled_ &&
comp_manager_->GetDemuraStatusForDisplay(display_id_) && (state == kStateOff)) {
comp_manager_->SetDemuraStatusForDisplay(display_id_, false);
SetDemuraIntfStatus(false);
@@ -988,7 +989,7 @@
}
// Must only happen after NullCommit and get applied in next frame
- if (demura_intended_ &&
+ if (demura_intended_ && demura_dynamic_enabled_ &&
!comp_manager_->GetDemuraStatusForDisplay(display_id_) && (state == kStateOn)) {
comp_manager_->SetDemuraStatusForDisplay(display_id_, true);
SetDemuraIntfStatus(true);
@@ -2980,6 +2981,7 @@
return kErrorUndefined;
}
comp_manager_->SetDemuraStatusForDisplay(display_id_, true);
+ demura_dynamic_enabled_ = true;
} else if (!state && comp_manager_->GetDemuraStatusForDisplay(display_id_)) {
ret = SetDemuraIntfStatus(false);
if (ret) {
@@ -2987,6 +2989,7 @@
return kErrorUndefined;
}
comp_manager_->SetDemuraStatusForDisplay(display_id_, false);
+ demura_dynamic_enabled_ = false;
}
// Disable Partial Update for one frame.
diff --git a/sdm/libs/core/display_builtin.h b/sdm/libs/core/display_builtin.h
index d0bf901..9ca3395 100644
--- a/sdm/libs/core/display_builtin.h
+++ b/sdm/libs/core/display_builtin.h
@@ -297,6 +297,7 @@
std::shared_ptr<DemuraTnCoreUvmIntf> demuratn_ = nullptr;
Layer demura_layer_ = {};
bool demura_intended_ = false;
+ bool demura_dynamic_enabled_ = true;
bool enable_dpps_dyn_fps_ = false;
HWDisplayMode last_panel_mode_ = kModeDefault;
bool hdr_present_ = false;