diff options
author | qctecmdr <qctecmdr@localhost> | 2022-07-31 06:15:18 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2022-07-31 06:15:18 -0700 |
commit | 14a22c006cda71d43982448183c36c1c6ac7b6d8 (patch) | |
tree | 74c5f82a5a471e8d487ac6c2b830f4711c5d92a7 | |
parent | b56ff22e22de5d6c586b3b0649d733246918ced4 (diff) | |
parent | 4c82d628a70a44740269d10a7989bb55547843fc (diff) |
Merge "composer: use shared pointer for QueueNode"
-rw-r--r-- | composer/hwc_session.h | 15 | ||||
-rw-r--r-- | composer/hwc_session_services.cpp | 14 |
2 files changed, 17 insertions, 12 deletions
diff --git a/composer/hwc_session.h b/composer/hwc_session.h index 6e9a566c..c3a77641 100644 --- a/composer/hwc_session.h +++ b/composer/hwc_session.h @@ -409,6 +409,15 @@ class HWCSession : hwc2_device_t, HWCUEventListener, public qClient::BnQClient, const hidl_handle &buf, hwc2_display_t disp_type) : callback(cb), cwb_config(cwb_conf), buffer(buf), display_type(disp_type) {} + ~QueueNode() { + if (!buffer) { + return; + } + + native_handle_close(buffer); + native_handle_delete(const_cast<native_handle_t *>(buffer)); + } + std::weak_ptr<DisplayConfig::ConfigCallback> callback; CwbConfig cwb_config = {}; const native_handle_t *buffer; @@ -419,10 +428,10 @@ class HWCSession : hwc2_device_t, HWCUEventListener, public qClient::BnQClient, void PerformFenceWaits(); static void AsyncTask(CWB *cwb); static void AsyncFenceWaits(CWB *cwb); - void NotifyCWBStatus(int status, QueueNode *cwb_node); + void NotifyCWBStatus(int status, shared_ptr<QueueNode> cwb_node); - std::queue<QueueNode *> queue_; - std::queue<pair<shared_ptr<Fence>, QueueNode *>> fence_wait_queue_; + std::queue<shared_ptr<QueueNode>> queue_; + std::queue<pair<shared_ptr<Fence>, shared_ptr<QueueNode>>> fence_wait_queue_; std::future<void> future_; std::future<void> fence_wait_future_; diff --git a/composer/hwc_session_services.cpp b/composer/hwc_session_services.cpp index 28ae8eaa..4672fe1c 100644 --- a/composer/hwc_session_services.cpp +++ b/composer/hwc_session_services.cpp @@ -1161,7 +1161,7 @@ int32_t HWCSession::CWB::PostBuffer(std::weak_ptr<DisplayConfig::ConfigCallback> if (!post_future) { // if queue_ is not empty // reject the cwb request if it's made on another display than the currently cwb active display - QueueNode *node = queue_.front(); + shared_ptr<QueueNode> node = queue_.front(); if (node->display_type != display_type) { native_handle_close(buffer); native_handle_delete(const_cast<native_handle_t *>(buffer)); @@ -1169,7 +1169,7 @@ int32_t HWCSession::CWB::PostBuffer(std::weak_ptr<DisplayConfig::ConfigCallback> } } - QueueNode *node = new QueueNode(callback, cwb_config, buffer, display_type); + shared_ptr<QueueNode> node(new QueueNode(callback, cwb_config, buffer, display_type)); queue_.push(node); if (post_future) { @@ -1186,7 +1186,7 @@ int32_t HWCSession::CWB::PostBuffer(std::weak_ptr<DisplayConfig::ConfigCallback> void HWCSession::CWB::ProcessRequests() { while (true) { - QueueNode *node = nullptr; + shared_ptr<QueueNode> node = nullptr; int status = 0; HWC2::Error error = HWC2::Error::None; @@ -1290,7 +1290,7 @@ void HWCSession::CWB::ProcessRequests() { void HWCSession::CWB::PerformFenceWaits() { while (true) { shared_ptr<Fence> release_fence = nullptr; - QueueNode *cwb_node = nullptr; + shared_ptr<QueueNode> cwb_node = nullptr; { SCOPE_LOCK(fence_queue_lock_); if (!fence_wait_queue_.size()) { @@ -1325,17 +1325,13 @@ void HWCSession::CWB::PerformFenceWaits() { } } -void HWCSession::CWB::NotifyCWBStatus(int status, QueueNode *cwb_node) { +void HWCSession::CWB::NotifyCWBStatus(int status, shared_ptr<QueueNode> cwb_node) { // Notify client about buffer status and erase the node from pending request queue. std::shared_ptr<DisplayConfig::ConfigCallback> callback = cwb_node->callback.lock(); if (callback) { DLOGI("Notify the client about buffer status %d.", status); callback->NotifyCWBBufferDone(status, cwb_node->buffer); } - - native_handle_close(cwb_node->buffer); - native_handle_delete(const_cast<native_handle_t *>(cwb_node->buffer)); - delete cwb_node; } void HWCSession::CWB::AsyncTask(CWB *cwb) { |