mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00

while cleaning up Call factory function, - pick rtp_transport_controller_send_factory based on presence in the config instead of based on the call site thus removing one extra factory function. - when Call is created through test helper TimeControllerBasedFactory use original media factory instead of direct factory, thus allow to configure degraded call through field trials in tests, and ensure difference with production code path stay minimal in the future. Bug: webrtc:15656 Change-Id: If9c2a9fc871e139502db2bec0a241d8d64c53720 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/330061 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41329}
98 lines
3.7 KiB
C++
98 lines
3.7 KiB
C++
/*
|
|
* Copyright 2017 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 "call/create_call.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
#include "absl/types/optional.h"
|
|
#include "api/test/simulated_network.h"
|
|
#include "api/units/time_delta.h"
|
|
#include "call/call.h"
|
|
#include "call/degraded_call.h"
|
|
#include "rtc_base/checks.h"
|
|
#include "rtc_base/experiments/field_trial_list.h"
|
|
#include "rtc_base/experiments/field_trial_parser.h"
|
|
|
|
namespace webrtc {
|
|
namespace {
|
|
using TimeScopedNetworkConfig = DegradedCall::TimeScopedNetworkConfig;
|
|
|
|
std::vector<TimeScopedNetworkConfig> GetNetworkConfigs(
|
|
const FieldTrialsView& trials,
|
|
bool send) {
|
|
FieldTrialStructList<TimeScopedNetworkConfig> trials_list(
|
|
{FieldTrialStructMember("queue_length_packets",
|
|
[](TimeScopedNetworkConfig* p) {
|
|
// FieldTrialParser does not natively support
|
|
// size_t type, so use this ugly cast as
|
|
// workaround.
|
|
return reinterpret_cast<unsigned*>(
|
|
&p->queue_length_packets);
|
|
}),
|
|
FieldTrialStructMember(
|
|
"queue_delay_ms",
|
|
[](TimeScopedNetworkConfig* p) { return &p->queue_delay_ms; }),
|
|
FieldTrialStructMember("delay_standard_deviation_ms",
|
|
[](TimeScopedNetworkConfig* p) {
|
|
return &p->delay_standard_deviation_ms;
|
|
}),
|
|
FieldTrialStructMember(
|
|
"link_capacity_kbps",
|
|
[](TimeScopedNetworkConfig* p) { return &p->link_capacity_kbps; }),
|
|
FieldTrialStructMember(
|
|
"loss_percent",
|
|
[](TimeScopedNetworkConfig* p) { return &p->loss_percent; }),
|
|
FieldTrialStructMember(
|
|
"allow_reordering",
|
|
[](TimeScopedNetworkConfig* p) { return &p->allow_reordering; }),
|
|
FieldTrialStructMember("avg_burst_loss_length",
|
|
[](TimeScopedNetworkConfig* p) {
|
|
return &p->avg_burst_loss_length;
|
|
}),
|
|
FieldTrialStructMember(
|
|
"packet_overhead",
|
|
[](TimeScopedNetworkConfig* p) { return &p->packet_overhead; }),
|
|
FieldTrialStructMember(
|
|
"duration",
|
|
[](TimeScopedNetworkConfig* p) { return &p->duration; })},
|
|
{});
|
|
ParseFieldTrial({&trials_list},
|
|
trials.Lookup(send ? "WebRTC-FakeNetworkSendConfig"
|
|
: "WebRTC-FakeNetworkReceiveConfig"));
|
|
return trials_list.Get();
|
|
}
|
|
|
|
} // namespace
|
|
|
|
std::unique_ptr<Call> CreateCall(const CallConfig& config) {
|
|
std::vector<DegradedCall::TimeScopedNetworkConfig> send_degradation_configs =
|
|
GetNetworkConfigs(config.env.field_trials(), /*send=*/true);
|
|
std::vector<DegradedCall::TimeScopedNetworkConfig>
|
|
receive_degradation_configs =
|
|
GetNetworkConfigs(config.env.field_trials(), /*send=*/false);
|
|
|
|
std::unique_ptr<Call> call = Call::Create(config);
|
|
|
|
if (!send_degradation_configs.empty() ||
|
|
!receive_degradation_configs.empty()) {
|
|
return std::make_unique<DegradedCall>(
|
|
std::move(call), send_degradation_configs, receive_degradation_configs);
|
|
}
|
|
|
|
return call;
|
|
}
|
|
|
|
} // namespace webrtc
|