Update test/scenario to use Environment

Bug: webrtc:15656
Change-Id: Ic1508d01dce449103cdf1a507636617bda3dba22
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/329200
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41281}
This commit is contained in:
Danil Chapovalov 2023-11-29 19:05:54 +01:00 committed by WebRTC LUCI CQ
parent 7b4b29a13f
commit 59d0b8de33
5 changed files with 37 additions and 44 deletions

View File

@ -86,10 +86,11 @@ if (rtc_include_tests && !build_with_chromium) {
"../../api:rtp_parameters", "../../api:rtp_parameters",
"../../api:sequence_checker", "../../api:sequence_checker",
"../../api:time_controller", "../../api:time_controller",
"../../api:time_controller",
"../../api:transport_api", "../../api:transport_api",
"../../api/audio_codecs:builtin_audio_decoder_factory", "../../api/audio_codecs:builtin_audio_decoder_factory",
"../../api/audio_codecs:builtin_audio_encoder_factory", "../../api/audio_codecs:builtin_audio_encoder_factory",
"../../api/environment",
"../../api/environment:environment_factory",
"../../api/rtc_event_log", "../../api/rtc_event_log",
"../../api/rtc_event_log:rtc_event_log_factory", "../../api/rtc_event_log:rtc_event_log_factory",
"../../api/task_queue", "../../api/task_queue",
@ -146,7 +147,6 @@ if (rtc_include_tests && !build_with_chromium) {
"../../rtc_base/synchronization:mutex", "../../rtc_base/synchronization:mutex",
"../../rtc_base/task_utils:repeating_task", "../../rtc_base/task_utils:repeating_task",
"../../system_wrappers", "../../system_wrappers",
"../../system_wrappers:field_trial",
"../../video/config:streams_config", "../../video/config:streams_config",
"../logging:log_writer", "../logging:log_writer",
"../network:emulated_network", "../network:emulated_network",

View File

@ -13,6 +13,8 @@
#include <memory> #include <memory>
#include <utility> #include <utility>
#include "api/environment/environment.h"
#include "api/environment/environment_factory.h"
#include "api/media_types.h" #include "api/media_types.h"
#include "api/rtc_event_log/rtc_event_log.h" #include "api/rtc_event_log/rtc_event_log.h"
#include "api/rtc_event_log/rtc_event_log_factory.h" #include "api/rtc_event_log/rtc_event_log_factory.h"
@ -60,37 +62,27 @@ CallClientFakeAudio InitAudio(TimeController* time_controller) {
} }
std::unique_ptr<Call> CreateCall( std::unique_ptr<Call> CreateCall(
TimeController* time_controller, const Environment& env,
RtcEventLog* event_log,
CallClientConfig config, CallClientConfig config,
LoggingNetworkControllerFactory* network_controller_factory, LoggingNetworkControllerFactory* network_controller_factory,
rtc::scoped_refptr<AudioState> audio_state) { rtc::scoped_refptr<AudioState> audio_state) {
CallConfig call_config(event_log); CallConfig call_config(env);
call_config.bitrate_config.max_bitrate_bps = call_config.bitrate_config.max_bitrate_bps =
config.transport.rates.max_rate.bps_or(-1); config.transport.rates.max_rate.bps_or(-1);
call_config.bitrate_config.min_bitrate_bps = call_config.bitrate_config.min_bitrate_bps =
config.transport.rates.min_rate.bps(); config.transport.rates.min_rate.bps();
call_config.bitrate_config.start_bitrate_bps = call_config.bitrate_config.start_bitrate_bps =
config.transport.rates.start_rate.bps(); config.transport.rates.start_rate.bps();
call_config.task_queue_factory = time_controller->GetTaskQueueFactory();
call_config.network_controller_factory = network_controller_factory; call_config.network_controller_factory = network_controller_factory;
call_config.audio_state = audio_state; call_config.audio_state = audio_state;
call_config.trials = config.field_trials; return Call::Create(call_config);
Clock* clock = time_controller->GetClock();
return Call::Create(call_config, clock,
RtpTransportControllerSendFactory().Create(
call_config.ExtractTransportConfig(), clock));
} }
std::unique_ptr<RtcEventLog> CreateEventLog( std::unique_ptr<RtcEventLog> CreateEventLog(
TaskQueueFactory* task_queue_factory, const Environment& env,
LogWriterFactoryInterface* log_writer_factory) { LogWriterFactoryInterface& log_writer_factory) {
if (!log_writer_factory) { auto event_log = RtcEventLogFactory().Create(env);
return std::make_unique<RtcEventLogNull>(); bool success = event_log->StartLogging(log_writer_factory.Create(".rtc.dat"),
}
auto event_log = RtcEventLogFactory(task_queue_factory)
.CreateRtcEventLog(RtcEventLog::EncodingType::NewFormat);
bool success = event_log->StartLogging(log_writer_factory->Create(".rtc.dat"),
kEventLogOutputIntervalMs); kEventLogOutputIntervalMs);
RTC_CHECK(success); RTC_CHECK(success);
return event_log; return event_log;
@ -218,22 +210,25 @@ CallClient::CallClient(
std::unique_ptr<LogWriterFactoryInterface> log_writer_factory, std::unique_ptr<LogWriterFactoryInterface> log_writer_factory,
CallClientConfig config) CallClientConfig config)
: time_controller_(time_controller), : time_controller_(time_controller),
clock_(time_controller->GetClock()), env_(CreateEnvironment(time_controller_->CreateTaskQueueFactory(),
time_controller_->GetClock())),
log_writer_factory_(std::move(log_writer_factory)), log_writer_factory_(std::move(log_writer_factory)),
network_controller_factory_(log_writer_factory_.get(), config.transport), network_controller_factory_(log_writer_factory_.get(), config.transport),
task_queue_(time_controller->GetTaskQueueFactory()->CreateTaskQueue( task_queue_(env_.task_queue_factory().CreateTaskQueue(
"CallClient", "CallClient",
TaskQueueFactory::Priority::NORMAL)) { TaskQueueFactory::Priority::NORMAL)) {
config.field_trials = &field_trials_;
SendTask([this, config] { SendTask([this, config] {
event_log_ = CreateEventLog(time_controller_->GetTaskQueueFactory(), if (log_writer_factory_ != nullptr) {
log_writer_factory_.get()); EnvironmentFactory env_factory(env_);
env_factory.Set(CreateEventLog(env_, *log_writer_factory_));
env_ = env_factory.Create();
}
fake_audio_setup_ = InitAudio(time_controller_); fake_audio_setup_ = InitAudio(time_controller_);
call_ = call_ = CreateCall(env_, config, &network_controller_factory_,
CreateCall(time_controller_, event_log_.get(), config, fake_audio_setup_.audio_state);
&network_controller_factory_, fake_audio_setup_.audio_state); transport_ =
transport_ = std::make_unique<NetworkNodeTransport>(clock_, call_.get()); std::make_unique<NetworkNodeTransport>(&env_.clock(), call_.get());
}); });
} }
@ -242,9 +237,8 @@ CallClient::~CallClient() {
call_.reset(); call_.reset();
fake_audio_setup_ = {}; fake_audio_setup_ = {};
rtc::Event done; rtc::Event done;
event_log_->StopLogging([&done] { done.Set(); }); env_.event_log().StopLogging([&done] { done.Set(); });
done.Wait(rtc::Event::kForever); done.Wait(rtc::Event::kForever);
event_log_.reset();
}); });
} }
@ -282,7 +276,7 @@ DataRate CallClient::padding_rate() const {
void CallClient::SetRemoteBitrate(DataRate bitrate) { void CallClient::SetRemoteBitrate(DataRate bitrate) {
RemoteBitrateReport msg; RemoteBitrateReport msg;
msg.bandwidth = bitrate; msg.bandwidth = bitrate;
msg.receive_time = clock_->CurrentTime(); msg.receive_time = env_.clock().CurrentTime();
network_controller_factory_.SetRemoteBitrateEstimate(msg); network_controller_factory_.SetRemoteBitrateEstimate(msg);
} }

View File

@ -17,6 +17,7 @@
#include <vector> #include <vector>
#include "api/array_view.h" #include "api/array_view.h"
#include "api/environment/environment.h"
#include "api/rtc_event_log/rtc_event_log.h" #include "api/rtc_event_log/rtc_event_log.h"
#include "api/rtp_parameters.h" #include "api/rtp_parameters.h"
#include "api/test/time_controller.h" #include "api/test/time_controller.h"
@ -156,9 +157,8 @@ class CallClient : public EmulatedNetworkReceiverInterface {
void UnBind(); void UnBind();
TimeController* const time_controller_; TimeController* const time_controller_;
Clock* clock_; Environment env_;
const std::unique_ptr<LogWriterFactoryInterface> log_writer_factory_; const std::unique_ptr<LogWriterFactoryInterface> log_writer_factory_;
std::unique_ptr<RtcEventLog> event_log_;
LoggingNetworkControllerFactory network_controller_factory_; LoggingNetworkControllerFactory network_controller_factory_;
CallClientFakeAudio fake_audio_setup_; CallClientFakeAudio fake_audio_setup_;
std::unique_ptr<Call> call_; std::unique_ptr<Call> call_;
@ -175,8 +175,6 @@ class CallClient : public EmulatedNetworkReceiverInterface {
std::map<uint32_t, MediaType> ssrc_media_types_; std::map<uint32_t, MediaType> ssrc_media_types_;
// Defined last so it's destroyed first. // Defined last so it's destroyed first.
TaskQueueForTest task_queue_; TaskQueueForTest task_queue_;
const FieldTrialBasedConfig field_trials_;
}; };
class CallClientPair { class CallClientPair {

View File

@ -57,7 +57,6 @@ struct CallClientConfig {
// The number of bites that can be sent in one burst is pacer_burst_interval * // The number of bites that can be sent in one burst is pacer_burst_interval *
// current bwe. 40ms is the default Chrome setting. // current bwe. 40ms is the default Chrome setting.
TimeDelta pacer_burst_interval = TimeDelta::Millis(40); TimeDelta pacer_burst_interval = TimeDelta::Millis(40);
const FieldTrialsView* field_trials = nullptr;
}; };
struct PacketStreamConfig { struct PacketStreamConfig {

View File

@ -372,9 +372,9 @@ SendVideoStream::SendVideoStream(CallClient* sender,
VideoFrameMatcher* matcher) VideoFrameMatcher* matcher)
: sender_(sender), config_(config) { : sender_(sender), config_(config) {
video_capturer_ = std::make_unique<FrameGeneratorCapturer>( video_capturer_ = std::make_unique<FrameGeneratorCapturer>(
sender_->clock_, CreateFrameGenerator(sender_->clock_, config.source), &sender_->env_.clock(),
config.source.framerate, CreateFrameGenerator(&sender_->env_.clock(), config.source),
*sender->time_controller_->GetTaskQueueFactory()); config.source.framerate, sender_->env_.task_queue_factory());
video_capturer_->Init(); video_capturer_->Init();
using Encoder = VideoStreamConfig::Encoder; using Encoder = VideoStreamConfig::Encoder;
@ -386,9 +386,11 @@ SendVideoStream::SendVideoStream(CallClient* sender,
MutexLock lock(&mutex_); MutexLock lock(&mutex_);
std::unique_ptr<FakeEncoder> encoder; std::unique_ptr<FakeEncoder> encoder;
if (config_.encoder.codec == Codec::kVideoCodecVP8) { if (config_.encoder.codec == Codec::kVideoCodecVP8) {
encoder = std::make_unique<test::FakeVp8Encoder>(sender_->clock_); encoder = std::make_unique<test::FakeVp8Encoder>(
&sender_->env_.clock());
} else if (config_.encoder.codec == Codec::kVideoCodecGeneric) { } else if (config_.encoder.codec == Codec::kVideoCodecGeneric) {
encoder = std::make_unique<test::FakeEncoder>(sender_->clock_); encoder =
std::make_unique<test::FakeEncoder>(&sender_->env_.clock());
} else { } else {
RTC_DCHECK_NOTREACHED(); RTC_DCHECK_NOTREACHED();
} }
@ -436,7 +438,7 @@ SendVideoStream::SendVideoStream(CallClient* sender,
if (matcher->Active()) { if (matcher->Active()) {
frame_tap_ = std::make_unique<ForwardingCapturedFrameTap>( frame_tap_ = std::make_unique<ForwardingCapturedFrameTap>(
sender_->clock_, matcher, video_capturer_.get()); &sender_->env_.clock(), matcher, video_capturer_.get());
send_stream_->SetSource(frame_tap_.get(), send_stream_->SetSource(frame_tap_.get(),
config.encoder.degradation_preference); config.encoder.degradation_preference);
} else { } else {
@ -565,8 +567,8 @@ ReceiveVideoStream::ReceiveVideoStream(CallClient* receiver,
for (size_t i = 0; i < num_streams; ++i) { for (size_t i = 0; i < num_streams; ++i) {
rtc::VideoSinkInterface<VideoFrame>* renderer = &fake_renderer_; rtc::VideoSinkInterface<VideoFrame>* renderer = &fake_renderer_;
if (matcher->Active()) { if (matcher->Active()) {
render_taps_.emplace_back( render_taps_.emplace_back(std::make_unique<DecodedFrameTap>(
std::make_unique<DecodedFrameTap>(receiver_->clock_, matcher, i)); &receiver_->env_.clock(), matcher, i));
renderer = render_taps_.back().get(); renderer = render_taps_.back().get();
} }
auto recv_config = CreateVideoReceiveStreamConfig( auto recv_config = CreateVideoReceiveStreamConfig(