composer: Resume non target displays incase of TUI failure
Change-Id: Ifb6f2b13c69c6ae9a2fc10ec96fadd9489c82528
CRs-Fixed: 3334553
diff --git a/composer/hwc_session.cpp b/composer/hwc_session.cpp
index 0edb1d6..a12e47e 100644
--- a/composer/hwc_session.cpp
+++ b/composer/hwc_session.cpp
@@ -4254,19 +4254,20 @@
int HWCSession::WaitForCommitDoneAsync(hwc2_display_t display, int client_id) {
std::chrono::milliseconds span(2000);
- if (commit_done_future_.valid()) {
- std::future_status status = commit_done_future_.wait_for(std::chrono::milliseconds(0));
+ if (commit_done_future_[display].valid()) {
+ std::future_status status = commit_done_future_[display].wait_for(std::chrono::milliseconds(0));
if (status != std::future_status::ready) {
// Previous task is stuck. Bail out early.
return -ETIMEDOUT;
}
}
- commit_done_future_ = std::async([](HWCSession* session, hwc2_display_t display, int client_id) {
+ commit_done_future_[display] = std::async([](HWCSession* session, hwc2_display_t display,
+ int client_id) {
return session->WaitForCommitDone(display, client_id);
}, this, display, client_id);
- auto ret = (commit_done_future_.wait_for(span) == std::future_status::timeout) ?
- -EINVAL : commit_done_future_.get();
+ auto ret = (commit_done_future_[display].wait_for(span) == std::future_status::timeout) ?
+ -EINVAL : commit_done_future_[display].get();
return ret;
}
@@ -4493,7 +4494,10 @@
DLOGI("Waiting for device unassign");
int ret = WaitForCommitDoneAsync(target_display, kClientTrustedUI);
if (ret != 0) {
- DLOGE("Device unassign failed with error %d", ret);
+ if (ret != -ETIMEDOUT) {
+ DLOGE("Device unassign failed with error %d", ret);
+ }
+ TUITransitionUnPrepare(disp_id);
return -EINVAL;
}
}
diff --git a/composer/hwc_session.h b/composer/hwc_session.h
index 658ef21..bf38734 100644
--- a/composer/hwc_session.h
+++ b/composer/hwc_session.h
@@ -728,7 +728,7 @@
Locker primary_display_lock_;
std::map <hwc2_display_t, sdm::DisplayType> map_active_displays_;
vector<HWDisplayInfo> virtual_display_list_ = {};
- std::future<int> commit_done_future_;
+ std::map <hwc2_display_t, std::future<int>> commit_done_future_;
};
} // namespace sdm