Replace field trials with WebRtcKeyValueConfig in PacedSender
Replaces use of field trials in PacedSender with injectable WebRtcKeyValueConfig. Implementation still defaults to field trials. BUG: webrtc:10335 Change-Id: Ie8870d93d51e996e762f2c2de7545bad261b6bb7 Reviewed-on: https://webrtc-review.googlesource.com/c/123521 Commit-Queue: Per Kjellander <perkj@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Sebastian Jansson <srte@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26818}
This commit is contained in:

committed by
Commit Bot

parent
ce8e8677df
commit
7ef34f8505
@ -29,7 +29,9 @@ rtc_static_library("pacing") {
|
||||
deps = [
|
||||
":interval_budget",
|
||||
"..:module_api",
|
||||
"../../api/transport:field_trial_based_config",
|
||||
"../../api/transport:network_control",
|
||||
"../../api/transport:webrtc_key_value_config",
|
||||
"../../logging:rtc_event_bwe",
|
||||
"../../logging:rtc_event_log_api",
|
||||
"../../logging:rtc_event_pacing",
|
||||
|
@ -1,4 +1,6 @@
|
||||
include_rules = [
|
||||
"+system_wrappers",
|
||||
# Avoid directly using field_trial. Instead use WebRtcKeyValueConfig.
|
||||
"-system_wrappers/include/field_trial.h",
|
||||
"+logging/rtc_event_log"
|
||||
]
|
||||
|
@ -22,8 +22,8 @@
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "system_wrappers/include/clock.h"
|
||||
#include "system_wrappers/include/field_trial.h"
|
||||
|
||||
namespace webrtc {
|
||||
namespace {
|
||||
// Time limit in milliseconds between packet bursts.
|
||||
const int64_t kDefaultMinPacketLimitMs = 5;
|
||||
@ -35,23 +35,44 @@ const int64_t kMaxElapsedTimeMs = 2000;
|
||||
// time.
|
||||
const int64_t kMaxIntervalTimeMs = 30;
|
||||
|
||||
} // namespace
|
||||
bool IsDisabled(const WebRtcKeyValueConfig& field_trials,
|
||||
absl::string_view key) {
|
||||
return field_trials.Lookup(key).find("Disabled") == 0;
|
||||
}
|
||||
|
||||
namespace webrtc {
|
||||
bool IsEnabled(const WebRtcKeyValueConfig& field_trials,
|
||||
absl::string_view key) {
|
||||
return field_trials.Lookup(key).find("Enabled") == 0;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
const int64_t PacedSender::kMaxQueueLengthMs = 2000;
|
||||
const float PacedSender::kDefaultPaceMultiplier = 2.5f;
|
||||
|
||||
PacedSender::PacedSender(Clock* clock,
|
||||
PacketSender* packet_sender,
|
||||
RtcEventLog* event_log)
|
||||
RtcEventLog* event_log,
|
||||
const WebRtcKeyValueConfig* field_trials)
|
||||
: PacedSender(clock,
|
||||
packet_sender,
|
||||
event_log,
|
||||
field_trials
|
||||
? *field_trials
|
||||
: static_cast<const webrtc::WebRtcKeyValueConfig&>(
|
||||
FieldTrialBasedConfig())) {}
|
||||
|
||||
PacedSender::PacedSender(Clock* clock,
|
||||
PacketSender* packet_sender,
|
||||
RtcEventLog* event_log,
|
||||
const WebRtcKeyValueConfig& field_trials)
|
||||
: clock_(clock),
|
||||
packet_sender_(packet_sender),
|
||||
alr_detector_(),
|
||||
drain_large_queues_(!field_trial::IsDisabled("WebRTC-Pacer-DrainQueue")),
|
||||
drain_large_queues_(!IsDisabled(field_trials, "WebRTC-Pacer-DrainQueue")),
|
||||
send_padding_if_silent_(
|
||||
field_trial::IsEnabled("WebRTC-Pacer-PadInSilence")),
|
||||
pace_audio_(!field_trial::IsDisabled("WebRTC-Pacer-BlockAudio")),
|
||||
IsEnabled(field_trials, "WebRTC-Pacer-PadInSilence")),
|
||||
pace_audio_(!IsDisabled(field_trials, "WebRTC-Pacer-BlockAudio")),
|
||||
min_packet_limit_ms_("", kDefaultMinPacketLimitMs),
|
||||
last_timestamp_ms_(clock_->TimeInMilliseconds()),
|
||||
paused_(false),
|
||||
@ -76,7 +97,7 @@ PacedSender::PacedSender(Clock* clock,
|
||||
"pushback experiment must be enabled.";
|
||||
}
|
||||
ParseFieldTrial({&min_packet_limit_ms_},
|
||||
field_trial::FindFullName("WebRTC-Pacer-MinPacketLimitMs"));
|
||||
field_trials.Lookup("WebRTC-Pacer-MinPacketLimitMs"));
|
||||
UpdateBudgetWithElapsedTime(min_packet_limit_ms_);
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,9 @@
|
||||
#include <memory>
|
||||
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/transport/field_trial_based_config.h"
|
||||
#include "api/transport/network_types.h"
|
||||
#include "api/transport/webrtc_key_value_config.h"
|
||||
#include "modules/pacing/bitrate_prober.h"
|
||||
#include "modules/pacing/interval_budget.h"
|
||||
#include "modules/pacing/pacer.h"
|
||||
@ -71,7 +73,8 @@ class PacedSender : public Pacer {
|
||||
|
||||
PacedSender(Clock* clock,
|
||||
PacketSender* packet_sender,
|
||||
RtcEventLog* event_log);
|
||||
RtcEventLog* event_log,
|
||||
const WebRtcKeyValueConfig* field_trials = nullptr);
|
||||
|
||||
~PacedSender() override;
|
||||
|
||||
@ -147,6 +150,11 @@ class PacedSender : public Pacer {
|
||||
void SetQueueTimeLimit(int limit_ms);
|
||||
|
||||
private:
|
||||
PacedSender(Clock* clock,
|
||||
PacketSender* packet_sender,
|
||||
RtcEventLog* event_log,
|
||||
const WebRtcKeyValueConfig& field_trials);
|
||||
|
||||
int64_t UpdateTimeAndGetElapsedMs(int64_t now_us)
|
||||
RTC_EXCLUSIVE_LOCKS_REQUIRED(critsect_);
|
||||
bool ShouldSendKeepalive(int64_t at_time_us) const
|
||||
|
Reference in New Issue
Block a user