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

Commit 86d04f87 authored by En-Shuo Hsu's avatar En-Shuo Hsu Committed by Gerrit Code Review
Browse files

Merge "floss: metrics: start sending A2DP session metrics" into main

parents ac3a2a4e fdbd5845
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -35,6 +35,13 @@ void log_a2dp_audio_overrun_event(const RawAddress& address,
void log_a2dp_playback_event(const RawAddress& address, int playback_state,
                             int audio_coding_mode);

void log_a2dp_session_metrics_event(
    const RawAddress& address, int64_t audio_duration_ms,
    int media_timer_min_ms, int media_timer_max_ms, int media_timer_avg_ms,
    int total_scheduling_count, int buffer_overruns_max_count,
    int buffer_overruns_total, float buffer_underruns_average,
    int buffer_underruns_count, int64_t codec_index, bool is_a2dp_offload);

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

+10 −0
Original line number Diff line number Diff line
@@ -1359,6 +1359,16 @@ static void btif_a2dp_source_update_metrics(void) {
    }
  }
  BluetoothMetricsLogger::GetInstance()->LogA2dpSession(metrics);

  if (metrics.audio_duration_ms != -1) {
    log_a2dp_session_metrics_event(
        btif_av_source_active_peer(), metrics.audio_duration_ms,
        metrics.media_timer_min_ms, metrics.media_timer_max_ms,
        metrics.media_timer_avg_ms, metrics.total_scheduling_count,
        metrics.buffer_overruns_max_count, metrics.buffer_overruns_total,
        metrics.buffer_underruns_average, metrics.buffer_underruns_count,
        metrics.codec_index, metrics.is_a2dp_offload);
  }
}

void btif_a2dp_source_set_dynamic_audio_buffer_size(
+13 −0
Original line number Diff line number Diff line
@@ -47,6 +47,19 @@ void log_a2dp_playback_event(const RawAddress& address, int playback_state,
                                                audio_coding_mode);
}

void log_a2dp_session_metrics_event(
    const RawAddress& address, int64_t audio_duration_ms,
    int media_timer_min_ms, int media_timer_max_ms, int media_timer_avg_ms,
    int total_scheduling_count, int buffer_overruns_max_count,
    int buffer_overruns_total, float buffer_underruns_average,
    int buffer_underruns_count, int64_t codec_index, bool is_a2dp_offload) {
    bluetooth::shim::LogMetricA2dpSessionMetricsEvent(
        address, audio_duration_ms, media_timer_min_ms, media_timer_max_ms,
        media_timer_avg_ms, total_scheduling_count, buffer_overruns_max_count,
        buffer_overruns_total, buffer_underruns_average, buffer_underruns_count,
        codec_index, is_a2dp_offload);
}

void log_read_rssi_result(const RawAddress& address, uint16_t handle,
                          uint32_t cmd_status, int8_t rssi) {
  bluetooth::shim::LogMetricReadRssiResult(address, handle, cmd_status, rssi);
+14 −0
Original line number Diff line number Diff line
@@ -176,6 +176,20 @@ void LogMetricA2dpPlaybackEvent(const Address& address, int playback_state, int
  }
}

void LogMetricA2dpSessionMetricsEvent(
    const hci::Address& /* address */,
    int64_t /* audio_duration_ms */,
    int /* media_timer_min_ms */,
    int /* media_timer_max_ms */,
    int /* media_timer_avg_ms */,
    int /* total_scheduling_count */,
    int /* buffer_overruns_max_count */,
    int /* buffer_overruns_total */,
    float /* buffer_underruns_average */,
    int /* buffer_underruns_count */,
    int64_t /* codec_index */,
    bool /* is_a2dp_offload */) {}

void LogMetricHfpPacketLossStats(
    const Address& /* address */,
    int /* num_decoded_frames */,
+53 −0
Original line number Diff line number Diff line
@@ -187,6 +187,59 @@ void LogMetricSmpPairingEvent(
void LogMetricA2dpPlaybackEvent(const Address& address, int playback_state, int audio_coding_mode) {
}

void LogMetricA2dpSessionMetricsEvent(
    const hci::Address& address,
    int64_t audio_duration_ms,
    int media_timer_min_ms,
    int media_timer_max_ms,
    int media_timer_avg_ms,
    int total_scheduling_count,
    int buffer_overruns_max_count,
    int buffer_overruns_total,
    float buffer_underruns_average,
    int buffer_underruns_count,
    int64_t codec_index,
    bool is_a2dp_offload) {
  std::string boot_id;
  std::string addr_string;

  if (!metrics::GetBootId(&boot_id)) return;

  addr_string = address.ToString();

  LOG_DEBUG(
      "A2dpSessionMetrics: %s, %s, %lld, %d, %d, %d, %d, %d, %d, %f, %d, %lld, %d",
      boot_id.c_str(),
      addr_string.c_str(),
      (long long int)audio_duration_ms,
      media_timer_min_ms,
      media_timer_max_ms,
      media_timer_avg_ms,
      total_scheduling_count,
      buffer_overruns_max_count,
      buffer_overruns_total,
      buffer_underruns_average,
      buffer_underruns_count,
      codec_index,
      is_a2dp_offload);

  ::metrics::structured::events::bluetooth::BluetoothA2dpSession()
      .SetBootId(boot_id)
      .SetDeviceId(addr_string)
      .SetAudioDuration(audio_duration_ms)
      .SetMediaTimerMin(media_timer_min_ms)
      .SetMediaTimerMax(media_timer_max_ms)
      .SetMediaTimerAvg(media_timer_avg_ms)
      .SetTotalSchedulingCount(total_scheduling_count)
      .SetBufferOverrunsMaxCount(buffer_overruns_max_count)
      .SetBufferOverrunsTotal(buffer_overruns_total)
      .SetBufferUnderrunsAvg(buffer_underruns_average)
      .SetBufferUnderrunsCount(buffer_underruns_count)
      .SetCodecIndex(codec_index)
      .SetIsA2dpOffload(is_a2dp_offload)
      .Record();
}

void LogMetricBluetoothHalCrashReason(
    const Address& address, uint32_t error_code, uint32_t vendor_error_code) {}

Loading