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