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

Commit cc770b24 authored by Josh Wu's avatar Josh Wu Committed by Gerrit Code Review
Browse files

Merge "A2DP: Log BLUETOOTH_A2DP_PLAYBACK_STATE_CHANGED"

parents ee13091d e9f5c354
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -32,6 +32,9 @@ void log_a2dp_audio_overrun_event(const RawAddress& address,
                                  int num_dropped_encoded_frames,
                                  int num_dropped_encoded_bytes);

void log_a2dp_playback_event(const RawAddress& address, int playback_state,
                             int audio_coding_mode);

void log_read_rssi_result(const RawAddress& address, uint16_t handle,
                          uint32_t cmd_status, int8_t rssi);

+24 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@

#include <base/bind.h>
#include <base/strings/stringprintf.h>
#include <frameworks/proto_logging/stats/enums/bluetooth/a2dp/enums.pb.h>
#include <cstdint>
#include <future>
#include <memory>
@@ -38,7 +39,10 @@
#include "btif/include/btif_profile_queue.h"
#include "btif/include/btif_rc.h"
#include "btif/include/btif_util.h"
#include "btif_metrics_logging.h"
#include "common/metrics.h"
#include "common/state_machine.h"
#include "hardware/bt_av.h"
#include "include/hardware/bt_rc.h"
#include "main/shim/dumpsys.h"
#include "osi/include/properties.h"
@@ -2410,6 +2414,26 @@ static void btif_report_audio_state(const RawAddress& peer_address,
                     base::Bind(btif_av_sink.Callbacks()->audio_state_cb,
                                peer_address, state));
  }

  using android::bluetooth::a2dp::AudioCodingModeEnum;
  using android::bluetooth::a2dp::PlaybackStateEnum;
  PlaybackStateEnum playback_state = PlaybackStateEnum::PLAYBACK_STATE_UNKNOWN;
  switch (state) {
    case BTAV_AUDIO_STATE_STARTED:
      playback_state = PlaybackStateEnum::PLAYBACK_STATE_PLAYING;
      break;
    case BTAV_AUDIO_STATE_STOPPED:
      playback_state = PlaybackStateEnum::PLAYBACK_STATE_NOT_PLAYING;
      break;
    default:
      break;
  }
  AudioCodingModeEnum audio_coding_mode =
      btif_av_is_a2dp_offload_running()
          ? AudioCodingModeEnum::AUDIO_CODING_MODE_HARDWARE
          : AudioCodingModeEnum::AUDIO_CODING_MODE_SOFTWARE;

  log_a2dp_playback_event(peer_address, playback_state, audio_coding_mode);
}

void btif_av_report_source_codec_state(
+11 −0
Original line number Diff line number Diff line
@@ -52,6 +52,17 @@ void log_a2dp_audio_overrun_event(const RawAddress& address,
  }
}

void log_a2dp_playback_event(const RawAddress& address, int playback_state,
                             int audio_coding_mode) {
  if (bluetooth::shim::is_any_gd_enabled()) {
    bluetooth::shim::LogMetricA2dpPlaybackEvent(address, playback_state,
                                                audio_coding_mode);
  } else {
    bluetooth::common::LogA2dpPlaybackEvent(address, playback_state,
                                            audio_coding_mode);
  }
}

void log_read_rssi_result(const RawAddress& address, uint16_t handle,
                          uint32_t cmd_status, int8_t rssi) {
  if (bluetooth::shim::is_any_gd_enabled()) {
+23 −0
Original line number Diff line number Diff line
@@ -678,6 +678,29 @@ void LogA2dpAudioOverrunEvent(const RawAddress& address,
  }
}

void LogA2dpPlaybackEvent(const RawAddress& address, int playback_state,
                          int audio_coding_mode) {
  std::string obfuscated_id;
  int metric_id = 0;
  if (!address.IsEmpty()) {
    obfuscated_id = AddressObfuscator::GetInstance()->Obfuscate(address);
    metric_id = MetricIdAllocator::GetInstance().AllocateId(address);
  }
  // nullptr and size 0 represent missing value for obfuscated_id
  android::util::BytesField bytes_field(
      address.IsEmpty() ? nullptr : obfuscated_id.c_str(),
      address.IsEmpty() ? 0 : obfuscated_id.size());
  int ret = android::util::stats_write(
      android::util::BLUETOOTH_A2DP_PLAYBACK_STATE_CHANGED, bytes_field,
      playback_state, audio_coding_mode, metric_id);
  if (ret < 0) {
    LOG(WARNING) << __func__ << ": failed to log for " << address
                 << ", playback_state " << playback_state
                 << ", audio_coding_mode " << audio_coding_mode << ", error "
                 << ret;
  }
}

void LogReadRssiResult(const RawAddress& address, uint16_t handle,
                       uint32_t cmd_status, int8_t rssi) {
  std::string obfuscated_id;
+10 −0
Original line number Diff line number Diff line
@@ -359,6 +359,16 @@ void LogA2dpAudioOverrunEvent(const RawAddress& address,
                              int num_dropped_encoded_frames,
                              int num_dropped_encoded_bytes);

/**
 * Log A2DP playback state changed event
 *
 * @param address A2DP device associated with this event
 * @param playback_state audio playback state
 * @param audio_coding_mode audio codec encoding mode
 */
void LogA2dpPlaybackEvent(const RawAddress& address, int playback_state,
                          int audio_coding_mode);

/**
 * Log read RSSI result
 *
Loading