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

Commit 739b3dd7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add LeAudioBroadcastSession"

parents 279969c5 4cb702cc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -771,6 +771,7 @@ cc_test {
        "le_audio/content_control_id_keeper.cc",
        "le_audio/client_audio.cc",
        "le_audio/le_audio_types.cc",
        "le_audio/metrics_collector_linux.cc",
        "le_audio/mock_iso_manager.cc",
        "test/common/mock_controller.cc",
        "le_audio/mock_codec_manager.cc",
+3 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include "bta/le_audio/broadcaster/state_machine.h"
#include "bta/le_audio/content_control_id_keeper.h"
#include "bta/le_audio/le_audio_types.h"
#include "bta/le_audio/metrics_collector.h"
#include "device/include/controller.h"
#include "embdrv/lc3/include/lc3.h"
#include "gd/common/strings.h"
@@ -297,6 +298,7 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks {

      broadcasts_[broadcast_id]->ProcessMessage(
          BroadcastStateMachine::Message::START, nullptr);
      le_audio::MetricsCollector::Get()->OnBroadcastStateChanged(true);
    } else {
      LOG_ERROR("No such broadcast_id=%d", broadcast_id);
    }
@@ -314,6 +316,7 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks {
    broadcasts_[broadcast_id]->SetMuted(true);
    broadcasts_[broadcast_id]->ProcessMessage(
        BroadcastStateMachine::Message::STOP, nullptr);
    le_audio::MetricsCollector::Get()->OnBroadcastStateChanged(false);
  }

  void DestroyAudioBroadcast(uint32_t broadcast_id) override {
+19 −10
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

#include "metrics_collector.h"

#include <chrono>
#include <memory>
#include <vector>

@@ -24,17 +23,15 @@

namespace le_audio {

using ClockTimePoint =
    std::chrono::time_point<std::chrono::high_resolution_clock>;
using bluetooth::le_audio::ConnectionState;
using le_audio::types::LeAudioContextType;

const static ClockTimePoint kInvalidTimePoint{};
const static metrics::ClockTimePoint kInvalidTimePoint{};

MetricsCollector* MetricsCollector::instance = nullptr;

inline int64_t get_timedelta_nanos(const ClockTimePoint& t1,
                                   const ClockTimePoint& t2) {
inline int64_t get_timedelta_nanos(const metrics::ClockTimePoint& t1,
                                   const metrics::ClockTimePoint& t2) {
  if (t1 == kInvalidTimePoint || t2 == kInvalidTimePoint) {
    return -1;
  }
@@ -79,9 +76,9 @@ inline int32_t to_atom_context_type(const LeAudioContextType stack_type) {
class DeviceMetrics {
 public:
  RawAddress address_;
  ClockTimePoint connecting_timepoint_ = kInvalidTimePoint;
  ClockTimePoint connected_timepoint_ = kInvalidTimePoint;
  ClockTimePoint disconnected_timepoint_ = kInvalidTimePoint;
  metrics::ClockTimePoint connecting_timepoint_ = kInvalidTimePoint;
  metrics::ClockTimePoint connected_timepoint_ = kInvalidTimePoint;
  metrics::ClockTimePoint disconnected_timepoint_ = kInvalidTimePoint;
  int32_t connection_status_ = 0;
  int32_t disconnection_status_ = 0;

@@ -114,7 +111,7 @@ class GroupMetricsImpl : public GroupMetrics {
  int32_t group_size_;
  std::vector<std::unique_ptr<DeviceMetrics>> device_metrics_;
  std::unordered_map<RawAddress, DeviceMetrics*> opened_devices_;
  ClockTimePoint beginning_timepoint_;
  metrics::ClockTimePoint beginning_timepoint_;
  std::vector<int64_t> streaming_offset_nanos_;
  std::vector<int64_t> streaming_duration_nanos_;
  std::vector<int32_t> streaming_context_type_;
@@ -283,6 +280,18 @@ void MetricsCollector::OnStreamEnded(int32_t group_id) {
  }
}

void MetricsCollector::OnBroadcastStateChanged(bool started) {
  if (started) {
    broadcast_beginning_timepoint_ = std::chrono::high_resolution_clock::now();
  } else {
    auto broadcast_ending_timepoint_ =
        std::chrono::high_resolution_clock::now();
    bluetooth::common::LogLeAudioBroadcastSessionReported(get_timedelta_nanos(
        broadcast_beginning_timepoint_, broadcast_ending_timepoint_));
    broadcast_beginning_timepoint_ = kInvalidTimePoint;
  }
}

void MetricsCollector::Flush() {
  LOG(INFO) << __func__;
  for (auto& p : opened_groups_) {
+15 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include <hardware/bt_le_audio.h>

#include <chrono>
#include <cstdint>
#include <memory>
#include <unordered_map>
@@ -27,6 +28,11 @@

namespace le_audio {

namespace metrics {
using ClockTimePoint =
    std::chrono::time_point<std::chrono::high_resolution_clock>;
}

enum ConnectionStatus : int32_t {
  UNKNOWN = 0,
  SUCCESS = 1,
@@ -116,6 +122,13 @@ class MetricsCollector {
   */
  void OnStreamEnded(int32_t group_id);

  /**
   * When there is a change in Bluetooth LE Audio broadcast state
   *
   * @param started if broadcast streaming is started.
   */
  void OnBroadcastStateChanged(bool started);

  /**
   * Flush all log to statsd
   *
@@ -131,6 +144,8 @@ class MetricsCollector {

  std::unordered_map<int32_t, std::unique_ptr<GroupMetrics>> opened_groups_;
  std::unordered_map<int32_t, int32_t> group_size_table_;

  metrics::ClockTimePoint broadcast_beginning_timepoint_;
};

}  // namespace le_audio
+2 −0
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ void MetricsCollector::OnStreamStarted(

void MetricsCollector::OnStreamEnded(int32_t group_id) {}

void MetricsCollector::OnBroadcastStateChanged(bool started) {}

void MetricsCollector::Flush() {}

}  // namespace le_audio
Loading