summaryrefslogtreecommitdiff
path: root/chromium/third_party/webrtc/api/test
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/webrtc/api/test')
-rw-r--r--chromium/third_party/webrtc/api/test/audioproc_float.cc6
-rw-r--r--chromium/third_party/webrtc/api/test/audioproc_float.h16
-rw-r--r--chromium/third_party/webrtc/api/test/compile_all_headers.cc4
-rw-r--r--chromium/third_party/webrtc/api/test/create_network_emulation_manager.h2
-rw-r--r--chromium/third_party/webrtc/api/test/create_peerconnection_quality_test_fixture.h1
-rw-r--r--chromium/third_party/webrtc/api/test/create_time_controller.cc8
-rw-r--r--chromium/third_party/webrtc/api/test/fake_datagram_transport.h121
-rw-r--r--chromium/third_party/webrtc/api/test/fake_media_transport.h74
-rw-r--r--chromium/third_party/webrtc/api/test/loopback_media_transport.cc373
-rw-r--r--chromium/third_party/webrtc/api/test/loopback_media_transport.h269
-rw-r--r--chromium/third_party/webrtc/api/test/loopback_media_transport_unittest.cc201
-rw-r--r--chromium/third_party/webrtc/api/test/mock_audio_mixer.h9
-rw-r--r--chromium/third_party/webrtc/api/test/mock_peer_connection_factory_interface.h75
-rw-r--r--chromium/third_party/webrtc/api/test/mock_transformable_video_frame.h38
-rw-r--r--chromium/third_party/webrtc/api/test/mock_video_bitrate_allocator_factory.h2
-rw-r--r--chromium/third_party/webrtc/api/test/mock_video_decoder_factory.h4
-rw-r--r--chromium/third_party/webrtc/api/test/mock_video_encoder.h54
-rw-r--r--chromium/third_party/webrtc/api/test/mock_video_encoder_factory.h6
-rw-r--r--chromium/third_party/webrtc/api/test/network_emulation/BUILD.gn2
-rw-r--r--chromium/third_party/webrtc/api/test/peerconnection_quality_test_fixture.h13
-rw-r--r--chromium/third_party/webrtc/api/test/stats_observer_interface.h10
-rw-r--r--chromium/third_party/webrtc/api/test/test_dependency_factory.cc16
-rw-r--r--chromium/third_party/webrtc/api/test/video_quality_analyzer_interface.h49
23 files changed, 248 insertions, 1105 deletions
diff --git a/chromium/third_party/webrtc/api/test/audioproc_float.cc b/chromium/third_party/webrtc/api/test/audioproc_float.cc
index bba9c622a12..c8d7ff71939 100644
--- a/chromium/third_party/webrtc/api/test/audioproc_float.cc
+++ b/chromium/third_party/webrtc/api/test/audioproc_float.cc
@@ -17,6 +17,12 @@
namespace webrtc {
namespace test {
+int AudioprocFloat(rtc::scoped_refptr<AudioProcessing> audio_processing,
+ int argc,
+ char* argv[]) {
+ return AudioprocFloatImpl(std::move(audio_processing), argc, argv);
+}
+
int AudioprocFloat(std::unique_ptr<AudioProcessingBuilder> ap_builder,
int argc,
char* argv[]) {
diff --git a/chromium/third_party/webrtc/api/test/audioproc_float.h b/chromium/third_party/webrtc/api/test/audioproc_float.h
index 2625e6ad9ac..fec2ad11fa1 100644
--- a/chromium/third_party/webrtc/api/test/audioproc_float.h
+++ b/chromium/third_party/webrtc/api/test/audioproc_float.h
@@ -22,6 +22,22 @@ namespace test {
// This is an interface for the audio processing simulation utility. This
// utility can be used to simulate the audioprocessing module using a recording
// (either an AEC dump or wav files), and generate the output as a wav file.
+// Any audio_processing object specified in the input is used for the
+// simulation. The optional |audio_processing| object provides the
+// AudioProcessing instance that is used during the simulation. Note that when
+// the audio_processing object is specified all functionality that relies on
+// using the AudioProcessingBuilder is deactivated, since the AudioProcessing
+// object is already created and the builder is not used in the simulation. It
+// is needed to pass the command line flags as |argc| and |argv|, so these can
+// be interpreted properly by the utility. To see a list of all supported
+// command line flags, run the executable with the '--help' flag.
+int AudioprocFloat(rtc::scoped_refptr<AudioProcessing> audio_processing,
+ int argc,
+ char* argv[]);
+
+// This is an interface for the audio processing simulation utility. This
+// utility can be used to simulate the audioprocessing module using a recording
+// (either an AEC dump or wav files), and generate the output as a wav file.
// The |ap_builder| object will be used to create the AudioProcessing instance
// that is used during the simulation. The |ap_builder| supports setting of
// injectable components, which will be passed on to the created AudioProcessing
diff --git a/chromium/third_party/webrtc/api/test/compile_all_headers.cc b/chromium/third_party/webrtc/api/test/compile_all_headers.cc
index 47c5c6ec841..44b9b1fe687 100644
--- a/chromium/third_party/webrtc/api/test/compile_all_headers.cc
+++ b/chromium/third_party/webrtc/api/test/compile_all_headers.cc
@@ -29,14 +29,14 @@
#include "api/test/fake_frame_decryptor.h"
#include "api/test/fake_frame_encryptor.h"
-#include "api/test/fake_media_transport.h"
-#include "api/test/loopback_media_transport.h"
#include "api/test/mock_audio_mixer.h"
#include "api/test/mock_frame_decryptor.h"
#include "api/test/mock_frame_encryptor.h"
+#include "api/test/mock_peer_connection_factory_interface.h"
#include "api/test/mock_peerconnectioninterface.h"
#include "api/test/mock_rtpreceiver.h"
#include "api/test/mock_rtpsender.h"
+#include "api/test/mock_transformable_video_frame.h"
#include "api/test/mock_video_bitrate_allocator.h"
#include "api/test/mock_video_bitrate_allocator_factory.h"
#include "api/test/mock_video_decoder.h"
diff --git a/chromium/third_party/webrtc/api/test/create_network_emulation_manager.h b/chromium/third_party/webrtc/api/test/create_network_emulation_manager.h
index c57c34874c3..f4447437865 100644
--- a/chromium/third_party/webrtc/api/test/create_network_emulation_manager.h
+++ b/chromium/third_party/webrtc/api/test/create_network_emulation_manager.h
@@ -1,4 +1,3 @@
-
/*
* Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
*
@@ -18,6 +17,7 @@
namespace webrtc {
+// Returns a non-null NetworkEmulationManager instance.
std::unique_ptr<NetworkEmulationManager> CreateNetworkEmulationManager(
TimeMode mode = TimeMode::kRealTime);
diff --git a/chromium/third_party/webrtc/api/test/create_peerconnection_quality_test_fixture.h b/chromium/third_party/webrtc/api/test/create_peerconnection_quality_test_fixture.h
index 330d86de02a..9d9d0ef5e4a 100644
--- a/chromium/third_party/webrtc/api/test/create_peerconnection_quality_test_fixture.h
+++ b/chromium/third_party/webrtc/api/test/create_peerconnection_quality_test_fixture.h
@@ -25,6 +25,7 @@ namespace webrtc_pc_e2e {
// During the test Alice will be caller and Bob will answer the call.
// |test_case_name| is a name of test case, that will be used for all metrics
// reporting.
+// Returns a non-null PeerConnectionE2EQualityTestFixture instance.
std::unique_ptr<PeerConnectionE2EQualityTestFixture>
CreatePeerConnectionE2EQualityTestFixture(
std::string test_case_name,
diff --git a/chromium/third_party/webrtc/api/test/create_time_controller.cc b/chromium/third_party/webrtc/api/test/create_time_controller.cc
index d3b046bd61e..1a49020aa43 100644
--- a/chromium/third_party/webrtc/api/test/create_time_controller.cc
+++ b/chromium/third_party/webrtc/api/test/create_time_controller.cc
@@ -35,13 +35,17 @@ std::unique_ptr<CallFactoryInterface> CreateTimeControllerBasedCallFactory(
explicit TimeControllerBasedCallFactory(TimeController* time_controller)
: time_controller_(time_controller) {}
Call* CreateCall(const Call::Config& config) override {
- return Call::Create(config, time_controller_->GetClock(),
- time_controller_->CreateProcessThread("CallModules"),
+ if (!module_thread_) {
+ module_thread_ = SharedModuleThread::Create(
+ "CallModules", [this]() { module_thread_ = nullptr; });
+ }
+ return Call::Create(config, time_controller_->GetClock(), module_thread_,
time_controller_->CreateProcessThread("Pacer"));
}
private:
TimeController* time_controller_;
+ rtc::scoped_refptr<SharedModuleThread> module_thread_;
};
return std::make_unique<TimeControllerBasedCallFactory>(time_controller);
}
diff --git a/chromium/third_party/webrtc/api/test/fake_datagram_transport.h b/chromium/third_party/webrtc/api/test/fake_datagram_transport.h
deleted file mode 100644
index 847b4d842ab..00000000000
--- a/chromium/third_party/webrtc/api/test/fake_datagram_transport.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright 2019 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef API_TEST_FAKE_DATAGRAM_TRANSPORT_H_
-#define API_TEST_FAKE_DATAGRAM_TRANSPORT_H_
-
-#include <cstddef>
-#include <string>
-
-#include "api/transport/datagram_transport_interface.h"
-#include "api/transport/media/media_transport_interface.h"
-
-namespace webrtc {
-
-// Maxmum size of datagrams sent by |FakeDatagramTransport|.
-constexpr size_t kMaxFakeDatagramSize = 1000;
-
-// Fake datagram transport. Does not support making an actual connection
-// or sending data. Only used for tests that need to stub out a transport.
-class FakeDatagramTransport : public DatagramTransportInterface {
- public:
- FakeDatagramTransport(
- const MediaTransportSettings& settings,
- std::string transport_parameters,
- const std::function<bool(absl::string_view, absl::string_view)>&
- are_parameters_compatible)
- : settings_(settings),
- transport_parameters_(transport_parameters),
- are_parameters_compatible_(are_parameters_compatible) {}
-
- ~FakeDatagramTransport() override { RTC_DCHECK(!state_callback_); }
-
- void Connect(rtc::PacketTransportInternal* packet_transport) override {
- packet_transport_ = packet_transport;
- }
-
- CongestionControlInterface* congestion_control() override {
- return nullptr; // Datagram interface doesn't provide this yet.
- }
-
- void SetTransportStateCallback(
- MediaTransportStateCallback* callback) override {
- state_callback_ = callback;
- }
-
- RTCError SendDatagram(rtc::ArrayView<const uint8_t> data,
- DatagramId datagram_id) override {
- return RTCError::OK();
- }
-
- size_t GetLargestDatagramSize() const override {
- return kMaxFakeDatagramSize;
- }
-
- void SetDatagramSink(DatagramSinkInterface* sink) override {}
-
- std::string GetTransportParameters() const override {
- if (settings_.remote_transport_parameters) {
- return *settings_.remote_transport_parameters;
- }
- return transport_parameters_;
- }
-
- RTCError SetRemoteTransportParameters(
- absl::string_view remote_parameters) override {
- if (are_parameters_compatible_(GetTransportParameters(),
- remote_parameters)) {
- return RTCError::OK();
- }
- return RTCError(RTCErrorType::UNSUPPORTED_PARAMETER,
- "Incompatible remote transport parameters");
- }
-
- RTCError OpenChannel(int channel_id) override {
- return RTCError(RTCErrorType::UNSUPPORTED_OPERATION);
- }
-
- RTCError SendData(int channel_id,
- const SendDataParams& params,
- const rtc::CopyOnWriteBuffer& buffer) override {
- return RTCError(RTCErrorType::UNSUPPORTED_OPERATION);
- }
-
- RTCError CloseChannel(int channel_id) override {
- return RTCError(RTCErrorType::UNSUPPORTED_OPERATION);
- }
-
- void SetDataSink(DataChannelSink* /*sink*/) override {}
-
- bool IsReadyToSend() const override { return false; }
-
- rtc::PacketTransportInternal* packet_transport() { return packet_transport_; }
-
- void set_state(webrtc::MediaTransportState state) {
- if (state_callback_) {
- state_callback_->OnStateChanged(state);
- }
- }
-
- const MediaTransportSettings& settings() { return settings_; }
-
- private:
- const MediaTransportSettings settings_;
- const std::string transport_parameters_;
- const std::function<bool(absl::string_view, absl::string_view)>
- are_parameters_compatible_;
-
- rtc::PacketTransportInternal* packet_transport_ = nullptr;
- MediaTransportStateCallback* state_callback_ = nullptr;
-};
-
-} // namespace webrtc
-
-#endif // API_TEST_FAKE_DATAGRAM_TRANSPORT_H_
diff --git a/chromium/third_party/webrtc/api/test/fake_media_transport.h b/chromium/third_party/webrtc/api/test/fake_media_transport.h
deleted file mode 100644
index 530394710ab..00000000000
--- a/chromium/third_party/webrtc/api/test/fake_media_transport.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2018 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef API_TEST_FAKE_MEDIA_TRANSPORT_H_
-#define API_TEST_FAKE_MEDIA_TRANSPORT_H_
-
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "absl/algorithm/container.h"
-#include "api/test/fake_datagram_transport.h"
-#include "api/transport/media/media_transport_interface.h"
-
-namespace webrtc {
-
-// Fake media transport factory creates fake media transport.
-// Also creates fake datagram transport, since both media and datagram
-// transports are created by |MediaTransportFactory|.
-class FakeMediaTransportFactory : public MediaTransportFactory {
- public:
- explicit FakeMediaTransportFactory(
- const absl::optional<std::string>& transport_offer = "")
- : transport_offer_(transport_offer) {}
- ~FakeMediaTransportFactory() = default;
-
- std::string GetTransportName() const override { return "fake"; }
-
- RTCErrorOr<std::unique_ptr<MediaTransportInterface>> CreateMediaTransport(
- rtc::PacketTransportInternal* packet_transport,
- rtc::Thread* network_thread,
- const MediaTransportSettings& settings) override {
- return RTCError(RTCErrorType::UNSUPPORTED_OPERATION);
- }
-
- RTCErrorOr<std::unique_ptr<MediaTransportInterface>> CreateMediaTransport(
- rtc::Thread* network_thread,
- const MediaTransportSettings& settings) override {
- return RTCError(RTCErrorType::UNSUPPORTED_OPERATION);
- }
-
- RTCErrorOr<std::unique_ptr<DatagramTransportInterface>>
- CreateDatagramTransport(rtc::Thread* network_thread,
- const MediaTransportSettings& settings) override {
- return std::unique_ptr<DatagramTransportInterface>(
- new FakeDatagramTransport(settings, transport_offer_.value_or(""),
- transport_parameters_comparison_));
- }
-
- void set_transport_parameters_comparison(
- std::function<bool(absl::string_view, absl::string_view)> comparison) {
- transport_parameters_comparison_ = std::move(comparison);
- }
-
- private:
- const absl::optional<std::string> transport_offer_;
- std::function<bool(absl::string_view, absl::string_view)>
- transport_parameters_comparison_ =
- [](absl::string_view local, absl::string_view remote) {
- return local == remote;
- };
-};
-
-} // namespace webrtc
-
-#endif // API_TEST_FAKE_MEDIA_TRANSPORT_H_
diff --git a/chromium/third_party/webrtc/api/test/loopback_media_transport.cc b/chromium/third_party/webrtc/api/test/loopback_media_transport.cc
deleted file mode 100644
index 18ce93cd7ec..00000000000
--- a/chromium/third_party/webrtc/api/test/loopback_media_transport.cc
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * Copyright 2018 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "api/test/loopback_media_transport.h"
-
-#include <memory>
-
-#include "absl/algorithm/container.h"
-#include "rtc_base/time_utils.h"
-
-namespace webrtc {
-
-namespace {
-
-constexpr size_t kLoopbackMaxDatagramSize = 1200;
-
-class WrapperDatagramTransport : public DatagramTransportInterface {
- public:
- explicit WrapperDatagramTransport(DatagramTransportInterface* wrapped)
- : wrapped_(wrapped) {}
-
- // Datagram transport overrides.
- void Connect(rtc::PacketTransportInternal* packet_transport) override {
- return wrapped_->Connect(packet_transport);
- }
-
- CongestionControlInterface* congestion_control() override {
- return wrapped_->congestion_control();
- }
-
- void SetTransportStateCallback(
- MediaTransportStateCallback* callback) override {
- return wrapped_->SetTransportStateCallback(callback);
- }
-
- RTCError SendDatagram(rtc::ArrayView<const uint8_t> data,
- DatagramId datagram_id) override {
- return wrapped_->SendDatagram(data, datagram_id);
- }
-
- size_t GetLargestDatagramSize() const override {
- return wrapped_->GetLargestDatagramSize();
- }
-
- void SetDatagramSink(DatagramSinkInterface* sink) override {
- return wrapped_->SetDatagramSink(sink);
- }
-
- std::string GetTransportParameters() const override {
- return wrapped_->GetTransportParameters();
- }
-
- RTCError SetRemoteTransportParameters(absl::string_view parameters) override {
- return wrapped_->SetRemoteTransportParameters(parameters);
- }
-
- // Data channel overrides.
- RTCError OpenChannel(int channel_id) override {
- return wrapped_->OpenChannel(channel_id);
- }
-
- RTCError SendData(int channel_id,
- const SendDataParams& params,
- const rtc::CopyOnWriteBuffer& buffer) override {
- return wrapped_->SendData(channel_id, params, buffer);
- }
-
- RTCError CloseChannel(int channel_id) override {
- return wrapped_->CloseChannel(channel_id);
- }
-
- void SetDataSink(DataChannelSink* sink) override {
- wrapped_->SetDataSink(sink);
- }
-
- bool IsReadyToSend() const override { return wrapped_->IsReadyToSend(); }
-
- private:
- DatagramTransportInterface* wrapped_;
-};
-
-} // namespace
-
-WrapperMediaTransportFactory::WrapperMediaTransportFactory(
- DatagramTransportInterface* wrapped_datagram_transport)
- : wrapped_datagram_transport_(wrapped_datagram_transport) {}
-
-WrapperMediaTransportFactory::WrapperMediaTransportFactory(
- MediaTransportFactory* wrapped)
- : wrapped_factory_(wrapped) {}
-
-RTCErrorOr<std::unique_ptr<MediaTransportInterface>>
-WrapperMediaTransportFactory::CreateMediaTransport(
- rtc::PacketTransportInternal* packet_transport,
- rtc::Thread* network_thread,
- const MediaTransportSettings& settings) {
- return RTCError(RTCErrorType::UNSUPPORTED_OPERATION);
-}
-
-RTCErrorOr<std::unique_ptr<DatagramTransportInterface>>
-WrapperMediaTransportFactory::CreateDatagramTransport(
- rtc::Thread* network_thread,
- const MediaTransportSettings& settings) {
- created_transport_count_++;
- if (wrapped_factory_) {
- return wrapped_factory_->CreateDatagramTransport(network_thread, settings);
- }
- return {
- std::make_unique<WrapperDatagramTransport>(wrapped_datagram_transport_)};
-}
-
-std::string WrapperMediaTransportFactory::GetTransportName() const {
- if (wrapped_factory_) {
- return wrapped_factory_->GetTransportName();
- }
- return "wrapped-transport";
-}
-
-int WrapperMediaTransportFactory::created_transport_count() const {
- return created_transport_count_;
-}
-
-RTCErrorOr<std::unique_ptr<MediaTransportInterface>>
-WrapperMediaTransportFactory::CreateMediaTransport(
- rtc::Thread* network_thread,
- const MediaTransportSettings& settings) {
- return RTCError(RTCErrorType::UNSUPPORTED_OPERATION);
-}
-
-MediaTransportPair::MediaTransportPair(rtc::Thread* thread)
- : first_datagram_transport_(thread),
- second_datagram_transport_(thread),
- first_factory_(&first_datagram_transport_),
- second_factory_(&second_datagram_transport_) {
- first_datagram_transport_.Connect(&second_datagram_transport_);
- second_datagram_transport_.Connect(&first_datagram_transport_);
-}
-
-MediaTransportPair::~MediaTransportPair() = default;
-
-MediaTransportPair::LoopbackDataChannelTransport::LoopbackDataChannelTransport(
- rtc::Thread* thread)
- : thread_(thread) {}
-
-MediaTransportPair::LoopbackDataChannelTransport::
- ~LoopbackDataChannelTransport() {
- RTC_CHECK(data_sink_ == nullptr);
-}
-
-void MediaTransportPair::LoopbackDataChannelTransport::Connect(
- LoopbackDataChannelTransport* other) {
- other_ = other;
-}
-
-RTCError MediaTransportPair::LoopbackDataChannelTransport::OpenChannel(
- int channel_id) {
- // No-op. No need to open channels for the loopback.
- return RTCError::OK();
-}
-
-RTCError MediaTransportPair::LoopbackDataChannelTransport::SendData(
- int channel_id,
- const SendDataParams& params,
- const rtc::CopyOnWriteBuffer& buffer) {
- invoker_.AsyncInvoke<void>(RTC_FROM_HERE, thread_,
- [this, channel_id, params, buffer] {
- other_->OnData(channel_id, params.type, buffer);
- });
- return RTCError::OK();
-}
-
-RTCError MediaTransportPair::LoopbackDataChannelTransport::CloseChannel(
- int channel_id) {
- invoker_.AsyncInvoke<void>(RTC_FROM_HERE, thread_, [this, channel_id] {
- other_->OnRemoteCloseChannel(channel_id);
- rtc::CritScope lock(&sink_lock_);
- if (data_sink_) {
- data_sink_->OnChannelClosed(channel_id);
- }
- });
- return RTCError::OK();
-}
-
-void MediaTransportPair::LoopbackDataChannelTransport::SetDataSink(
- DataChannelSink* sink) {
- rtc::CritScope lock(&sink_lock_);
- data_sink_ = sink;
- if (data_sink_ && ready_to_send_) {
- data_sink_->OnReadyToSend();
- }
-}
-
-bool MediaTransportPair::LoopbackDataChannelTransport::IsReadyToSend() const {
- rtc::CritScope lock(&sink_lock_);
- return ready_to_send_;
-}
-
-void MediaTransportPair::LoopbackDataChannelTransport::FlushAsyncInvokes() {
- invoker_.Flush(thread_);
-}
-
-void MediaTransportPair::LoopbackDataChannelTransport::OnData(
- int channel_id,
- DataMessageType type,
- const rtc::CopyOnWriteBuffer& buffer) {
- rtc::CritScope lock(&sink_lock_);
- if (data_sink_) {
- data_sink_->OnDataReceived(channel_id, type, buffer);
- }
-}
-
-void MediaTransportPair::LoopbackDataChannelTransport::OnRemoteCloseChannel(
- int channel_id) {
- rtc::CritScope lock(&sink_lock_);
- if (data_sink_) {
- data_sink_->OnChannelClosing(channel_id);
- data_sink_->OnChannelClosed(channel_id);
- }
-}
-
-void MediaTransportPair::LoopbackDataChannelTransport::OnReadyToSend(
- bool ready_to_send) {
- invoker_.AsyncInvoke<void>(RTC_FROM_HERE, thread_, [this, ready_to_send] {
- rtc::CritScope lock(&sink_lock_);
- ready_to_send_ = ready_to_send;
- // Propagate state to data channel sink, if present.
- if (data_sink_ && ready_to_send_) {
- data_sink_->OnReadyToSend();
- }
- });
-}
-
-MediaTransportPair::LoopbackDatagramTransport::LoopbackDatagramTransport(
- rtc::Thread* thread)
- : thread_(thread), dc_transport_(thread) {}
-
-void MediaTransportPair::LoopbackDatagramTransport::Connect(
- LoopbackDatagramTransport* other) {
- other_ = other;
- dc_transport_.Connect(&other->dc_transport_);
-}
-
-void MediaTransportPair::LoopbackDatagramTransport::Connect(
- rtc::PacketTransportInternal* packet_transport) {
- if (state_after_connect_) {
- SetState(*state_after_connect_);
- }
-}
-
-CongestionControlInterface*
-MediaTransportPair::LoopbackDatagramTransport::congestion_control() {
- return nullptr;
-}
-
-void MediaTransportPair::LoopbackDatagramTransport::SetTransportStateCallback(
- MediaTransportStateCallback* callback) {
- RTC_DCHECK_RUN_ON(thread_);
- state_callback_ = callback;
- if (state_callback_) {
- state_callback_->OnStateChanged(state_);
- }
-}
-
-RTCError MediaTransportPair::LoopbackDatagramTransport::SendDatagram(
- rtc::ArrayView<const uint8_t> data,
- DatagramId datagram_id) {
- rtc::CopyOnWriteBuffer buffer;
- buffer.SetData(data.data(), data.size());
- invoker_.AsyncInvoke<void>(
- RTC_FROM_HERE, thread_, [this, datagram_id, buffer = std::move(buffer)] {
- RTC_DCHECK_RUN_ON(thread_);
- other_->DeliverDatagram(std::move(buffer));
- if (sink_) {
- DatagramAck ack;
- ack.datagram_id = datagram_id;
- ack.receive_timestamp = Timestamp::Micros(rtc::TimeMicros());
- sink_->OnDatagramAcked(ack);
- }
- });
- return RTCError::OK();
-}
-
-size_t MediaTransportPair::LoopbackDatagramTransport::GetLargestDatagramSize()
- const {
- return kLoopbackMaxDatagramSize;
-}
-
-void MediaTransportPair::LoopbackDatagramTransport::SetDatagramSink(
- DatagramSinkInterface* sink) {
- RTC_DCHECK_RUN_ON(thread_);
- sink_ = sink;
-}
-
-std::string
-MediaTransportPair::LoopbackDatagramTransport::GetTransportParameters() const {
- return transport_parameters_;
-}
-
-RTCError
-MediaTransportPair::LoopbackDatagramTransport::SetRemoteTransportParameters(
- absl::string_view remote_parameters) {
- RTC_DCHECK_RUN_ON(thread_);
- if (transport_parameters_comparison_(GetTransportParameters(),
- remote_parameters)) {
- return RTCError::OK();
- }
- return RTCError(RTCErrorType::UNSUPPORTED_PARAMETER,
- "Incompatible remote transport parameters");
-}
-
-RTCError MediaTransportPair::LoopbackDatagramTransport::OpenChannel(
- int channel_id) {
- return dc_transport_.OpenChannel(channel_id);
-}
-
-RTCError MediaTransportPair::LoopbackDatagramTransport::SendData(
- int channel_id,
- const SendDataParams& params,
- const rtc::CopyOnWriteBuffer& buffer) {
- return dc_transport_.SendData(channel_id, params, buffer);
-}
-
-RTCError MediaTransportPair::LoopbackDatagramTransport::CloseChannel(
- int channel_id) {
- return dc_transport_.CloseChannel(channel_id);
-}
-
-void MediaTransportPair::LoopbackDatagramTransport::SetDataSink(
- DataChannelSink* sink) {
- dc_transport_.SetDataSink(sink);
-}
-
-bool MediaTransportPair::LoopbackDatagramTransport::IsReadyToSend() const {
- return dc_transport_.IsReadyToSend();
-}
-
-void MediaTransportPair::LoopbackDatagramTransport::SetState(
- MediaTransportState state) {
- invoker_.AsyncInvoke<void>(RTC_FROM_HERE, thread_, [this, state] {
- RTC_DCHECK_RUN_ON(thread_);
- state_ = state;
- if (state_callback_) {
- state_callback_->OnStateChanged(state_);
- }
- });
- dc_transport_.OnReadyToSend(state == MediaTransportState::kWritable);
-}
-
-void MediaTransportPair::LoopbackDatagramTransport::SetStateAfterConnect(
- MediaTransportState state) {
- state_after_connect_ = state;
-}
-
-void MediaTransportPair::LoopbackDatagramTransport::FlushAsyncInvokes() {
- dc_transport_.FlushAsyncInvokes();
-}
-
-void MediaTransportPair::LoopbackDatagramTransport::DeliverDatagram(
- rtc::CopyOnWriteBuffer buffer) {
- RTC_DCHECK_RUN_ON(thread_);
- if (sink_) {
- sink_->OnDatagramReceived(buffer);
- }
-}
-
-} // namespace webrtc
diff --git a/chromium/third_party/webrtc/api/test/loopback_media_transport.h b/chromium/third_party/webrtc/api/test/loopback_media_transport.h
deleted file mode 100644
index 468965ba311..00000000000
--- a/chromium/third_party/webrtc/api/test/loopback_media_transport.h
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Copyright 2018 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef API_TEST_LOOPBACK_MEDIA_TRANSPORT_H_
-#define API_TEST_LOOPBACK_MEDIA_TRANSPORT_H_
-
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "api/transport/datagram_transport_interface.h"
-#include "api/transport/media/media_transport_interface.h"
-#include "rtc_base/async_invoker.h"
-#include "rtc_base/critical_section.h"
-#include "rtc_base/thread.h"
-#include "rtc_base/thread_checker.h"
-
-namespace webrtc {
-
-// Wrapper used to hand out unique_ptrs to loopback media
-// transport without ownership changes to the underlying
-// transport.
-// It works in two modes:
-// It can either wrap a factory, or it can wrap an existing interface.
-// In the former mode, it delegates the work to the wrapped factory.
-// In the latter mode, it always returns static instance of the transport
-// interface.
-//
-// Example use:
-// Factory wrap_static_interface = Wrapper(media_transport_interface);
-// Factory wrap_factory = Wrapper(wrap_static_interface);
-// The second factory may be created multiple times, and ownership may be passed
-// to the client. The first factory counts the number of invocations of
-// CreateMediaTransport();
-class WrapperMediaTransportFactory : public MediaTransportFactory {
- public:
- explicit WrapperMediaTransportFactory(
- DatagramTransportInterface* wrapped_datagram_transport);
- explicit WrapperMediaTransportFactory(MediaTransportFactory* wrapped);
-
- RTCErrorOr<std::unique_ptr<MediaTransportInterface>> CreateMediaTransport(
- rtc::PacketTransportInternal* packet_transport,
- rtc::Thread* network_thread,
- const MediaTransportSettings& settings) override;
-
- RTCErrorOr<std::unique_ptr<MediaTransportInterface>> CreateMediaTransport(
- rtc::Thread* network_thread,
- const MediaTransportSettings& settings) override;
-
- RTCErrorOr<std::unique_ptr<DatagramTransportInterface>>
- CreateDatagramTransport(rtc::Thread* network_thread,
- const MediaTransportSettings& settings) override;
-
- std::string GetTransportName() const override;
-
- int created_transport_count() const;
-
- private:
- DatagramTransportInterface* wrapped_datagram_transport_ = nullptr;
- MediaTransportFactory* wrapped_factory_ = nullptr;
- int created_transport_count_ = 0;
-};
-
-// Contains two MediaTransportsInterfaces that are connected to each other.
-// Currently supports audio only.
-class MediaTransportPair {
- public:
- struct Stats {
- int sent_audio_frames = 0;
- int received_audio_frames = 0;
- int sent_video_frames = 0;
- int received_video_frames = 0;
- };
-
- explicit MediaTransportPair(rtc::Thread* thread);
- ~MediaTransportPair();
-
- DatagramTransportInterface* first_datagram_transport() {
- return &first_datagram_transport_;
- }
- DatagramTransportInterface* second_datagram_transport() {
- return &second_datagram_transport_;
- }
-
- std::unique_ptr<MediaTransportFactory> first_factory() {
- return std::make_unique<WrapperMediaTransportFactory>(&first_factory_);
- }
-
- std::unique_ptr<MediaTransportFactory> second_factory() {
- return std::make_unique<WrapperMediaTransportFactory>(&second_factory_);
- }
-
- void SetState(MediaTransportState state) {
- first_datagram_transport_.SetState(state);
- second_datagram_transport_.SetState(state);
- }
-
- void SetFirstState(MediaTransportState state) {
- first_datagram_transport_.SetState(state);
- }
-
- void SetSecondStateAfterConnect(MediaTransportState state) {
- second_datagram_transport_.SetState(state);
- }
-
- void SetFirstDatagramTransportParameters(const std::string& params) {
- first_datagram_transport_.set_transport_parameters(params);
- }
-
- void SetSecondDatagramTransportParameters(const std::string& params) {
- second_datagram_transport_.set_transport_parameters(params);
- }
-
- void SetFirstDatagramTransportParametersComparison(
- std::function<bool(absl::string_view, absl::string_view)> comparison) {
- first_datagram_transport_.set_transport_parameters_comparison(
- std::move(comparison));
- }
-
- void SetSecondDatagramTransportParametersComparison(
- std::function<bool(absl::string_view, absl::string_view)> comparison) {
- second_datagram_transport_.set_transport_parameters_comparison(
- std::move(comparison));
- }
-
- void FlushAsyncInvokes() {
- first_datagram_transport_.FlushAsyncInvokes();
- second_datagram_transport_.FlushAsyncInvokes();
- }
-
- int first_factory_transport_count() const {
- return first_factory_.created_transport_count();
- }
-
- int second_factory_transport_count() const {
- return second_factory_.created_transport_count();
- }
-
- private:
- class LoopbackDataChannelTransport : public DataChannelTransportInterface {
- public:
- explicit LoopbackDataChannelTransport(rtc::Thread* thread);
- ~LoopbackDataChannelTransport() override;
-
- void Connect(LoopbackDataChannelTransport* other);
-
- RTCError OpenChannel(int channel_id) override;
-
- RTCError SendData(int channel_id,
- const SendDataParams& params,
- const rtc::CopyOnWriteBuffer& buffer) override;
-
- RTCError CloseChannel(int channel_id) override;
-
- bool IsReadyToSend() const override;
-
- void SetDataSink(DataChannelSink* sink) override;
-
- void OnReadyToSend(bool ready_to_send);
-
- void FlushAsyncInvokes();
-
- private:
- void OnData(int channel_id,
- DataMessageType type,
- const rtc::CopyOnWriteBuffer& buffer);
-
- void OnRemoteCloseChannel(int channel_id);
-
- rtc::Thread* const thread_;
- rtc::CriticalSection sink_lock_;
- DataChannelSink* data_sink_ RTC_GUARDED_BY(sink_lock_) = nullptr;
-
- bool ready_to_send_ RTC_GUARDED_BY(sink_lock_) = false;
-
- LoopbackDataChannelTransport* other_;
-
- rtc::AsyncInvoker invoker_;
- };
-
- class LoopbackDatagramTransport : public DatagramTransportInterface {
- public:
- explicit LoopbackDatagramTransport(rtc::Thread* thread);
-
- void Connect(LoopbackDatagramTransport* other);
-
- // Datagram transport overrides.
- void Connect(rtc::PacketTransportInternal* packet_transport) override;
- CongestionControlInterface* congestion_control() override;
- void SetTransportStateCallback(
- MediaTransportStateCallback* callback) override;
- RTCError SendDatagram(rtc::ArrayView<const uint8_t> data,
- DatagramId datagram_id) override;
- size_t GetLargestDatagramSize() const override;
- void SetDatagramSink(DatagramSinkInterface* sink) override;
- std::string GetTransportParameters() const override;
- RTCError SetRemoteTransportParameters(
- absl::string_view remote_parameters) override;
-
- // Data channel overrides.
- RTCError OpenChannel(int channel_id) override;
- RTCError SendData(int channel_id,
- const SendDataParams& params,
- const rtc::CopyOnWriteBuffer& buffer) override;
- RTCError CloseChannel(int channel_id) override;
- void SetDataSink(DataChannelSink* sink) override;
- bool IsReadyToSend() const override;
-
- // Loopback-specific functionality.
- void SetState(MediaTransportState state);
-
- // When Connect() is called, the datagram transport will enter this state.
- // This is useful for mimicking zero-RTT connectivity, for example.
- void SetStateAfterConnect(MediaTransportState state);
- void FlushAsyncInvokes();
-
- void set_transport_parameters(const std::string& value) {
- transport_parameters_ = value;
- }
-
- void set_transport_parameters_comparison(
- std::function<bool(absl::string_view, absl::string_view)> comparison) {
- thread_->Invoke<void>(
- RTC_FROM_HERE, [this, comparison = std::move(comparison)] {
- RTC_DCHECK_RUN_ON(thread_);
- transport_parameters_comparison_ = std::move(comparison);
- });
- }
-
- private:
- void DeliverDatagram(rtc::CopyOnWriteBuffer buffer);
-
- rtc::Thread* thread_;
- LoopbackDataChannelTransport dc_transport_;
-
- MediaTransportState state_ RTC_GUARDED_BY(thread_) =
- MediaTransportState::kPending;
- DatagramSinkInterface* sink_ RTC_GUARDED_BY(thread_) = nullptr;
- MediaTransportStateCallback* state_callback_ RTC_GUARDED_BY(thread_) =
- nullptr;
- LoopbackDatagramTransport* other_;
-
- std::string transport_parameters_;
- std::function<bool(absl::string_view, absl::string_view)>
- transport_parameters_comparison_ RTC_GUARDED_BY(thread_) =
- [](absl::string_view a, absl::string_view b) { return a == b; };
-
- absl::optional<MediaTransportState> state_after_connect_;
-
- rtc::AsyncInvoker invoker_;
- };
-
- LoopbackDatagramTransport first_datagram_transport_;
- LoopbackDatagramTransport second_datagram_transport_;
- WrapperMediaTransportFactory first_factory_;
- WrapperMediaTransportFactory second_factory_;
-};
-
-} // namespace webrtc
-
-#endif // API_TEST_LOOPBACK_MEDIA_TRANSPORT_H_
diff --git a/chromium/third_party/webrtc/api/test/loopback_media_transport_unittest.cc b/chromium/third_party/webrtc/api/test/loopback_media_transport_unittest.cc
deleted file mode 100644
index f036de3eae0..00000000000
--- a/chromium/third_party/webrtc/api/test/loopback_media_transport_unittest.cc
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright 2018 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "api/test/loopback_media_transport.h"
-
-#include <algorithm>
-#include <memory>
-#include <vector>
-
-#include "test/gmock.h"
-
-namespace webrtc {
-
-namespace {
-
-class MockMediaTransportAudioSinkInterface
- : public MediaTransportAudioSinkInterface {
- public:
- MOCK_METHOD2(OnData, void(uint64_t, MediaTransportEncodedAudioFrame));
-};
-
-class MockMediaTransportVideoSinkInterface
- : public MediaTransportVideoSinkInterface {
- public:
- MOCK_METHOD2(OnData, void(uint64_t, MediaTransportEncodedVideoFrame));
-};
-
-class MockMediaTransportKeyFrameRequestCallback
- : public MediaTransportKeyFrameRequestCallback {
- public:
- MOCK_METHOD1(OnKeyFrameRequested, void(uint64_t));
-};
-
-class MockDataChannelSink : public DataChannelSink {
- public:
- MOCK_METHOD3(OnDataReceived,
- void(int, DataMessageType, const rtc::CopyOnWriteBuffer&));
- MOCK_METHOD1(OnChannelClosing, void(int));
- MOCK_METHOD1(OnChannelClosed, void(int));
- MOCK_METHOD0(OnReadyToSend, void());
-};
-
-class MockStateCallback : public MediaTransportStateCallback {
- public:
- MOCK_METHOD1(OnStateChanged, void(MediaTransportState));
-};
-
-} // namespace
-
-TEST(LoopbackMediaTransport, DataDeliveredToSink) {
- std::unique_ptr<rtc::Thread> thread = rtc::Thread::Create();
- thread->Start();
- MediaTransportPair transport_pair(thread.get());
-
- MockDataChannelSink sink;
- transport_pair.first_datagram_transport()->SetDataSink(&sink);
-
- const int channel_id = 1;
- EXPECT_CALL(
- sink, OnDataReceived(
- channel_id, DataMessageType::kText,
- ::testing::Property<rtc::CopyOnWriteBuffer, const char*>(
- &rtc::CopyOnWriteBuffer::cdata, ::testing::StrEq("foo"))));
-
- SendDataParams params;
- params.type = DataMessageType::kText;
- rtc::CopyOnWriteBuffer buffer("foo");
- transport_pair.second_datagram_transport()->SendData(channel_id, params,
- buffer);
-
- transport_pair.FlushAsyncInvokes();
- transport_pair.first_datagram_transport()->SetDataSink(nullptr);
-}
-
-TEST(LoopbackMediaTransport, CloseDeliveredToSink) {
- std::unique_ptr<rtc::Thread> thread = rtc::Thread::Create();
- thread->Start();
- MediaTransportPair transport_pair(thread.get());
-
- MockDataChannelSink first_sink;
- transport_pair.first_datagram_transport()->SetDataSink(&first_sink);
-
- MockDataChannelSink second_sink;
- transport_pair.second_datagram_transport()->SetDataSink(&second_sink);
-
- const int channel_id = 1;
- {
- ::testing::InSequence s;
- EXPECT_CALL(second_sink, OnChannelClosing(channel_id));
- EXPECT_CALL(second_sink, OnChannelClosed(channel_id));
- EXPECT_CALL(first_sink, OnChannelClosed(channel_id));
- }
-
- transport_pair.first_datagram_transport()->CloseChannel(channel_id);
-
- transport_pair.FlushAsyncInvokes();
- transport_pair.first_datagram_transport()->SetDataSink(nullptr);
- transport_pair.second_datagram_transport()->SetDataSink(nullptr);
-}
-
-TEST(LoopbackMediaTransport, InitialStateDeliveredWhenCallbackSet) {
- std::unique_ptr<rtc::Thread> thread = rtc::Thread::Create();
- thread->Start();
- MediaTransportPair transport_pair(thread.get());
-
- MockStateCallback state_callback;
- EXPECT_CALL(state_callback, OnStateChanged(MediaTransportState::kPending));
-
- thread->Invoke<void>(RTC_FROM_HERE, [&transport_pair, &state_callback] {
- transport_pair.first_datagram_transport()->SetTransportStateCallback(
- &state_callback);
- });
- transport_pair.FlushAsyncInvokes();
-}
-
-TEST(LoopbackMediaTransport, ChangedStateDeliveredWhenCallbackSet) {
- std::unique_ptr<rtc::Thread> thread = rtc::Thread::Create();
- thread->Start();
- MediaTransportPair transport_pair(thread.get());
-
- transport_pair.SetState(MediaTransportState::kWritable);
- transport_pair.FlushAsyncInvokes();
-
- MockStateCallback state_callback;
-
- EXPECT_CALL(state_callback, OnStateChanged(MediaTransportState::kWritable));
- thread->Invoke<void>(RTC_FROM_HERE, [&transport_pair, &state_callback] {
- transport_pair.first_datagram_transport()->SetTransportStateCallback(
- &state_callback);
- });
- transport_pair.FlushAsyncInvokes();
-}
-
-TEST(LoopbackMediaTransport, StateChangeDeliveredToCallback) {
- std::unique_ptr<rtc::Thread> thread = rtc::Thread::Create();
- thread->Start();
- MediaTransportPair transport_pair(thread.get());
-
- MockStateCallback state_callback;
-
- EXPECT_CALL(state_callback, OnStateChanged(MediaTransportState::kPending));
- EXPECT_CALL(state_callback, OnStateChanged(MediaTransportState::kWritable));
- thread->Invoke<void>(RTC_FROM_HERE, [&transport_pair, &state_callback] {
- transport_pair.first_datagram_transport()->SetTransportStateCallback(
- &state_callback);
- });
- transport_pair.SetState(MediaTransportState::kWritable);
- transport_pair.FlushAsyncInvokes();
-}
-
-TEST(LoopbackMediaTransport, NotReadyToSendWhenDataSinkSet) {
- std::unique_ptr<rtc::Thread> thread = rtc::Thread::Create();
- thread->Start();
- MediaTransportPair transport_pair(thread.get());
-
- MockDataChannelSink data_channel_sink;
- EXPECT_CALL(data_channel_sink, OnReadyToSend()).Times(0);
-
- transport_pair.first_datagram_transport()->SetDataSink(&data_channel_sink);
- transport_pair.FlushAsyncInvokes();
- transport_pair.first_datagram_transport()->SetDataSink(nullptr);
-}
-
-TEST(LoopbackMediaTransport, ReadyToSendWhenDataSinkSet) {
- std::unique_ptr<rtc::Thread> thread = rtc::Thread::Create();
- thread->Start();
- MediaTransportPair transport_pair(thread.get());
-
- transport_pair.SetState(MediaTransportState::kWritable);
- transport_pair.FlushAsyncInvokes();
-
- MockDataChannelSink data_channel_sink;
- EXPECT_CALL(data_channel_sink, OnReadyToSend());
-
- transport_pair.first_datagram_transport()->SetDataSink(&data_channel_sink);
- transport_pair.FlushAsyncInvokes();
- transport_pair.first_datagram_transport()->SetDataSink(nullptr);
-}
-
-TEST(LoopbackMediaTransport, StateChangeDeliveredToDataSink) {
- std::unique_ptr<rtc::Thread> thread = rtc::Thread::Create();
- thread->Start();
- MediaTransportPair transport_pair(thread.get());
-
- MockDataChannelSink data_channel_sink;
- EXPECT_CALL(data_channel_sink, OnReadyToSend());
-
- transport_pair.first_datagram_transport()->SetDataSink(&data_channel_sink);
- transport_pair.SetState(MediaTransportState::kWritable);
- transport_pair.FlushAsyncInvokes();
- transport_pair.first_datagram_transport()->SetDataSink(nullptr);
-}
-
-} // namespace webrtc
diff --git a/chromium/third_party/webrtc/api/test/mock_audio_mixer.h b/chromium/third_party/webrtc/api/test/mock_audio_mixer.h
index aee717bebf4..88dc108ca3c 100644
--- a/chromium/third_party/webrtc/api/test/mock_audio_mixer.h
+++ b/chromium/third_party/webrtc/api/test/mock_audio_mixer.h
@@ -19,12 +19,9 @@ namespace test {
class MockAudioMixer : public AudioMixer {
public:
- MOCK_METHOD(bool, AddSource, (Source * audio_source), (override));
- MOCK_METHOD(void, RemoveSource, (Source * audio_source), (override));
- MOCK_METHOD(void,
- Mix,
- (size_t number_of_channels, AudioFrame* audio_frame_for_mixing),
- (override));
+ MOCK_METHOD(bool, AddSource, (Source*), (override));
+ MOCK_METHOD(void, RemoveSource, (Source*), (override));
+ MOCK_METHOD(void, Mix, (size_t number_of_channels, AudioFrame*), (override));
};
} // namespace test
} // namespace webrtc
diff --git a/chromium/third_party/webrtc/api/test/mock_peer_connection_factory_interface.h b/chromium/third_party/webrtc/api/test/mock_peer_connection_factory_interface.h
new file mode 100644
index 00000000000..19c3f4063e9
--- /dev/null
+++ b/chromium/third_party/webrtc/api/test/mock_peer_connection_factory_interface.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2020 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_TEST_MOCK_PEER_CONNECTION_FACTORY_INTERFACE_H_
+#define API_TEST_MOCK_PEER_CONNECTION_FACTORY_INTERFACE_H_
+
+#include <memory>
+#include <string>
+
+#include "api/peer_connection_interface.h"
+#include "test/gmock.h"
+
+namespace webrtc {
+
+class MockPeerConnectionFactoryInterface final
+ : public rtc::RefCountedObject<webrtc::PeerConnectionFactoryInterface> {
+ public:
+ rtc::scoped_refptr<MockPeerConnectionFactoryInterface> Create() {
+ return new MockPeerConnectionFactoryInterface();
+ }
+
+ MOCK_METHOD(void, SetOptions, (const Options&), (override));
+ MOCK_METHOD(rtc::scoped_refptr<PeerConnectionInterface>,
+ CreatePeerConnection,
+ (const PeerConnectionInterface::RTCConfiguration&,
+ PeerConnectionDependencies),
+ (override));
+ MOCK_METHOD(rtc::scoped_refptr<PeerConnectionInterface>,
+ CreatePeerConnection,
+ (const PeerConnectionInterface::RTCConfiguration&,
+ std::unique_ptr<cricket::PortAllocator>,
+ std::unique_ptr<rtc::RTCCertificateGeneratorInterface>,
+ PeerConnectionObserver*),
+ (override));
+ MOCK_METHOD(RtpCapabilities,
+ GetRtpSenderCapabilities,
+ (cricket::MediaType),
+ (const override));
+ MOCK_METHOD(RtpCapabilities,
+ GetRtpReceiverCapabilities,
+ (cricket::MediaType),
+ (const override));
+ MOCK_METHOD(rtc::scoped_refptr<MediaStreamInterface>,
+ CreateLocalMediaStream,
+ (const std::string&),
+ (override));
+ MOCK_METHOD(rtc::scoped_refptr<AudioSourceInterface>,
+ CreateAudioSource,
+ (const cricket::AudioOptions&),
+ (override));
+ MOCK_METHOD(rtc::scoped_refptr<VideoTrackInterface>,
+ CreateVideoTrack,
+ (const std::string&, VideoTrackSourceInterface*),
+ (override));
+ MOCK_METHOD(rtc::scoped_refptr<AudioTrackInterface>,
+ CreateAudioTrack,
+ (const std::string&, AudioSourceInterface*),
+ (override));
+ MOCK_METHOD(bool, StartAecDump, (FILE*, int64_t), (override));
+ MOCK_METHOD(void, StopAecDump, (), (override));
+
+ protected:
+ MockPeerConnectionFactoryInterface() = default;
+};
+
+} // namespace webrtc
+
+#endif // API_TEST_MOCK_PEER_CONNECTION_FACTORY_INTERFACE_H_
diff --git a/chromium/third_party/webrtc/api/test/mock_transformable_video_frame.h b/chromium/third_party/webrtc/api/test/mock_transformable_video_frame.h
new file mode 100644
index 00000000000..36798b5d730
--- /dev/null
+++ b/chromium/third_party/webrtc/api/test/mock_transformable_video_frame.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_TEST_MOCK_TRANSFORMABLE_VIDEO_FRAME_H_
+#define API_TEST_MOCK_TRANSFORMABLE_VIDEO_FRAME_H_
+
+#include <vector>
+
+#include "api/frame_transformer_interface.h"
+#include "test/gmock.h"
+
+namespace webrtc {
+
+class MockTransformableVideoFrame
+ : public webrtc::TransformableVideoFrameInterface {
+ public:
+ MOCK_METHOD(rtc::ArrayView<const uint8_t>, GetData, (), (const override));
+ MOCK_METHOD(void, SetData, (rtc::ArrayView<const uint8_t> data), (override));
+ MOCK_METHOD(uint32_t, GetTimestamp, (), (const override));
+ MOCK_METHOD(uint32_t, GetSsrc, (), (const, override));
+ MOCK_METHOD(bool, IsKeyFrame, (), (const, override));
+ MOCK_METHOD(std::vector<uint8_t>, GetAdditionalData, (), (const, override));
+ MOCK_METHOD(const webrtc::VideoFrameMetadata&,
+ GetMetadata,
+ (),
+ (const, override));
+};
+
+} // namespace webrtc
+
+#endif // API_TEST_MOCK_TRANSFORMABLE_VIDEO_FRAME_H_
diff --git a/chromium/third_party/webrtc/api/test/mock_video_bitrate_allocator_factory.h b/chromium/third_party/webrtc/api/test/mock_video_bitrate_allocator_factory.h
index c7d883a5b9c..16af191970e 100644
--- a/chromium/third_party/webrtc/api/test/mock_video_bitrate_allocator_factory.h
+++ b/chromium/third_party/webrtc/api/test/mock_video_bitrate_allocator_factory.h
@@ -26,7 +26,7 @@ class MockVideoBitrateAllocatorFactory
CreateVideoBitrateAllocator,
(const VideoCodec&),
(override));
- MOCK_METHOD(void, Die, (), ());
+ MOCK_METHOD(void, Die, ());
};
} // namespace webrtc
diff --git a/chromium/third_party/webrtc/api/test/mock_video_decoder_factory.h b/chromium/third_party/webrtc/api/test/mock_video_decoder_factory.h
index 1f832a156bd..98a5d40eb6f 100644
--- a/chromium/third_party/webrtc/api/test/mock_video_decoder_factory.h
+++ b/chromium/third_party/webrtc/api/test/mock_video_decoder_factory.h
@@ -27,12 +27,12 @@ class MockVideoDecoderFactory : public webrtc::VideoDecoderFactory {
MOCK_METHOD(std::vector<webrtc::SdpVideoFormat>,
GetSupportedFormats,
(),
- (const override));
+ (const, override));
MOCK_METHOD(std::unique_ptr<webrtc::VideoDecoder>,
CreateVideoDecoder,
(const webrtc::SdpVideoFormat&),
(override));
- MOCK_METHOD(void, Die, (), ());
+ MOCK_METHOD(void, Die, ());
};
} // namespace webrtc
diff --git a/chromium/third_party/webrtc/api/test/mock_video_encoder.h b/chromium/third_party/webrtc/api/test/mock_video_encoder.h
index c4b6b3e50c1..26d758fd6a3 100644
--- a/chromium/third_party/webrtc/api/test/mock_video_encoder.h
+++ b/chromium/third_party/webrtc/api/test/mock_video_encoder.h
@@ -23,8 +23,8 @@ class MockEncodedImageCallback : public EncodedImageCallback {
MOCK_METHOD(Result,
OnEncodedImage,
(const EncodedImage& encodedImage,
- const CodecSpecificInfo* codecSpecificInfo,
- const RTPFragmentationHeader* fragmentation),
+ const CodecSpecificInfo*,
+ const RTPFragmentationHeader*),
(override));
MOCK_METHOD(void, OnDroppedFrame, (DropReason reason), (override));
};
@@ -33,31 +33,41 @@ class MockVideoEncoder : public VideoEncoder {
public:
MOCK_METHOD(void,
SetFecControllerOverride,
- (FecControllerOverride * fec_controller_override),
+ (FecControllerOverride*),
(override));
MOCK_METHOD(int32_t,
InitEncode,
- (const VideoCodec* codecSettings,
- int32_t numberOfCores,
- size_t maxPayloadSize),
+ (const VideoCodec*, int32_t numberOfCores, size_t maxPayloadSize),
+ (override));
+ MOCK_METHOD(int32_t,
+ InitEncode,
+ (const VideoCodec*, const VideoEncoder::Settings& settings),
(override));
- MOCK_METHOD2(InitEncode,
- int32_t(const VideoCodec* codecSettings,
- const VideoEncoder::Settings& settings));
- MOCK_METHOD2(Encode,
- int32_t(const VideoFrame& inputImage,
- const std::vector<VideoFrameType>* frame_types));
- MOCK_METHOD1(RegisterEncodeCompleteCallback,
- int32_t(EncodedImageCallback* callback));
- MOCK_METHOD0(Release, int32_t());
- MOCK_METHOD0(Reset, int32_t());
- MOCK_METHOD1(SetRates, void(const RateControlParameters& parameters));
- MOCK_METHOD1(OnPacketLossRateUpdate, void(float packet_loss_rate));
- MOCK_METHOD1(OnRttUpdate, void(int64_t rtt_ms));
- MOCK_METHOD1(OnLossNotification,
- void(const LossNotification& loss_notification));
- MOCK_CONST_METHOD0(GetEncoderInfo, EncoderInfo(void));
+ MOCK_METHOD(int32_t,
+ Encode,
+ (const VideoFrame& inputImage,
+ const std::vector<VideoFrameType>*),
+ (override));
+ MOCK_METHOD(int32_t,
+ RegisterEncodeCompleteCallback,
+ (EncodedImageCallback*),
+ (override));
+ MOCK_METHOD(int32_t, Release, (), (override));
+ MOCK_METHOD(void,
+ SetRates,
+ (const RateControlParameters& parameters),
+ (override));
+ MOCK_METHOD(void,
+ OnPacketLossRateUpdate,
+ (float packet_loss_rate),
+ (override));
+ MOCK_METHOD(void, OnRttUpdate, (int64_t rtt_ms), (override));
+ MOCK_METHOD(void,
+ OnLossNotification,
+ (const LossNotification& loss_notification),
+ (override));
+ MOCK_METHOD(EncoderInfo, GetEncoderInfo, (), (const, override));
};
} // namespace webrtc
diff --git a/chromium/third_party/webrtc/api/test/mock_video_encoder_factory.h b/chromium/third_party/webrtc/api/test/mock_video_encoder_factory.h
index fa08dbd6bc2..1aa14631bed 100644
--- a/chromium/third_party/webrtc/api/test/mock_video_encoder_factory.h
+++ b/chromium/third_party/webrtc/api/test/mock_video_encoder_factory.h
@@ -27,17 +27,17 @@ class MockVideoEncoderFactory : public webrtc::VideoEncoderFactory {
MOCK_METHOD(std::vector<SdpVideoFormat>,
GetSupportedFormats,
(),
- (const override));
+ (const, override));
MOCK_METHOD(CodecInfo,
QueryVideoEncoder,
(const SdpVideoFormat&),
- (const override));
+ (const, override));
MOCK_METHOD(std::unique_ptr<VideoEncoder>,
CreateVideoEncoder,
(const SdpVideoFormat&),
(override));
- MOCK_METHOD(void, Die, (), ());
+ MOCK_METHOD(void, Die, ());
};
} // namespace webrtc
diff --git a/chromium/third_party/webrtc/api/test/network_emulation/BUILD.gn b/chromium/third_party/webrtc/api/test/network_emulation/BUILD.gn
index 5fda1e288a1..a3dd961c811 100644
--- a/chromium/third_party/webrtc/api/test/network_emulation/BUILD.gn
+++ b/chromium/third_party/webrtc/api/test/network_emulation/BUILD.gn
@@ -23,6 +23,6 @@ rtc_library("network_emulation") {
"../../units:data_rate",
"../../units:data_size",
"../../units:timestamp",
- "//third_party/abseil-cpp/absl/types:optional",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
diff --git a/chromium/third_party/webrtc/api/test/peerconnection_quality_test_fixture.h b/chromium/third_party/webrtc/api/test/peerconnection_quality_test_fixture.h
index 8165443d36e..35736876cce 100644
--- a/chromium/third_party/webrtc/api/test/peerconnection_quality_test_fixture.h
+++ b/chromium/third_party/webrtc/api/test/peerconnection_quality_test_fixture.h
@@ -33,13 +33,13 @@
#include "api/test/simulated_network.h"
#include "api/test/stats_observer_interface.h"
#include "api/test/video_quality_analyzer_interface.h"
-#include "api/transport/media/media_transport_interface.h"
#include "api/transport/network_control.h"
#include "api/units/time_delta.h"
#include "api/video_codecs/video_decoder_factory.h"
#include "api/video_codecs/video_encoder.h"
#include "api/video_codecs/video_encoder_factory.h"
#include "media/base/media_constants.h"
+#include "rtc_base/deprecation.h"
#include "rtc_base/network.h"
#include "rtc_base/rtc_certificate_generator.h"
#include "rtc_base/ssl_certificate.h"
@@ -287,8 +287,6 @@ class PeerConnectionE2EQualityTestFixture {
virtual PeerConfigurer* SetNetworkControllerFactory(
std::unique_ptr<NetworkControllerFactoryInterface>
network_controller_factory) = 0;
- virtual PeerConfigurer* SetMediaTransportFactory(
- std::unique_ptr<MediaTransportFactory> media_transport_factory) = 0;
virtual PeerConfigurer* SetVideoEncoderFactory(
std::unique_ptr<VideoEncoderFactory> video_encoder_factory) = 0;
virtual PeerConfigurer* SetVideoDecoderFactory(
@@ -337,6 +335,9 @@ class PeerConnectionE2EQualityTestFixture {
PeerConnectionInterface::RTCConfiguration configuration) = 0;
// Set bitrate parameters on PeerConnection. This constraints will be
// applied to all summed RTP streams for this peer.
+ virtual PeerConfigurer* SetBitrateSettings(
+ BitrateSettings bitrate_settings) = 0;
+ RTC_DEPRECATED
virtual PeerConfigurer* SetBitrateParameters(
PeerConnectionInterface::BitrateParameters bitrate_params) = 0;
};
@@ -448,6 +449,12 @@ class PeerConnectionE2EQualityTestFixture {
virtual void AddPeer(rtc::Thread* network_thread,
rtc::NetworkManager* network_manager,
rtc::FunctionView<void(PeerConfigurer*)> configurer) = 0;
+ // Runs the media quality test, which includes setting up the call with
+ // configured participants, running it according to provided |run_params| and
+ // terminating it properly at the end. During call duration media quality
+ // metrics are gathered, which are then reported to stdout and (if configured)
+ // to the json/protobuf output file through the WebRTC perf test results
+ // reporting system.
virtual void Run(RunParams run_params) = 0;
// Returns real test duration - the time of test execution measured during
diff --git a/chromium/third_party/webrtc/api/test/stats_observer_interface.h b/chromium/third_party/webrtc/api/test/stats_observer_interface.h
index 98c8dd937f2..ea4d6c23db9 100644
--- a/chromium/third_party/webrtc/api/test/stats_observer_interface.h
+++ b/chromium/third_party/webrtc/api/test/stats_observer_interface.h
@@ -11,9 +11,8 @@
#ifndef API_TEST_STATS_OBSERVER_INTERFACE_H_
#define API_TEST_STATS_OBSERVER_INTERFACE_H_
-#include <string>
-
-#include "api/stats_types.h"
+#include "absl/strings/string_view.h"
+#include "api/stats/rtc_stats_report.h"
namespace webrtc {
namespace webrtc_pc_e2e {
@@ -25,8 +24,9 @@ class StatsObserverInterface {
// Method called when stats reports are available for the PeerConnection
// identified by |pc_label|.
- virtual void OnStatsReports(const std::string& pc_label,
- const StatsReports& reports) = 0;
+ virtual void OnStatsReports(
+ absl::string_view pc_label,
+ const rtc::scoped_refptr<const RTCStatsReport>& report) = 0;
};
} // namespace webrtc_pc_e2e
diff --git a/chromium/third_party/webrtc/api/test/test_dependency_factory.cc b/chromium/third_party/webrtc/api/test/test_dependency_factory.cc
index e72f55aab57..41ad70cc3f7 100644
--- a/chromium/third_party/webrtc/api/test/test_dependency_factory.cc
+++ b/chromium/third_party/webrtc/api/test/test_dependency_factory.cc
@@ -14,22 +14,24 @@
#include <utility>
#include "rtc_base/checks.h"
-#include "rtc_base/thread_checker.h"
+#include "rtc_base/platform_thread_types.h"
namespace webrtc {
+namespace {
// This checks everything in this file gets called on the same thread. It's
// static because it needs to look at the static methods too.
-rtc::ThreadChecker* GetThreadChecker() {
- static rtc::ThreadChecker checker;
- return &checker;
+bool IsValidTestDependencyFactoryThread() {
+ const rtc::PlatformThreadRef main_thread = rtc::CurrentThreadRef();
+ return rtc::IsThreadRefEqual(main_thread, rtc::CurrentThreadRef());
}
+} // namespace
std::unique_ptr<TestDependencyFactory> TestDependencyFactory::instance_ =
nullptr;
const TestDependencyFactory& TestDependencyFactory::GetInstance() {
- RTC_DCHECK(GetThreadChecker()->IsCurrent());
+ RTC_DCHECK(IsValidTestDependencyFactoryThread());
if (instance_ == nullptr) {
instance_ = std::make_unique<TestDependencyFactory>();
}
@@ -38,14 +40,14 @@ const TestDependencyFactory& TestDependencyFactory::GetInstance() {
void TestDependencyFactory::SetInstance(
std::unique_ptr<TestDependencyFactory> instance) {
- RTC_DCHECK(GetThreadChecker()->IsCurrent());
+ RTC_DCHECK(IsValidTestDependencyFactoryThread());
RTC_CHECK(instance_ == nullptr);
instance_ = std::move(instance);
}
std::unique_ptr<VideoQualityTestFixtureInterface::InjectionComponents>
TestDependencyFactory::CreateComponents() const {
- RTC_DCHECK(GetThreadChecker()->IsCurrent());
+ RTC_DCHECK(IsValidTestDependencyFactoryThread());
return nullptr;
}
diff --git a/chromium/third_party/webrtc/api/test/video_quality_analyzer_interface.h b/chromium/third_party/webrtc/api/test/video_quality_analyzer_interface.h
index 0d3f4415348..c5370a7089e 100644
--- a/chromium/third_party/webrtc/api/test/video_quality_analyzer_interface.h
+++ b/chromium/third_party/webrtc/api/test/video_quality_analyzer_interface.h
@@ -14,7 +14,9 @@
#include <memory>
#include <string>
+#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
+#include "api/array_view.h"
#include "api/test/stats_observer_interface.h"
#include "api/video/encoded_image.h"
#include "api/video/video_frame.h"
@@ -76,42 +78,65 @@ class VideoQualityAnalyzerInterface : public StatsObserverInterface {
// calculations. Analyzer can perform simple calculations on the calling
// thread in each method, but should remember, that it is the same thread,
// that is used in video pipeline.
- virtual void Start(std::string test_case_name, int max_threads_count) {}
+ virtual void Start(std::string test_case_name,
+ rtc::ArrayView<const std::string> peer_names,
+ int max_threads_count) {}
// Will be called when frame was generated from the input stream.
+ // |peer_name| is name of the peer on which side frame was captured.
// Returns frame id, that will be set by framework to the frame.
- virtual uint16_t OnFrameCaptured(const std::string& stream_label,
+ virtual uint16_t OnFrameCaptured(absl::string_view peer_name,
+ const std::string& stream_label,
const VideoFrame& frame) = 0;
// Will be called before calling the encoder.
- virtual void OnFramePreEncode(const VideoFrame& frame) {}
+ // |peer_name| is name of the peer on which side frame came to encoder.
+ virtual void OnFramePreEncode(absl::string_view peer_name,
+ const VideoFrame& frame) {}
// Will be called for each EncodedImage received from encoder. Single
// VideoFrame can produce multiple EncodedImages. Each encoded image will
// have id from VideoFrame.
- virtual void OnFrameEncoded(uint16_t frame_id,
+ // |peer_name| is name of the peer on which side frame was encoded.
+ virtual void OnFrameEncoded(absl::string_view peer_name,
+ uint16_t frame_id,
const EncodedImage& encoded_image,
const EncoderStats& stats) {}
// Will be called for each frame dropped by encoder.
- virtual void OnFrameDropped(EncodedImageCallback::DropReason reason) {}
+ // |peer_name| is name of the peer on which side frame drop was detected.
+ virtual void OnFrameDropped(absl::string_view peer_name,
+ EncodedImageCallback::DropReason reason) {}
// Will be called before calling the decoder.
- virtual void OnFramePreDecode(uint16_t frame_id,
+ // |peer_name| is name of the peer on which side frame was received.
+ virtual void OnFramePreDecode(absl::string_view peer_name,
+ uint16_t frame_id,
const EncodedImage& encoded_image) {}
// Will be called after decoding the frame.
- virtual void OnFrameDecoded(const VideoFrame& frame,
+ // |peer_name| is name of the peer on which side frame was decoded.
+ virtual void OnFrameDecoded(absl::string_view peer_name,
+ const VideoFrame& frame,
const DecoderStats& stats) {}
// Will be called when frame will be obtained from PeerConnection stack.
- virtual void OnFrameRendered(const VideoFrame& frame) {}
+ // |peer_name| is name of the peer on which side frame was rendered.
+ virtual void OnFrameRendered(absl::string_view peer_name,
+ const VideoFrame& frame) {}
// Will be called if encoder return not WEBRTC_VIDEO_CODEC_OK.
// All available codes are listed in
// modules/video_coding/include/video_error_codes.h
- virtual void OnEncoderError(const VideoFrame& frame, int32_t error_code) {}
+ // |peer_name| is name of the peer on which side error acquired.
+ virtual void OnEncoderError(absl::string_view peer_name,
+ const VideoFrame& frame,
+ int32_t error_code) {}
// Will be called if decoder return not WEBRTC_VIDEO_CODEC_OK.
// All available codes are listed in
// modules/video_coding/include/video_error_codes.h
- virtual void OnDecoderError(uint16_t frame_id, int32_t error_code) {}
+ // |peer_name| is name of the peer on which side error acquired.
+ virtual void OnDecoderError(absl::string_view peer_name,
+ uint16_t frame_id,
+ int32_t error_code) {}
// Will be called every time new stats reports are available for the
// Peer Connection identified by |pc_label|.
- void OnStatsReports(const std::string& pc_label,
- const StatsReports& stats_reports) override {}
+ void OnStatsReports(
+ absl::string_view pc_label,
+ const rtc::scoped_refptr<const RTCStatsReport>& report) override {}
// Tells analyzer that analysis complete and it should calculate final
// statistics.