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

Commit 508f6b97 authored by Łukasz Rymanowski's avatar Łukasz Rymanowski
Browse files

Remove leaudio_start_stream_race_fix - step 1

Bug: 322106376
Bug: 325181889
Test: mmm packages/modules/Bluetooth
Flag: com.android.bluetooth.flags.leaudio_start_stream_race_fix
Change-Id: Ie9af76ea5193d3d20a0eda48070222b8bd95c022
parent ad7bfc70
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -91,16 +91,6 @@ flag {
    bug: "323156655"
}

flag {
    name: "leaudio_start_stream_race_fix"
    namespace: "bluetooth"
    description: "Fix possible race on start stream request"
    bug: "325181889"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "run_ble_audio_ticks_in_worker_thread"
    namespace: "bluetooth"
+2 −45
Original line number Diff line number Diff line
@@ -80,43 +80,6 @@ LeAudioTransport::~LeAudioTransport() {
  }
}

BluetoothAudioCtrlAck LeAudioTransport::StartRequest(bool /*is_low_latency*/) {
  // Check if operation is pending already
  if (GetStartRequestState() == StartRequestState::PENDING_AFTER_RESUME) {
    log::info("Start request is already pending. Ignore the request");
    return BluetoothAudioCtrlAck::PENDING;
  }

  SetStartRequestState(StartRequestState::PENDING_BEFORE_RESUME);
  if (stream_cb_.on_resume_(true)) {
    auto expected = StartRequestState::CONFIRMED;
    if (std::atomic_compare_exchange_strong(&start_request_state_, &expected,
                                            StartRequestState::IDLE)) {
      log::info("Start completed.");
      return BluetoothAudioCtrlAck::SUCCESS_FINISHED;
    }

    expected = StartRequestState::CANCELED;
    if (std::atomic_compare_exchange_strong(&start_request_state_, &expected,
                                            StartRequestState::IDLE)) {
      log::info("Start request failed.");
      return BluetoothAudioCtrlAck::FAILURE;
    }

    expected = StartRequestState::PENDING_BEFORE_RESUME;
    if (std::atomic_compare_exchange_strong(&start_request_state_, &expected,
                                            StartRequestState::PENDING_AFTER_RESUME)) {
      log::info("Start pending.");
      return BluetoothAudioCtrlAck::PENDING;
    }
  }

  log::error("Start request failed.");
  auto expected = StartRequestState::PENDING_BEFORE_RESUME;
  std::atomic_compare_exchange_strong(&start_request_state_, &expected, StartRequestState::IDLE);
  return BluetoothAudioCtrlAck::FAILURE;
}

