Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0c876c5 authored by Chris Manton's avatar Chris Manton Committed by Gerrit Code Review
Browse files

Merge "Add gd::acl_manager dumpsys data"

parents 2aeb6c5b 6c297135
Loading
Loading
Loading
Loading
+38 −5
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include <atomic>
#include <future>
#include <mutex>
#include <set>

#include "common/bidi_queue.h"
@@ -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)) {
@@ -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)) {}
@@ -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);
}
+4 −0
Original line number Diff line number Diff line
@@ -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;