Loading system/gd/hci/acl_manager.cc +38 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <atomic> #include <future> #include <mutex> #include <set> #include "common/bidi_queue.h" Loading Loading @@ -64,14 +65,23 @@ struct AclManager::impl { hci_queue_end_->RegisterDequeue( handler_, common::Bind(&impl::dequeue_and_route_acl_packet_to_connection, common::Unretained(this))); bool crash_on_unknown_handle = false; { const std::lock_guard<std::mutex> lock(dumpsys_mutex_); classic_impl_ = new classic_impl(hci_layer_, controller_, handler_, round_robin_scheduler_, crash_on_unknown_handle); le_impl_ = new le_impl(hci_layer_, controller_, handler_, round_robin_scheduler_, crash_on_unknown_handle); } } void Stop() { { const std::lock_guard<std::mutex> lock(dumpsys_mutex_); delete le_impl_; delete classic_impl_; le_impl_ = nullptr; classic_impl_ = nullptr; } hci_queue_end_->UnregisterDequeue(); delete round_robin_scheduler_; if (enqueue_registered_.exchange(false)) { Loading Loading @@ -115,6 +125,7 @@ struct AclManager::impl { common::BidiQueueEnd<AclBuilder, AclView>* hci_queue_end_ = nullptr; std::atomic_bool enqueue_registered_ = false; uint16_t default_link_policy_settings_ = 0xffff; mutable std::mutex dumpsys_mutex_; }; AclManager::AclManager() : pimpl_(std::make_unique<impl>(*this)) {} Loading Loading @@ -324,9 +335,31 @@ AclManager::~AclManager() = default; void AclManager::impl::Dump( std::promise<flatbuffers::Offset<AclManagerData>> promise, flatbuffers::FlatBufferBuilder* fb_builder) const { const std::lock_guard<std::mutex> lock(dumpsys_mutex_); const auto connect_list = (le_impl_ != nullptr) ? le_impl_->connect_list : std::unordered_set<AddressWithType>(); const auto le_connectability_state_text = (le_impl_ != nullptr) ? connectability_state_machine_text(le_impl_->connectability_state_) : "INDETERMINATE"; const auto le_create_connection_timeout_alarms_count = (le_impl_ != nullptr) ? (int)le_impl_->create_connection_timeout_alarms_.size() : 0; auto title = fb_builder->CreateString("----- Acl Manager Dumpsys -----"); auto le_connectability_state = fb_builder->CreateString(le_connectability_state_text); flatbuffers::Offset<flatbuffers::String> strings[connect_list.size()]; size_t cnt = 0; for (const auto& it : connect_list) { strings[cnt++] = fb_builder->CreateString(it.ToString()); } auto vecofstrings = fb_builder->CreateVector(strings, connect_list.size()); AclManagerDataBuilder builder(*fb_builder); builder.add_title(title); builder.add_le_filter_accept_list_count(connect_list.size()); builder.add_le_filter_accept_list(vecofstrings); builder.add_le_connectability_state(le_connectability_state); builder.add_le_create_connection_timeout_alarms_count(le_create_connection_timeout_alarms_count); flatbuffers::Offset<AclManagerData> dumpsys_data = builder.Finish(); promise.set_value(dumpsys_data); } Loading system/gd/hci/hci_acl_manager.fbs +4 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,10 @@ attribute "privacy"; table AclManagerData { title:string (privacy:"Any"); le_filter_accept_list_count:int (privacy:"Any"); le_filter_accept_list:[string] (privacy:"Any"); le_connectability_state:string (privacy:"Any"); le_create_connection_timeout_alarms_count:int (privacy:"Any"); } root_type AclManagerData; Loading
system/gd/hci/acl_manager.cc +38 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <atomic> #include <future> #include <mutex> #include <set> #include "common/bidi_queue.h" Loading Loading @@ -64,14 +65,23 @@ struct AclManager::impl { hci_queue_end_->RegisterDequeue( handler_, common::Bind(&impl::dequeue_and_route_acl_packet_to_connection, common::Unretained(this))); bool crash_on_unknown_handle = false; { const std::lock_guard<std::mutex> lock(dumpsys_mutex_); classic_impl_ = new classic_impl(hci_layer_, controller_, handler_, round_robin_scheduler_, crash_on_unknown_handle); le_impl_ = new le_impl(hci_layer_, controller_, handler_, round_robin_scheduler_, crash_on_unknown_handle); } } void Stop() { { const std::lock_guard<std::mutex> lock(dumpsys_mutex_); delete le_impl_; delete classic_impl_; le_impl_ = nullptr; classic_impl_ = nullptr; } hci_queue_end_->UnregisterDequeue(); delete round_robin_scheduler_; if (enqueue_registered_.exchange(false)) { Loading Loading @@ -115,6 +125,7 @@ struct AclManager::impl { common::BidiQueueEnd<AclBuilder, AclView>* hci_queue_end_ = nullptr; std::atomic_bool enqueue_registered_ = false; uint16_t default_link_policy_settings_ = 0xffff; mutable std::mutex dumpsys_mutex_; }; AclManager::AclManager() : pimpl_(std::make_unique<impl>(*this)) {} Loading Loading @@ -324,9 +335,31 @@ AclManager::~AclManager() = default; void AclManager::impl::Dump( std::promise<flatbuffers::Offset<AclManagerData>> promise, flatbuffers::FlatBufferBuilder* fb_builder) const { const std::lock_guard<std::mutex> lock(dumpsys_mutex_); const auto connect_list = (le_impl_ != nullptr) ? le_impl_->connect_list : std::unordered_set<AddressWithType>(); const auto le_connectability_state_text = (le_impl_ != nullptr) ? connectability_state_machine_text(le_impl_->connectability_state_) : "INDETERMINATE"; const auto le_create_connection_timeout_alarms_count = (le_impl_ != nullptr) ? (int)le_impl_->create_connection_timeout_alarms_.size() : 0; auto title = fb_builder->CreateString("----- Acl Manager Dumpsys -----"); auto le_connectability_state = fb_builder->CreateString(le_connectability_state_text); flatbuffers::Offset<flatbuffers::String> strings[connect_list.size()]; size_t cnt = 0; for (const auto& it : connect_list) { strings[cnt++] = fb_builder->CreateString(it.ToString()); } auto vecofstrings = fb_builder->CreateVector(strings, connect_list.size()); AclManagerDataBuilder builder(*fb_builder); builder.add_title(title); builder.add_le_filter_accept_list_count(connect_list.size()); builder.add_le_filter_accept_list(vecofstrings); builder.add_le_connectability_state(le_connectability_state); builder.add_le_create_connection_timeout_alarms_count(le_create_connection_timeout_alarms_count); flatbuffers::Offset<AclManagerData> dumpsys_data = builder.Finish(); promise.set_value(dumpsys_data); } Loading
system/gd/hci/hci_acl_manager.fbs +4 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,10 @@ attribute "privacy"; table AclManagerData { title:string (privacy:"Any"); le_filter_accept_list_count:int (privacy:"Any"); le_filter_accept_list:[string] (privacy:"Any"); le_connectability_state:string (privacy:"Any"); le_create_connection_timeout_alarms_count:int (privacy:"Any"); } root_type AclManagerData;