BluetoothAudioCtrlAck LeAudioTransport::StartRequestV2(bool /*is_low_latency*/) {
  // Check if operation is pending already
  if (GetStartRequestState() == StartRequestState::PENDING_AFTER_RESUME) {
@@ -380,11 +343,8 @@ LeAudioSinkTransport::LeAudioSinkTransport(SessionType session_type, StreamCallb
LeAudioSinkTransport::~LeAudioSinkTransport() { delete transport_; }

BluetoothAudioCtrlAck LeAudioSinkTransport::StartRequest(bool is_low_latency) {
  if (com::android::bluetooth::flags::leaudio_start_stream_race_fix()) {
  return transport_->StartRequestV2(is_low_latency);
}
  return transport_->StartRequest(is_low_latency);
}

BluetoothAudioCtrlAck LeAudioSinkTransport::SuspendRequest() {
  return transport_->SuspendRequest();
@@ -471,11 +431,8 @@ LeAudioSourceTransport::LeAudioSourceTransport(SessionType session_type, StreamC
LeAudioSourceTransport::~LeAudioSourceTransport() { delete transport_; }

BluetoothAudioCtrlAck LeAudioSourceTransport::StartRequest(bool is_low_latency) {
  if (com::android::bluetooth::flags::leaudio_start_stream_race_fix()) {
  return transport_->StartRequestV2(is_low_latency);
}
  return transport_->StartRequest(is_low_latency);
}

BluetoothAudioCtrlAck LeAudioSourceTransport::SuspendRequest() {
  return transport_->SuspendRequest();
+2 −5
Original line number Diff line number Diff line
@@ -70,7 +70,6 @@ public:
  LeAudioTransport(void (*flush)(void), StreamCallbacks stream_cb, PcmConfiguration pcm_config);
  ~LeAudioTransport();

  BluetoothAudioCtrlAck StartRequest(bool is_low_latency);
  BluetoothAudioCtrlAck StartRequestV2(bool is_low_latency);

  BluetoothAudioCtrlAck SuspendRequest();
@@ -129,8 +128,7 @@ public:

  ~LeAudioSinkTransport();

  BluetoothAudioCtrlAck StartRequest(bool is_low_latency) override;
  BluetoothAudioCtrlAck StartRequestV2(bool is_low_latency);
  BluetoothAudioCtrlAck StartRequest(bool is_low_latency);

  BluetoothAudioCtrlAck SuspendRequest() override;

@@ -183,8 +181,7 @@ public:

  ~LeAudioSourceTransport();

  BluetoothAudioCtrlAck StartRequest(bool is_low_latency) override;
  BluetoothAudioCtrlAck StartRequestV2(bool is_low_latency);
  BluetoothAudioCtrlAck StartRequest(bool is_low_latency);

  BluetoothAudioCtrlAck SuspendRequest() override;

+2 −35
Original line number Diff line number Diff line
@@ -105,31 +105,6 @@ LeAudioTransport::LeAudioTransport(void (*flush)(void), StreamCallbacks stream_c
      pcm_config_(std::move(pcm_config)),
      start_request_state_(StartRequestState::IDLE) {}

BluetoothAudioCtrlAck LeAudioTransport::StartRequest() {
  SetStartRequestState(StartRequestState::PENDING_BEFORE_RESUME);
  if (stream_cb_.on_resume_(true)) {
    if (start_request_state_ == StartRequestState::CONFIRMED) {
      log::info("Start completed.");
      SetStartRequestState(StartRequestState::IDLE);
      return BluetoothAudioCtrlAck::SUCCESS_FINISHED;
    }

    if (start_request_state_ == StartRequestState::CANCELED) {
      log::info("Start request failed.");
      SetStartRequestState(StartRequestState::IDLE);
      return BluetoothAudioCtrlAck::FAILURE;
    }

    log::info("Start pending.");
    SetStartRequestState(StartRequestState::PENDING_AFTER_RESUME);
    return BluetoothAudioCtrlAck::PENDING;
  }

  log::error("Start request failed.");
  SetStartRequestState(StartRequestState::IDLE);
  return BluetoothAudioCtrlAck::FAILURE;
}

BluetoothAudioCtrlAck LeAudioTransport::StartRequestV2() {
  SetStartRequestState(StartRequestState::PENDING_BEFORE_RESUME);
  if (stream_cb_.on_resume_(true)) {
@@ -288,12 +263,7 @@ LeAudioSinkTransport::LeAudioSinkTransport(SessionType_2_1 session_type, StreamC

LeAudioSinkTransport::~LeAudioSinkTransport() { delete transport_; }

BluetoothAudioCtrlAck LeAudioSinkTransport::StartRequest() {
  if (com::android::bluetooth::flags::leaudio_start_stream_race_fix()) {
    return transport_->StartRequestV2();
  }
  return transport_->StartRequest();
}
BluetoothAudioCtrlAck LeAudioSinkTransport::StartRequest() { return transport_->StartRequestV2(); }

BluetoothAudioCtrlAck LeAudioSinkTransport::SuspendRequest() {
  return transport_->SuspendRequest();
@@ -365,11 +335,8 @@ LeAudioSourceTransport::LeAudioSourceTransport(SessionType_2_1 session_type,
LeAudioSourceTransport::~LeAudioSourceTransport() { delete transport_; }

BluetoothAudioCtrlAck LeAudioSourceTransport::StartRequest() {
  if (com::android::bluetooth::flags::leaudio_start_stream_race_fix()) {
  return transport_->StartRequestV2();
}
  return transport_->StartRequest();
}

BluetoothAudioCtrlAck LeAudioSourceTransport::SuspendRequest() {
  return transport_->SuspendRequest();
+0 −2
Original line number Diff line number Diff line
@@ -58,7 +58,6 @@ class LeAudioTransport {
public:
  LeAudioTransport(void (*flush)(void), StreamCallbacks stream_cb, PcmParameters pcm_config);

  BluetoothAudioCtrlAck StartRequest();
  BluetoothAudioCtrlAck StartRequestV2();

  BluetoothAudioCtrlAck SuspendRequest();
@@ -107,7 +106,6 @@ public:
  ~LeAudioSinkTransport();

  BluetoothAudioCtrlAck StartRequest() override;
  BluetoothAudioCtrlAck StartRequestV2();

  BluetoothAudioCtrlAck SuspendRequest() override;

Loading