mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 13:50:40 +01:00

Bug: none Change-Id: I32e1ea6fb2f2e20fc631e09b02c8f3a11b6c9fac Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158888 Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Sergey Silkin <ssilkin@webrtc.org> Commit-Queue: Åsa Persson <asapersson@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29751}
139 lines
5 KiB
C++
139 lines
5 KiB
C++
/*
|
|
* Copyright 2019 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 "rtc_base/experiments/quality_rampup_experiment.h"
|
|
|
|
#include "test/field_trial.h"
|
|
#include "test/gtest.h"
|
|
|
|
namespace webrtc {
|
|
namespace {
|
|
|
|
class QualityRampupExperimentTest : public ::testing::Test {
|
|
protected:
|
|
int64_t NowMs() const { return current_ms_; }
|
|
int64_t AdvanceMs(int64_t delta_ms) {
|
|
current_ms_ += delta_ms;
|
|
return current_ms_;
|
|
}
|
|
int64_t current_ms_ = 2345;
|
|
};
|
|
|
|
TEST_F(QualityRampupExperimentTest, ValuesNotSetByDefault) {
|
|
const auto settings = QualityRampupExperiment::ParseSettings();
|
|
EXPECT_FALSE(settings.MinPixels());
|
|
EXPECT_FALSE(settings.MinDurationMs());
|
|
EXPECT_FALSE(settings.MaxBitrateFactor());
|
|
}
|
|
|
|
TEST_F(QualityRampupExperimentTest, ParseMinPixels) {
|
|
test::ScopedFieldTrials field_trials(
|
|
"WebRTC-Video-QualityRampupSettings/min_pixels:10000/");
|
|
EXPECT_EQ(10000, QualityRampupExperiment::ParseSettings().MinPixels());
|
|
}
|
|
|
|
TEST_F(QualityRampupExperimentTest, ParseMinDuration) {
|
|
test::ScopedFieldTrials field_trials(
|
|
"WebRTC-Video-QualityRampupSettings/min_duration_ms:987/");
|
|
EXPECT_EQ(987, QualityRampupExperiment::ParseSettings().MinDurationMs());
|
|
}
|
|
|
|
TEST_F(QualityRampupExperimentTest, ParseMaxBitrateFactor) {
|
|
test::ScopedFieldTrials field_trials(
|
|
"WebRTC-Video-QualityRampupSettings/max_bitrate_factor:1.23/");
|
|
EXPECT_EQ(1.23, QualityRampupExperiment::ParseSettings().MaxBitrateFactor());
|
|
}
|
|
|
|
TEST_F(QualityRampupExperimentTest, ReportsBwHighWhenDurationPassed) {
|
|
test::ScopedFieldTrials field_trials(
|
|
"WebRTC-Video-QualityRampupSettings/"
|
|
"min_pixels:10000,min_duration_ms:2000/");
|
|
auto exp = QualityRampupExperiment::ParseSettings();
|
|
EXPECT_EQ(10000, exp.MinPixels());
|
|
EXPECT_EQ(2000, exp.MinDurationMs());
|
|
|
|
const uint32_t kMaxKbps = 800;
|
|
exp.SetMaxBitrate(/*pixels*/ 10000, kMaxKbps);
|
|
|
|
const uint32_t kAvailableKbps = kMaxKbps;
|
|
EXPECT_FALSE(exp.BwHigh(NowMs(), kAvailableKbps));
|
|
EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000 - 1), kAvailableKbps));
|
|
EXPECT_TRUE(exp.BwHigh(AdvanceMs(1), kAvailableKbps));
|
|
}
|
|
|
|
TEST_F(QualityRampupExperimentTest, UsesMaxSetBitrate) {
|
|
test::ScopedFieldTrials field_trials(
|
|
"WebRTC-Video-QualityRampupSettings/"
|
|
"min_pixels:10000,min_duration_ms:2000/");
|
|
auto exp = QualityRampupExperiment::ParseSettings();
|
|
|
|
const uint32_t kMaxKbps = 800;
|
|
exp.SetMaxBitrate(/*pixels*/ 10000, kMaxKbps);
|
|
exp.SetMaxBitrate(/*pixels*/ 10000, kMaxKbps - 1);
|
|
|
|
EXPECT_FALSE(exp.BwHigh(NowMs(), kMaxKbps - 1));
|
|
EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000), kMaxKbps - 1));
|
|
EXPECT_FALSE(exp.BwHigh(AdvanceMs(1), kMaxKbps));
|
|
EXPECT_TRUE(exp.BwHigh(AdvanceMs(2000), kMaxKbps));
|
|
}
|
|
|
|
TEST_F(QualityRampupExperimentTest, DoesNotReportBwHighIfBelowMinPixels) {
|
|
test::ScopedFieldTrials field_trials(
|
|
"WebRTC-Video-QualityRampupSettings/"
|
|
"min_pixels:10000,min_duration_ms:2000/");
|
|
auto exp = QualityRampupExperiment::ParseSettings();
|
|
|
|
const uint32_t kMaxKbps = 800;
|
|
exp.SetMaxBitrate(/*pixels*/ 9999, kMaxKbps);
|
|
|
|
const uint32_t kAvailableKbps = kMaxKbps;
|
|
EXPECT_FALSE(exp.BwHigh(NowMs(), kAvailableKbps));
|
|
EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000), kAvailableKbps));
|
|
}
|
|
|
|
TEST_F(QualityRampupExperimentTest, ReportsBwHighWithMaxBitrateFactor) {
|
|
test::ScopedFieldTrials field_trials(
|
|
"WebRTC-Video-QualityRampupSettings/"
|
|
"min_pixels:10000,min_duration_ms:2000,max_bitrate_factor:1.5/");
|
|
auto exp = QualityRampupExperiment::ParseSettings();
|
|
EXPECT_EQ(10000, exp.MinPixels());
|
|
EXPECT_EQ(2000, exp.MinDurationMs());
|
|
EXPECT_EQ(1.5, exp.MaxBitrateFactor());
|
|
|
|
const uint32_t kMaxKbps = 800;
|
|
exp.SetMaxBitrate(/*pixels*/ 10000, kMaxKbps);
|
|
|
|
const uint32_t kAvailableKbps = kMaxKbps * 1.5;
|
|
EXPECT_FALSE(exp.BwHigh(NowMs(), kAvailableKbps - 1));
|
|
EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000), kAvailableKbps - 1));
|
|
EXPECT_FALSE(exp.BwHigh(AdvanceMs(1), kAvailableKbps));
|
|
EXPECT_TRUE(exp.BwHigh(AdvanceMs(2000), kAvailableKbps));
|
|
}
|
|
|
|
TEST_F(QualityRampupExperimentTest, ReportsBwHigh) {
|
|
test::ScopedFieldTrials field_trials(
|
|
"WebRTC-Video-QualityRampupSettings/"
|
|
"min_pixels:10000,min_duration_ms:2000/");
|
|
auto exp = QualityRampupExperiment::ParseSettings();
|
|
|
|
const uint32_t kMaxKbps = 800;
|
|
exp.SetMaxBitrate(/*pixels*/ 10000, kMaxKbps);
|
|
|
|
const uint32_t kAvailableKbps = kMaxKbps;
|
|
EXPECT_FALSE(exp.BwHigh(NowMs(), kAvailableKbps));
|
|
EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000 - 1), kAvailableKbps));
|
|
EXPECT_FALSE(exp.BwHigh(AdvanceMs(1), kAvailableKbps - 1)); // Below, reset.
|
|
EXPECT_FALSE(exp.BwHigh(AdvanceMs(1), kAvailableKbps));
|
|
EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000 - 1), kAvailableKbps));
|
|
EXPECT_TRUE(exp.BwHigh(AdvanceMs(1), kAvailableKbps));
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace webrtc
|