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

Commit 7b379149 authored by Henri Chataing's avatar Henri Chataing
Browse files

gd/hci/acl_manager: Rewrite dumpsys using std::format

Bug: 331817295
Test: m com.android.btservices
Flag: EXEMPT, no logical change
Change-Id: I6443bc3508b73ed178b2e3fd9d505fb6ca5d5247
parent 55843315
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -639,7 +639,6 @@ genrule {
    cmd: "$(location flatc) -I packages/modules/Bluetooth/system/gd -b --schema -o $(genDir) $(in) ",
    srcs: [
        "dumpsys_data.fbs",
        "hci/hci_acl_manager.fbs",
        "module_unittest.fbs",
        "os/wakelock_manager.fbs",
        "shim/dumpsys.fbs",
@@ -647,7 +646,6 @@ genrule {
    out: [
        "dumpsys.bfbs",
        "dumpsys_data.bfbs",
        "hci_acl_manager.bfbs",
        "wakelock_manager.bfbs",
    ],
}
@@ -660,7 +658,6 @@ genrule {
    cmd: "$(location flatc) -I packages/modules/Bluetooth/system/gd -o $(genDir) --cpp $(in) ",
    srcs: [
        "dumpsys_data.fbs",
        "hci/hci_acl_manager.fbs",
        "module_unittest.fbs",
        "os/wakelock_manager.fbs",
        "shim/dumpsys.fbs",
@@ -668,7 +665,6 @@ genrule {
    out: [
        "dumpsys_data_generated.h",
        "dumpsys_generated.h",
        "hci_acl_manager_generated.h",
        "wakelock_manager_generated.h",
    ],
}
+0 −2
Original line number Diff line number Diff line
@@ -81,7 +81,6 @@ static_library("libbluetooth_gd") {
flatbuffer("BluetoothGeneratedDumpsysDataSchema_h") {
  sources = [
    "dumpsys_data.fbs",
    "hci/hci_acl_manager.fbs",
    "os/wakelock_manager.fbs",
    "shim/dumpsys.fbs",
  ]
@@ -90,7 +89,6 @@ flatbuffer("BluetoothGeneratedDumpsysDataSchema_h") {
bt_flatc_binary_schema("BluetoothGeneratedDumpsysBinarySchema_bfbs") {
  sources = [
    "dumpsys_data.fbs",
    "hci/hci_acl_manager.fbs",
    "os/wakelock_manager.fbs",
    "shim/dumpsys.fbs",
  ]
+0 −2
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@
// privacy:"Any"


include "hci/hci_acl_manager.fbs";
include "module_unittest.fbs";
include "os/wakelock_manager.fbs";
include "shim/dumpsys.fbs";
@@ -22,7 +21,6 @@ table DumpsysData {
    title:string (privacy:"Any");
    wakelock_manager_data:bluetooth.os.WakelockManagerData (privacy:"Any");
    shim_dumpsys_data:bluetooth.shim.DumpsysModuleData (privacy:"Any");
    hci_acl_manager_dumpsys_data:bluetooth.hci.AclManagerData (privacy:"Any");
    module_unittest_data:bluetooth.ModuleUnitTestData; // private
}

+19 −35
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <bluetooth/log.h>

#include <atomic>
#include <format>
#include <future>
#include <mutex>
#include <string>
@@ -38,7 +39,6 @@
#include "hci/controller.h"
#include "hci/hci_layer.h"
#include "hci/remote_name_request.h"
#include "hci_acl_manager_generated.h"
#include "storage/config_keys.h"
#include "storage/storage_module.h"

@@ -184,8 +184,8 @@ struct AclManager::impl {
                                 kWaitBeforeDroppingUnknownAcl);
  }

  void Dump(std::promise<flatbuffers::Offset<AclManagerData>> promise,
            flatbuffers::FlatBufferBuilder* fb_builder) const;
  template <typename OutputT>
  void dump(OutputT&& out) const;

  const AclManager& acl_manager_;

@@ -412,8 +412,8 @@ const ModuleFactory AclManager::Factory = ModuleFactory([]() { return new AclMan

AclManager::~AclManager() = default;

void AclManager::impl::Dump(std::promise<flatbuffers::Offset<AclManagerData>> promise,
                            flatbuffers::FlatBufferBuilder* fb_builder) const {
template <typename OutputT>
void AclManager::impl::dump(OutputT&& out) const {
  const std::lock_guard<std::mutex> lock(dumpsys_mutex_);
  const auto accept_list =
          (le_impl_ != nullptr) ? le_impl_->accept_list : std::unordered_set<AddressWithType>();
@@ -425,40 +425,24 @@ void AclManager::impl::Dump(std::promise<flatbuffers::Offset<AclManagerData>> pr
                  ? static_cast<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[accept_list.size()];

  size_t cnt = 0;
  std::format_to(out, "\nACL Manager Dumpsys:\n");
  std::format_to(out,
                 "    le_connectability_state: \"{}\"\n"
                 "    le_create_connection_timeout_alarms_count: {}\n"
                 "    le_filter_accept_list_count: {}\n"
                 "    le_filter_accept_list: [",
                 le_connectability_state_text, le_create_connection_timeout_alarms_count,
                 accept_list.size());
  for (const auto& it : accept_list) {
    strings[cnt++] = fb_builder->CreateString(it.ToString());
    std::format_to(out, "\n        \"{}\",", it.ToString());
  }
  auto vecofstrings = fb_builder->CreateVector(strings, accept_list.size());

  AclManagerDataBuilder builder(*fb_builder);
  builder.add_title(title);
  builder.add_le_filter_accept_list_count(accept_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);
  std::format_to(out, "\n    ]\n");
}

DumpsysDataFinisher AclManager::GetDumpsysData(flatbuffers::FlatBufferBuilder* fb_builder) const {
  log::assert_that(fb_builder != nullptr, "assert failed: fb_builder != nullptr");

  std::promise<flatbuffers::Offset<AclManagerData>> promise;
  auto future = promise.get_future();
  pimpl_->Dump(std::move(promise), fb_builder);

  auto dumpsys_data = future.get();

  return [dumpsys_data](DumpsysDataBuilder* dumpsys_builder) {
    dumpsys_builder->add_hci_acl_manager_dumpsys_data(dumpsys_data);
  };
void AclManager::Dump(int fd) const {
  std::string out;
  pimpl_->dump(std::back_inserter(out));
  dprintf(fd, "%s", out.c_str());
}

}  // namespace hci
+2 −4
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ public:
  // it starts linking the .cc file.
  ~AclManager();

  void Dump(int fd) const;

  // Should register only once when user module starts.
  // Generates OnConnectSuccess when an incoming connection is established.
  virtual void RegisterCallbacks(acl_manager::ConnectionCallbacks* callbacks, os::Handler* handler);
@@ -141,14 +143,10 @@ protected:
  void ListDependencies(ModuleList* list) const override;

  void Start() override;

  void Stop() override;

  std::string ToString() const override;

  DumpsysDataFinisher GetDumpsysData(
          flatbuffers::FlatBufferBuilder* builder) const override;  // Module

private:
  virtual uint16_t HACK_GetHandle(const Address address);
  virtual uint16_t HACK_GetLeHandle(const Address address);
Loading