blob: b0ede34791de052916fea546977e76ee3abd3f88 [file] [log] [blame]
Åsa Perssone644a032019-11-08 15:56:00 +01001/*
2 * Copyright 2019 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "rtc_base/experiments/quality_rampup_experiment.h"
12
13#include "test/field_trial.h"
14#include "test/gtest.h"
15
16namespace webrtc {
17namespace {
18
19class QualityRampupExperimentTest : public ::testing::Test {
20 protected:
21 int64_t NowMs() const { return current_ms_; }
22 int64_t AdvanceMs(int64_t delta_ms) {
23 current_ms_ += delta_ms;
24 return current_ms_;
25 }
26 int64_t current_ms_ = 2345;
27};
28
29TEST_F(QualityRampupExperimentTest, ValuesNotSetByDefault) {
30 const auto settings = QualityRampupExperiment::ParseSettings();
31 EXPECT_FALSE(settings.MinPixels());
32 EXPECT_FALSE(settings.MinDurationMs());
33 EXPECT_FALSE(settings.MaxBitrateFactor());
34}
35
36TEST_F(QualityRampupExperimentTest, ParseMinPixels) {
37 test::ScopedFieldTrials field_trials(
38 "WebRTC-Video-QualityRampupSettings/min_pixels:10000/");
39 EXPECT_EQ(10000, QualityRampupExperiment::ParseSettings().MinPixels());
40}
41
42TEST_F(QualityRampupExperimentTest, ParseMinDuration) {
43 test::ScopedFieldTrials field_trials(
44 "WebRTC-Video-QualityRampupSettings/min_duration_ms:987/");
45 EXPECT_EQ(987, QualityRampupExperiment::ParseSettings().MinDurationMs());
46}
47
48TEST_F(QualityRampupExperimentTest, ParseMaxBitrateFactor) {
49 test::ScopedFieldTrials field_trials(
50 "WebRTC-Video-QualityRampupSettings/max_bitrate_factor:1.23/");
51 EXPECT_EQ(1.23, QualityRampupExperiment::ParseSettings().MaxBitrateFactor());
52}
53
54TEST_F(QualityRampupExperimentTest, ReportsBwHighWhenDurationPassed) {
55 test::ScopedFieldTrials field_trials(
56 "WebRTC-Video-QualityRampupSettings/"
57 "min_pixels:10000,min_duration_ms:2000/");
58 auto exp = QualityRampupExperiment::ParseSettings();
59 EXPECT_EQ(10000, exp.MinPixels());
60 EXPECT_EQ(2000, exp.MinDurationMs());
61
62 const uint32_t kMaxKbps = 800;
63 exp.SetMaxBitrate(/*pixels*/ 10000, kMaxKbps);
64
65 const uint32_t kAvailableKbps = kMaxKbps;
66 EXPECT_FALSE(exp.BwHigh(NowMs(), kAvailableKbps));
67 EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000 - 1), kAvailableKbps));
68 EXPECT_TRUE(exp.BwHigh(AdvanceMs(1), kAvailableKbps));
69}
70
71TEST_F(QualityRampupExperimentTest, UsesMaxSetBitrate) {
72 test::ScopedFieldTrials field_trials(
73 "WebRTC-Video-QualityRampupSettings/"
74 "min_pixels:10000,min_duration_ms:2000/");
75 auto exp = QualityRampupExperiment::ParseSettings();
76
77 const uint32_t kMaxKbps = 800;
78 exp.SetMaxBitrate(/*pixels*/ 10000, kMaxKbps);
79 exp.SetMaxBitrate(/*pixels*/ 10000, kMaxKbps - 1);
80
81 EXPECT_FALSE(exp.BwHigh(NowMs(), kMaxKbps - 1));
82 EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000), kMaxKbps - 1));
83 EXPECT_FALSE(exp.BwHigh(AdvanceMs(1), kMaxKbps));
84 EXPECT_TRUE(exp.BwHigh(AdvanceMs(2000), kMaxKbps));
85}
86
87TEST_F(QualityRampupExperimentTest, DoesNotReportBwHighIfBelowMinPixels) {
88 test::ScopedFieldTrials field_trials(
89 "WebRTC-Video-QualityRampupSettings/"
90 "min_pixels:10000,min_duration_ms:2000/");
91 auto exp = QualityRampupExperiment::ParseSettings();
92
93 const uint32_t kMaxKbps = 800;
94 exp.SetMaxBitrate(/*pixels*/ 9999, kMaxKbps);
95
96 const uint32_t kAvailableKbps = kMaxKbps;
97 EXPECT_FALSE(exp.BwHigh(NowMs(), kAvailableKbps));
98 EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000), kAvailableKbps));
99}
100
101TEST_F(QualityRampupExperimentTest, ReportsBwHighWithMaxBitrateFactor) {
102 test::ScopedFieldTrials field_trials(
103 "WebRTC-Video-QualityRampupSettings/"
104 "min_pixels:10000,min_duration_ms:2000,max_bitrate_factor:1.5/");
105 auto exp = QualityRampupExperiment::ParseSettings();
106 EXPECT_EQ(10000, exp.MinPixels());
107 EXPECT_EQ(2000, exp.MinDurationMs());
108 EXPECT_EQ(1.5, exp.MaxBitrateFactor());
109
110 const uint32_t kMaxKbps = 800;
111 exp.SetMaxBitrate(/*pixels*/ 10000, kMaxKbps);
112
113 const uint32_t kAvailableKbps = kMaxKbps * 1.5;
114 EXPECT_FALSE(exp.BwHigh(NowMs(), kAvailableKbps - 1));
115 EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000), kAvailableKbps - 1));
116 EXPECT_FALSE(exp.BwHigh(AdvanceMs(1), kAvailableKbps));
117 EXPECT_TRUE(exp.BwHigh(AdvanceMs(2000), kAvailableKbps));
118}
119
120TEST_F(QualityRampupExperimentTest, ReportsBwHigh) {
121 test::ScopedFieldTrials field_trials(
122 "WebRTC-Video-QualityRampupSettings/"
123 "min_pixels:10000,min_duration_ms:2000/");
124 auto exp = QualityRampupExperiment::ParseSettings();
125
126 const uint32_t kMaxKbps = 800;
127 exp.SetMaxBitrate(/*pixels*/ 10000, kMaxKbps);
128
129 const uint32_t kAvailableKbps = kMaxKbps;
130 EXPECT_FALSE(exp.BwHigh(NowMs(), kAvailableKbps));
131 EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000 - 1), kAvailableKbps));
132 EXPECT_FALSE(exp.BwHigh(AdvanceMs(1), kAvailableKbps - 1)); // Below, reset.
133 EXPECT_FALSE(exp.BwHigh(AdvanceMs(1), kAvailableKbps));
134 EXPECT_FALSE(exp.BwHigh(AdvanceMs(2000 - 1), kAvailableKbps));
135 EXPECT_TRUE(exp.BwHigh(AdvanceMs(1), kAvailableKbps));
136}
137
138} // namespace
139} // namespace webrtc