blob: 15aadd6bb1e601203768caeb5e5090f3d5a6179b [file] [log] [blame]
Åsa Perssona945aee2018-04-24 16:53:25 +02001/*
2 * Copyright 2018 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_scaling_experiment.h"
12
13#include "rtc_base/gunit.h"
14#include "test/field_trial.h"
15
16namespace webrtc {
17namespace {
18void ExpectEqualSettings(QualityScalingExperiment::Settings a,
19 QualityScalingExperiment::Settings b) {
20 EXPECT_EQ(a.vp8_low, b.vp8_low);
21 EXPECT_EQ(a.vp8_high, b.vp8_high);
22 EXPECT_EQ(a.vp9_low, b.vp9_low);
23 EXPECT_EQ(a.vp9_high, b.vp9_high);
24 EXPECT_EQ(a.h264_low, b.h264_low);
25 EXPECT_EQ(a.h264_high, b.h264_high);
26 EXPECT_EQ(a.generic_low, b.generic_low);
27 EXPECT_EQ(a.generic_high, b.generic_high);
28 EXPECT_EQ(a.alpha_high, b.alpha_high);
29 EXPECT_EQ(a.alpha_low, b.alpha_low);
30 EXPECT_EQ(a.drop, b.drop);
31}
32
33void ExpectEqualConfig(QualityScalingExperiment::Config a,
34 QualityScalingExperiment::Config b) {
35 EXPECT_EQ(a.alpha_high, b.alpha_high);
36 EXPECT_EQ(a.alpha_low, b.alpha_low);
37 EXPECT_EQ(a.use_all_drop_reasons, b.use_all_drop_reasons);
38}
39} // namespace
40
41TEST(QualityScalingExperimentTest, DisabledWithoutFieldTrial) {
42 webrtc::test::ScopedFieldTrials field_trials("");
43 EXPECT_FALSE(QualityScalingExperiment::Enabled());
44}
45
46TEST(QualityScalingExperimentTest, EnabledWithFieldTrial) {
47 webrtc::test::ScopedFieldTrials field_trials(
48 "WebRTC-Video-QualityScaling/Enabled/");
49 EXPECT_TRUE(QualityScalingExperiment::Enabled());
50}
51
52TEST(QualityScalingExperimentTest, ParseSettings) {
53 const QualityScalingExperiment::Settings kExpected = {1, 2, 3, 4, 5, 6,
54 7, 8, 0.9f, 0.99f, 1};
55 webrtc::test::ScopedFieldTrials field_trials(
56 "WebRTC-Video-QualityScaling/Enabled-1,2,3,4,5,6,7,8,0.9,0.99,1/");
57 const auto settings = QualityScalingExperiment::ParseSettings();
58 EXPECT_TRUE(settings);
59 ExpectEqualSettings(kExpected, *settings);
60}
61
62TEST(QualityScalingExperimentTest, ParseSettingsFailsWithoutFieldTrial) {
63 webrtc::test::ScopedFieldTrials field_trials("");
64 EXPECT_FALSE(QualityScalingExperiment::ParseSettings());
65}
66
67TEST(QualityScalingExperimentTest, ParseSettingsFailsWithInvalidFieldTrial) {
68 webrtc::test::ScopedFieldTrials field_trials(
69 "WebRTC-Video-QualityScaling/Enabled-invalid/");
70 EXPECT_FALSE(QualityScalingExperiment::ParseSettings());
71}
72
73TEST(QualityScalingExperimentTest, GetConfig) {
74 webrtc::test::ScopedFieldTrials field_trials(
75 "WebRTC-Video-QualityScaling/Enabled-1,2,3,4,5,6,7,8,0.9,0.99,0/");
76 const auto config = QualityScalingExperiment::GetConfig();
77 EXPECT_EQ(0.9f, config.alpha_high);
78 EXPECT_EQ(0.99f, config.alpha_low);
79 EXPECT_FALSE(config.use_all_drop_reasons);
80}
81
82TEST(QualityScalingExperimentTest, GetsDefaultConfigForInvalidFieldTrial) {
83 webrtc::test::ScopedFieldTrials field_trials(
84 "WebRTC-Video-QualityScaling/Enabled-invalid/");
85 const auto config = QualityScalingExperiment::GetConfig();
86 ExpectEqualConfig(config, QualityScalingExperiment::Config());
87}
88
89TEST(QualityScalingExperimentTest, GetsDefaultAlphaForInvalidValue) {
90 QualityScalingExperiment::Config expected_config;
91 expected_config.use_all_drop_reasons = true;
92 webrtc::test::ScopedFieldTrials field_trials(
93 "WebRTC-Video-QualityScaling/Enabled-1,2,3,4,5,6,7,8,0.99,0.9,1/");
94 const auto config = QualityScalingExperiment::GetConfig();
95 ExpectEqualConfig(config, expected_config);
96}
97
98TEST(QualityScalingExperimentTest, GetVp8Thresholds) {
99 webrtc::test::ScopedFieldTrials field_trials(
100 "WebRTC-Video-QualityScaling/Enabled-1,2,3,4,5,6,0,0,0.9,0.99,1/");
101 const auto thresholds =
102 QualityScalingExperiment::GetQpThresholds(kVideoCodecVP8);
103 EXPECT_TRUE(thresholds);
104 EXPECT_EQ(1, thresholds->low);
105 EXPECT_EQ(2, thresholds->high);
106}
107
108TEST(QualityScalingExperimentTest, GetThresholdsFailsForInvalidVp8Value) {
109 webrtc::test::ScopedFieldTrials field_trials(
110 "WebRTC-Video-QualityScaling/Enabled-0,0,3,4,5,6,7,8,0.9,0.99,1/");
111 const auto thresholds =
112 QualityScalingExperiment::GetQpThresholds(kVideoCodecVP8);
113 EXPECT_FALSE(thresholds);
114}
115
116TEST(QualityScalingExperimentTest, GetVp9Thresholds) {
117 webrtc::test::ScopedFieldTrials field_trials(
118 "WebRTC-Video-QualityScaling/Enabled-1,2,3,4,5,6,0,0,0.9,0.99,1/");
119 const auto thresholds =
120 QualityScalingExperiment::GetQpThresholds(kVideoCodecVP9);
121 EXPECT_TRUE(thresholds);
122 EXPECT_EQ(3, thresholds->low);
123 EXPECT_EQ(4, thresholds->high);
124}
125
126TEST(QualityScalingExperimentTest, GetThresholdsFailsForInvalidVp9Value) {
127 webrtc::test::ScopedFieldTrials field_trials(
128 "WebRTC-Video-QualityScaling/Enabled-1,2,0,0,5,6,7,8,0.9,0.99,1/");
129 const auto thresholds =
130 QualityScalingExperiment::GetQpThresholds(kVideoCodecVP9);
131 EXPECT_FALSE(thresholds);
132}
133
134TEST(QualityScalingExperimentTest, GetH264Thresholds) {
135 webrtc::test::ScopedFieldTrials field_trials(
136 "WebRTC-Video-QualityScaling/Enabled-1,2,3,4,5,6,0,0,0.9,0.99,1/");
137 const auto thresholds =
138 QualityScalingExperiment::GetQpThresholds(kVideoCodecH264);
139 EXPECT_TRUE(thresholds);
140 EXPECT_EQ(5, thresholds->low);
141 EXPECT_EQ(6, thresholds->high);
142}
143
144TEST(QualityScalingExperimentTest, GetThresholdsFailsForInvalidH264Value) {
145 webrtc::test::ScopedFieldTrials field_trials(
146 "WebRTC-Video-QualityScaling/Enabled-1,2,3,4,0,0,7,8,0.9,0.99,1/");
147 const auto thresholds =
148 QualityScalingExperiment::GetQpThresholds(kVideoCodecH264);
149 EXPECT_FALSE(thresholds);
150}
151
152TEST(QualityScalingExperimentTest, GetGenericThresholds) {
153 webrtc::test::ScopedFieldTrials field_trials(
154 "WebRTC-Video-QualityScaling/Enabled-1,2,3,4,0,0,7,8,0.9,0.99,1/");
155 const auto thresholds =
156 QualityScalingExperiment::GetQpThresholds(kVideoCodecGeneric);
157 EXPECT_TRUE(thresholds);
158 EXPECT_EQ(7, thresholds->low);
159 EXPECT_EQ(8, thresholds->high);
160}
161
162TEST(QualityScalingExperimentTest, GetThresholdsFailsForInvalidGenericValue) {
163 webrtc::test::ScopedFieldTrials field_trials(
164 "WebRTC-Video-QualityScaling/Enabled-1,2,3,4,5,6,0,0,0.9,0.99,1/");
165 const auto thresholds =
166 QualityScalingExperiment::GetQpThresholds(kVideoCodecGeneric);
167 EXPECT_FALSE(thresholds);
168}
169} // namespace webrtc