commit 82e5ddb84f7a6a8e5043f33512ab6a0e939a1ce2
parent ec54d5c8c50769dec5cebbd3ddba71c6b803c6b2
Author: Michael Froman <mfroman@mozilla.com>
Date: Thu, 9 Oct 2025 13:38:14 -0500
Bug 1993083 - Vendor libwebrtc from 01df61ec4f
Upstream commit: https://webrtc.googlesource.com/src/+/01df61ec4f304de2cd7409b01c5cec40a7f71c0a
Save Environment instead of pointer to TaskQueueFactory in TestAudioDevice
Saving raw pointer is brittle and may cause a crash if Environment
passed to TestAudioDevice happen to be temporary. Saving Environment
guarantees TaskQueueFactory would still be alived when later used in
Init function.
Bug: webrtc:413413572
Change-Id: I274e295f3ffa659cff9c6249d6b562391a9d5a77
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/400140
Auto-Submit: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45146}
Diffstat:
5 files changed, 39 insertions(+), 26 deletions(-)
diff --git a/third_party/libwebrtc/README.mozilla.last-vendor b/third_party/libwebrtc/README.mozilla.last-vendor
@@ -1,4 +1,4 @@
# ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc
-libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-09T18:37:00.485625+00:00.
+libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-09T18:38:04.960332+00:00.
# base of lastest vendoring
-135a2c58bf
+01df61ec4f
diff --git a/third_party/libwebrtc/modules/audio_device/include/test_audio_device.cc b/third_party/libwebrtc/modules/audio_device/include/test_audio_device.cc
@@ -430,8 +430,7 @@ scoped_refptr<AudioDeviceModule> TestAudioDeviceModule::Create(
float speed) {
auto audio_device = make_ref_counted<AudioDeviceModuleImpl>(
AudioDeviceModule::AudioLayer::kDummyAudio,
- std::make_unique<TestAudioDevice>(&env.task_queue_factory(),
- std::move(capturer),
+ std::make_unique<TestAudioDevice>(env, std::move(capturer),
std::move(renderer), speed),
&env.task_queue_factory(),
/*create_detached=*/true);
diff --git a/third_party/libwebrtc/modules/audio_device/test_audio_device_impl.cc b/third_party/libwebrtc/modules/audio_device/test_audio_device_impl.cc
@@ -16,6 +16,7 @@
#include <utility>
#include "api/array_view.h"
+#include "api/environment/environment.h"
#include "api/task_queue/task_queue_factory.h"
#include "api/units/time_delta.h"
#include "modules/audio_device/audio_device_buffer.h"
@@ -34,11 +35,11 @@ constexpr int kFrameLengthUs = 10000;
} // namespace
TestAudioDevice::TestAudioDevice(
- TaskQueueFactory* task_queue_factory,
+ const Environment& env,
std::unique_ptr<TestAudioDeviceModule::Capturer> capturer,
std::unique_ptr<TestAudioDeviceModule::Renderer> renderer,
float speed)
- : task_queue_factory_(task_queue_factory),
+ : env_(env),
capturer_(std::move(capturer)),
renderer_(std::move(renderer)),
process_interval_us_(kFrameLengthUs / speed),
@@ -63,7 +64,7 @@ TestAudioDevice::TestAudioDevice(
}
AudioDeviceGeneric::InitStatus TestAudioDevice::Init() {
- task_queue_ = task_queue_factory_->CreateTaskQueue(
+ task_queue_ = env_.task_queue_factory().CreateTaskQueue(
"TestAudioDeviceModuleImpl", TaskQueueFactory::Priority::NORMAL);
RepeatingTaskHandle::Start(task_queue_.get(), [this]() {
diff --git a/third_party/libwebrtc/modules/audio_device/test_audio_device_impl.h b/third_party/libwebrtc/modules/audio_device/test_audio_device_impl.h
@@ -17,8 +17,8 @@
#include "api/audio/audio_device.h"
#include "api/audio/audio_device_defines.h"
+#include "api/environment/environment.h"
#include "api/task_queue/task_queue_base.h"
-#include "api/task_queue/task_queue_factory.h"
#include "modules/audio_device/audio_device_buffer.h"
#include "modules/audio_device/audio_device_generic.h"
#include "modules/audio_device/include/test_audio_device.h"
@@ -36,7 +36,7 @@ class TestAudioDevice : public AudioDeviceGeneric {
// device is never used for recording.
// `renderer` is an object that receives audio data that would have been
// played out. Can be nullptr if this device is never used for playing.
- TestAudioDevice(TaskQueueFactory* task_queue_factory,
+ TestAudioDevice(const Environment& env,
std::unique_ptr<TestAudioDeviceModule::Capturer> capturer,
std::unique_ptr<TestAudioDeviceModule::Renderer> renderer,
float speed = 1);
@@ -188,7 +188,7 @@ class TestAudioDevice : public AudioDeviceGeneric {
private:
void ProcessAudio();
- TaskQueueFactory* const task_queue_factory_;
+ const Environment env_;
const std::unique_ptr<TestAudioDeviceModule::Capturer> capturer_
RTC_GUARDED_BY(lock_);
const std::unique_ptr<TestAudioDeviceModule::Renderer> renderer_
diff --git a/third_party/libwebrtc/modules/audio_device/test_audio_device_impl_test.cc b/third_party/libwebrtc/modules/audio_device/test_audio_device_impl_test.cc
@@ -18,6 +18,7 @@
#include <vector>
#include "api/audio/audio_device_defines.h"
+#include "api/environment/environment_factory.h"
#include "api/units/time_delta.h"
#include "api/units/timestamp.h"
#include "modules/audio_device/audio_device_buffer.h"
@@ -160,9 +161,11 @@ TEST(TestAudioDeviceTest, EnablingRecordingProducesAudio) {
/*max_amplitude=*/1000,
/*sampling_frequency_in_hz=*/48000, /*num_channels=*/2);
- TestAudioDevice audio_device(time_controller.GetTaskQueueFactory(),
- std::move(capturer),
- /*renderer=*/nullptr);
+ TestAudioDevice audio_device(
+ CreateEnvironment(time_controller.GetClock(),
+ time_controller.GetTaskQueueFactory()),
+ std::move(capturer),
+ /*renderer=*/nullptr);
ASSERT_EQ(audio_device.Init(), AudioDeviceGeneric::InitStatus::OK);
audio_device.AttachAudioBuffer(&audio_buffer);
@@ -192,9 +195,11 @@ TEST(TestAudioDeviceTest, RecordingIsAvailableWhenCapturerIsSet) {
/*max_amplitude=*/1000,
/*sampling_frequency_in_hz=*/48000, /*num_channels=*/2);
- TestAudioDevice audio_device(time_controller.GetTaskQueueFactory(),
- std::move(capturer),
- /*renderer=*/nullptr);
+ TestAudioDevice audio_device(
+ CreateEnvironment(time_controller.GetClock(),
+ time_controller.GetTaskQueueFactory()),
+ std::move(capturer),
+ /*renderer=*/nullptr);
ASSERT_EQ(audio_device.Init(), AudioDeviceGeneric::InitStatus::OK);
bool available;
@@ -204,9 +209,11 @@ TEST(TestAudioDeviceTest, RecordingIsAvailableWhenCapturerIsSet) {
TEST(TestAudioDeviceTest, RecordingIsNotAvailableWhenCapturerIsNotSet) {
GlobalSimulatedTimeController time_controller(kStartTime);
- TestAudioDevice audio_device(time_controller.GetTaskQueueFactory(),
- /*capturer=*/nullptr,
- /*renderer=*/nullptr);
+ TestAudioDevice audio_device(
+ CreateEnvironment(time_controller.GetClock(),
+ time_controller.GetTaskQueueFactory()),
+ /*capturer=*/nullptr,
+ /*renderer=*/nullptr);
ASSERT_EQ(audio_device.Init(), AudioDeviceGeneric::InitStatus::OK);
bool available;
@@ -223,8 +230,10 @@ TEST(TestAudioDeviceTest, EnablingPlayoutProducesAudio) {
TestAudioDeviceModule::CreateDiscardRenderer(
/*sampling_frequency_in_hz=*/48000, /*num_channels=*/2);
- TestAudioDevice audio_device(time_controller.GetTaskQueueFactory(),
- /*capturer=*/nullptr, std::move(renderer));
+ TestAudioDevice audio_device(
+ CreateEnvironment(time_controller.GetClock(),
+ time_controller.GetTaskQueueFactory()),
+ /*capturer=*/nullptr, std::move(renderer));
ASSERT_EQ(audio_device.Init(), AudioDeviceGeneric::InitStatus::OK);
audio_device.AttachAudioBuffer(&audio_buffer);
@@ -253,8 +262,10 @@ TEST(TestAudioDeviceTest, PlayoutIsAvailableWhenRendererIsSet) {
TestAudioDeviceModule::CreateDiscardRenderer(
/*sampling_frequency_in_hz=*/48000, /*num_channels=*/2);
- TestAudioDevice audio_device(time_controller.GetTaskQueueFactory(),
- /*capturer=*/nullptr, std::move(renderer));
+ TestAudioDevice audio_device(
+ CreateEnvironment(time_controller.GetClock(),
+ time_controller.GetTaskQueueFactory()),
+ /*capturer=*/nullptr, std::move(renderer));
ASSERT_EQ(audio_device.Init(), AudioDeviceGeneric::InitStatus::OK);
bool available;
@@ -264,9 +275,11 @@ TEST(TestAudioDeviceTest, PlayoutIsAvailableWhenRendererIsSet) {
TEST(TestAudioDeviceTest, PlayoutIsNotAvailableWhenRendererIsNotSet) {
GlobalSimulatedTimeController time_controller(kStartTime);
- TestAudioDevice audio_device(time_controller.GetTaskQueueFactory(),
- /*capturer=*/nullptr,
- /*renderer=*/nullptr);
+ TestAudioDevice audio_device(
+ CreateEnvironment(time_controller.GetClock(),
+ time_controller.GetTaskQueueFactory()),
+ /*capturer=*/nullptr,
+ /*renderer=*/nullptr);
ASSERT_EQ(audio_device.Init(), AudioDeviceGeneric::InitStatus::OK);
bool available;