Remove unused WebRTC-LimitPaddingSize field trial

Bug: webrtc:11508
Change-Id: Ib7d48e23bd44e2f948d51800090fc14b873d11eb
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/268122
Auto-Submit: Erik Språng <sprang@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37485}
This commit is contained in:
Erik Språng
2022-07-07 14:49:18 +02:00
committed by WebRTC LUCI CQ
parent eb91fe48fe
commit 28bc2ca92c
5 changed files with 18 additions and 63 deletions

View File

@ -656,6 +656,7 @@ if (rtc_include_tests) {
"../../test:mock_transport", "../../test:mock_transport",
"../../test:rtp_test_utils", "../../test:rtp_test_utils",
"../../test:run_loop", "../../test:run_loop",
"../../test:scoped_key_value_config",
"../../test:test_support", "../../test:test_support",
"../../test/time_controller:time_controller", "../../test/time_controller:time_controller",
"../video_coding:codec_globals_headers", "../video_coding:codec_globals_headers",

View File

@ -165,19 +165,13 @@ class FieldTrialConfig : public FieldTrialsView {
return trials; return trials;
} }
FieldTrialConfig() : overhead_enabled_(false), max_padding_factor_(1200) {} FieldTrialConfig() : overhead_enabled_(false) {}
~FieldTrialConfig() override {} ~FieldTrialConfig() override {}
void SetOverHeadEnabled(bool enabled) { overhead_enabled_ = enabled; } void SetOverHeadEnabled(bool enabled) { overhead_enabled_ = enabled; }
void SetMaxPaddingFactor(double factor) { max_padding_factor_ = factor; }
std::string Lookup(absl::string_view key) const override { std::string Lookup(absl::string_view key) const override {
if (key == "WebRTC-LimitPaddingSize") { if (key == "WebRTC-SendSideBwe-WithOverhead") {
char string_buf[32];
rtc::SimpleStringBuilder ssb(string_buf);
ssb << "factor:" << max_padding_factor_;
return ssb.str();
} else if (key == "WebRTC-SendSideBwe-WithOverhead") {
return overhead_enabled_ ? "Enabled" : "Disabled"; return overhead_enabled_ ? "Enabled" : "Disabled";
} }
return ""; return "";
@ -185,7 +179,6 @@ class FieldTrialConfig : public FieldTrialsView {
private: private:
bool overhead_enabled_; bool overhead_enabled_;
double max_padding_factor_;
}; };
class RtpRtcpModule : public RtcpPacketTypeCounterObserver, class RtpRtcpModule : public RtcpPacketTypeCounterObserver,

View File

@ -46,6 +46,10 @@ constexpr size_t kRtpHeaderLength = 12;
// Min size needed to get payload padding from packet history. // Min size needed to get payload padding from packet history.
constexpr int kMinPayloadPaddingBytes = 50; constexpr int kMinPayloadPaddingBytes = 50;
// Determines how much larger a payload padding packet may be, compared to the
// requested padding size.
constexpr double kMaxPaddingSizeFactor = 3.0;
template <typename Extension> template <typename Extension>
constexpr RtpExtensionSize CreateExtensionSize() { constexpr RtpExtensionSize CreateExtensionSize() {
return {Extension::kId, Extension::kValueSizeBytes}; return {Extension::kId, Extension::kValueSizeBytes};
@ -139,21 +143,6 @@ bool HasBweExtension(const RtpHeaderExtensionMap& extensions_map) {
extensions_map.IsRegistered(kRtpExtensionTransmissionTimeOffset); extensions_map.IsRegistered(kRtpExtensionTransmissionTimeOffset);
} }
double GetMaxPaddingSizeFactor(const FieldTrialsView* field_trials) {
// Too low factor means RTX payload padding is rarely used and ineffective.
// Too high means we risk interrupting regular media packets.
// In practice, 3x seems to yield reasonable results.
constexpr double kDefaultFactor = 3.0;
if (!field_trials) {
return kDefaultFactor;
}
FieldTrialOptional<double> factor("factor", kDefaultFactor);
ParseFieldTrial({&factor}, field_trials->Lookup("WebRTC-LimitPaddingSize"));
RTC_CHECK_GE(factor.Value(), 0.0);
return factor.Value();
}
} // namespace } // namespace
RTPSender::RTPSender(const RtpRtcpInterface::Configuration& config, RTPSender::RTPSender(const RtpRtcpInterface::Configuration& config,
@ -166,7 +155,6 @@ RTPSender::RTPSender(const RtpRtcpInterface::Configuration& config,
rtx_ssrc_(config.rtx_send_ssrc), rtx_ssrc_(config.rtx_send_ssrc),
flexfec_ssrc_(config.fec_generator ? config.fec_generator->FecSsrc() flexfec_ssrc_(config.fec_generator ? config.fec_generator->FecSsrc()
: absl::nullopt), : absl::nullopt),
max_padding_size_factor_(GetMaxPaddingSizeFactor(config.field_trials)),
packet_history_(packet_history), packet_history_(packet_history),
paced_sender_(packet_sender), paced_sender_(packet_sender),
sending_media_(true), // Default to sending media. sending_media_(true), // Default to sending media.
@ -392,11 +380,10 @@ std::vector<std::unique_ptr<RtpPacketToSend>> RTPSender::GeneratePadding(
packet_history_->GetPayloadPaddingPacket( packet_history_->GetPayloadPaddingPacket(
[&](const RtpPacketToSend& packet) [&](const RtpPacketToSend& packet)
-> std::unique_ptr<RtpPacketToSend> { -> std::unique_ptr<RtpPacketToSend> {
// Limit overshoot, generate <= `max_padding_size_factor_` * // Limit overshoot, generate <= `kMaxPaddingSizeFactor` *
// target_size_bytes. // `target_size_bytes`.
const size_t max_overshoot_bytes = static_cast<size_t>( const size_t max_overshoot_bytes = static_cast<size_t>(
((max_padding_size_factor_ - 1.0) * target_size_bytes) + ((kMaxPaddingSizeFactor - 1.0) * target_size_bytes) + 0.5);
0.5);
if (packet.payload_size() + kRtxHeaderSize > if (packet.payload_size() + kRtxHeaderSize >
max_overshoot_bytes + bytes_left) { max_overshoot_bytes + bytes_left) {
return nullptr; return nullptr;

View File

@ -175,9 +175,6 @@ class RTPSender {
const uint32_t ssrc_; const uint32_t ssrc_;
const absl::optional<uint32_t> rtx_ssrc_; const absl::optional<uint32_t> rtx_ssrc_;
const absl::optional<uint32_t> flexfec_ssrc_; const absl::optional<uint32_t> flexfec_ssrc_;
// Limits GeneratePadding() outcome to <=
// `max_padding_size_factor_` * `target_size_bytes`
const double max_padding_size_factor_;
RtpPacketHistory* const packet_history_; RtpPacketHistory* const packet_history_;
RtpPacketSender* const paced_sender_; RtpPacketSender* const paced_sender_;

View File

@ -40,6 +40,7 @@
#include "test/gmock.h" #include "test/gmock.h"
#include "test/gtest.h" #include "test/gtest.h"
#include "test/mock_transport.h" #include "test/mock_transport.h"
#include "test/scoped_key_value_config.h"
#include "test/time_controller/simulated_time_controller.h" #include "test/time_controller/simulated_time_controller.h"
namespace webrtc { namespace webrtc {
@ -73,6 +74,7 @@ const size_t kMaxPaddingLength = 224; // Value taken from rtp_sender.cc.
const uint32_t kTimestampTicksPerMs = 90; // 90kHz clock. const uint32_t kTimestampTicksPerMs = 90; // 90kHz clock.
constexpr absl::string_view kMid = "mid"; constexpr absl::string_view kMid = "mid";
constexpr absl::string_view kRid = "f"; constexpr absl::string_view kRid = "f";
constexpr bool kMarkerBit = true;
using ::testing::_; using ::testing::_;
using ::testing::AllOf; using ::testing::AllOf;
@ -102,27 +104,6 @@ class MockRtpPacketPacer : public RtpPacketSender {
(override)); (override));
}; };
class FieldTrialConfig : public FieldTrialsView {
public:
FieldTrialConfig() : max_padding_factor_(1200) {}
~FieldTrialConfig() override {}
void SetMaxPaddingFactor(double factor) { max_padding_factor_ = factor; }
std::string Lookup(absl::string_view key) const override {
if (key == "WebRTC-LimitPaddingSize") {
char string_buf[32];
rtc::SimpleStringBuilder ssb(string_buf);
ssb << "factor:" << max_padding_factor_;
return ssb.str();
}
return "";
}
private:
double max_padding_factor_;
};
} // namespace } // namespace
class RtpSenderTest : public ::testing::Test { class RtpSenderTest : public ::testing::Test {
@ -138,8 +119,7 @@ class RtpSenderTest : public ::testing::Test {
std::vector<RtpExtension>(), std::vector<RtpExtension>(),
std::vector<RtpExtensionSize>(), std::vector<RtpExtensionSize>(),
nullptr, nullptr,
clock_), clock_) {}
kMarkerBit(true) {}
void SetUp() override { SetUpRtpSender(true, false, nullptr); } void SetUp() override { SetUpRtpSender(true, false, nullptr); }
@ -191,8 +171,7 @@ class RtpSenderTest : public ::testing::Test {
std::unique_ptr<RtpPacketHistory> packet_history_; std::unique_ptr<RtpPacketHistory> packet_history_;
std::unique_ptr<RTPSender> rtp_sender_; std::unique_ptr<RTPSender> rtp_sender_;
const bool kMarkerBit; const test::ScopedKeyValueConfig field_trials_;
FieldTrialConfig field_trials_;
std::unique_ptr<RtpPacketToSend> BuildRtpPacket(int payload_type, std::unique_ptr<RtpPacketToSend> BuildRtpPacket(int payload_type,
bool marker_bit, bool marker_bit,
@ -562,7 +541,7 @@ TEST_F(RtpSenderTest, KeepsTimestampsOnPayloadPadding) {
// Timestamps as set based on capture time in RtpSenderTest. // Timestamps as set based on capture time in RtpSenderTest.
const int64_t start_time = clock_->TimeInMilliseconds(); const int64_t start_time = clock_->TimeInMilliseconds();
const uint32_t start_timestamp = start_time * kTimestampTicksPerMs; const uint32_t start_timestamp = start_time * kTimestampTicksPerMs;
const size_t kPayloadSize = 600; const size_t kPayloadSize = 200;
const size_t kRtxHeaderSize = 2; const size_t kRtxHeaderSize = 2;
// Start by sending one media packet and putting in the packet history. // Start by sending one media packet and putting in the packet history.
@ -1108,9 +1087,8 @@ TEST_F(RtpSenderTest, GeneratePaddingResendsOldPacketsWithRtx) {
} }
TEST_F(RtpSenderTest, LimitsPayloadPaddingSize) { TEST_F(RtpSenderTest, LimitsPayloadPaddingSize) {
// Limit RTX payload padding to 2x target size. // RTX payload padding is limited to 3x target size.
const double kFactor = 2.0; const double kFactor = 3.0;
field_trials_.SetMaxPaddingFactor(kFactor);
SetUpRtpSender(false, false, nullptr); SetUpRtpSender(false, false, nullptr);
rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads); rtp_sender_->SetRtxStatus(kRtxRetransmitted | kRtxRedundantPayloads);
@ -1313,11 +1291,10 @@ TEST_F(RtpSenderTest, DoesntFecProtectRetransmissions) {
} }
TEST_F(RtpSenderTest, MarksPacketsWithKeyframeStatus) { TEST_F(RtpSenderTest, MarksPacketsWithKeyframeStatus) {
FieldTrialBasedConfig field_trials;
RTPSenderVideo::Config video_config; RTPSenderVideo::Config video_config;
video_config.clock = clock_; video_config.clock = clock_;
video_config.rtp_sender = rtp_sender_.get(); video_config.rtp_sender = rtp_sender_.get();
video_config.field_trials = &field_trials; video_config.field_trials = &field_trials_;
RTPSenderVideo rtp_sender_video(video_config); RTPSenderVideo rtp_sender_video(video_config);
const uint8_t kPayloadType = 127; const uint8_t kPayloadType = 127;