blob: 7399bf27a6640000c785b0c6864588bb811683a3 [file] [log] [blame]
Åsa Perssonf3d828e2019-05-06 12:22:49 +02001/*
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/balanced_degradation_settings.h"
12
13#include <limits>
14
15#include "rtc_base/gunit.h"
16#include "test/field_trial.h"
17#include "test/gmock.h"
18
19namespace webrtc {
20namespace {
21
22void VerifyIsDefault(
23 const std::vector<BalancedDegradationSettings::Config>& config) {
Åsa Perssonf5e5d252019-08-16 17:24:59 +020024 EXPECT_THAT(config, ::testing::ElementsAre(
25 BalancedDegradationSettings::Config{
26 320 * 240,
27 7,
28 0,
Åsa Persson30ab0152019-08-27 12:22:33 +020029 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +020030 BalancedDegradationSettings::kNoFpsDiff,
31 {0, 0, 0},
32 {0, 0, 0},
33 {0, 0, 0},
34 {0, 0, 0}},
35 BalancedDegradationSettings::Config{
36 480 * 270,
37 10,
38 0,
Åsa Persson30ab0152019-08-27 12:22:33 +020039 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +020040 BalancedDegradationSettings::kNoFpsDiff,
41 {0, 0, 0},
42 {0, 0, 0},
43 {0, 0, 0},
44 {0, 0, 0}},
45 BalancedDegradationSettings::Config{
46 640 * 480,
47 15,
48 0,
Åsa Persson30ab0152019-08-27 12:22:33 +020049 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +020050 BalancedDegradationSettings::kNoFpsDiff,
51 {0, 0, 0},
52 {0, 0, 0},
53 {0, 0, 0},
54 {0, 0, 0}}));
Åsa Perssonf3d828e2019-05-06 12:22:49 +020055}
56} // namespace
57
58TEST(BalancedDegradationSettings, GetsDefaultConfigIfNoList) {
59 webrtc::test::ScopedFieldTrials field_trials("");
60 BalancedDegradationSettings settings;
61 VerifyIsDefault(settings.GetConfigs());
Åsa Persson1b247f12019-08-14 17:26:39 +020062 EXPECT_FALSE(settings.NextHigherBitrateKbps(1));
Åsa Persson30ab0152019-08-27 12:22:33 +020063 EXPECT_FALSE(settings.ResolutionNextHigherBitrateKbps(1));
64 EXPECT_TRUE(settings.CanAdaptUp(1, /*bitrate_bps*/ 1));
65 EXPECT_TRUE(settings.CanAdaptUpResolution(1, /*bitrate_bps*/ 1));
Åsa Perssonf5e5d252019-08-16 17:24:59 +020066 EXPECT_FALSE(settings.MinFpsDiff(1));
Åsa Persson12314192019-06-20 15:45:07 +020067 EXPECT_FALSE(settings.GetQpThresholds(kVideoCodecVP8, 1));
68 EXPECT_FALSE(settings.GetQpThresholds(kVideoCodecVP9, 1));
69 EXPECT_FALSE(settings.GetQpThresholds(kVideoCodecH264, 1));
70 EXPECT_FALSE(settings.GetQpThresholds(kVideoCodecGeneric, 1));
71 EXPECT_FALSE(settings.GetQpThresholds(kVideoCodecMultiplex, 1));
Åsa Perssonf3d828e2019-05-06 12:22:49 +020072}
73
74TEST(BalancedDegradationSettings, GetsConfig) {
75 webrtc::test::ScopedFieldTrials field_trials(
76 "WebRTC-Video-BalancedDegradationSettings/"
Åsa Persson12314192019-06-20 15:45:07 +020077 "pixels:11|22|33,fps:5|15|25,other:4|5|6/");
Åsa Perssonf3d828e2019-05-06 12:22:49 +020078 BalancedDegradationSettings settings;
Åsa Persson12314192019-06-20 15:45:07 +020079 EXPECT_THAT(settings.GetConfigs(),
80 ::testing::ElementsAre(
81 BalancedDegradationSettings::Config{
Åsa Perssonf5e5d252019-08-16 17:24:59 +020082 11,
83 5,
84 0,
Åsa Persson30ab0152019-08-27 12:22:33 +020085 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +020086 BalancedDegradationSettings::kNoFpsDiff,
87 {0, 0, 0},
88 {0, 0, 0},
89 {0, 0, 0},
90 {0, 0, 0}},
Åsa Persson12314192019-06-20 15:45:07 +020091 BalancedDegradationSettings::Config{
Åsa Perssonf5e5d252019-08-16 17:24:59 +020092 22,
93 15,
94 0,
Åsa Persson30ab0152019-08-27 12:22:33 +020095 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +020096 BalancedDegradationSettings::kNoFpsDiff,
97 {0, 0, 0},
98 {0, 0, 0},
99 {0, 0, 0},
100 {0, 0, 0}},
Åsa Persson12314192019-06-20 15:45:07 +0200101 BalancedDegradationSettings::Config{
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200102 33,
103 25,
104 0,
Åsa Persson30ab0152019-08-27 12:22:33 +0200105 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200106 BalancedDegradationSettings::kNoFpsDiff,
107 {0, 0, 0},
108 {0, 0, 0},
109 {0, 0, 0},
110 {0, 0, 0}}));
Åsa Perssonf3d828e2019-05-06 12:22:49 +0200111}
112
113TEST(BalancedDegradationSettings, GetsDefaultConfigForZeroFpsValue) {
114 webrtc::test::ScopedFieldTrials field_trials(
115 "WebRTC-Video-BalancedDegradationSettings/"
116 "pixels:1000|2000|3000,fps:0|15|25/");
117 BalancedDegradationSettings settings;
118 VerifyIsDefault(settings.GetConfigs());
119}
120
121TEST(BalancedDegradationSettings, GetsDefaultConfigIfPixelsDecreases) {
122 webrtc::test::ScopedFieldTrials field_trials(
123 "WebRTC-Video-BalancedDegradationSettings/"
124 "pixels:1000|999|3000,fps:5|15|25/");
125 BalancedDegradationSettings settings;
126 VerifyIsDefault(settings.GetConfigs());
127}
128
129TEST(BalancedDegradationSettings, GetsDefaultConfigIfFramerateDecreases) {
130 webrtc::test::ScopedFieldTrials field_trials(
131 "WebRTC-Video-BalancedDegradationSettings/"
132 "pixels:1000|2000|3000,fps:5|4|25/");
133 BalancedDegradationSettings settings;
134 VerifyIsDefault(settings.GetConfigs());
135}
136
Åsa Persson48284b82019-07-08 10:01:12 +0200137TEST(BalancedDegradationSettings, GetsConfigWithSpecificFps) {
138 webrtc::test::ScopedFieldTrials field_trials(
139 "WebRTC-Video-BalancedDegradationSettings/"
140 "pixels:1000|2000|3000,fps:5|15|25,vp8_fps:7|8|9,vp9_fps:9|10|11,"
141 "h264_fps:11|12|13,generic_fps:13|14|15/");
142 BalancedDegradationSettings settings;
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200143 EXPECT_THAT(settings.GetConfigs(),
144 ::testing::ElementsAre(
145 BalancedDegradationSettings::Config{
146 1000,
147 5,
148 0,
Åsa Persson30ab0152019-08-27 12:22:33 +0200149 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200150 BalancedDegradationSettings::kNoFpsDiff,
151 {0, 0, 7},
152 {0, 0, 9},
153 {0, 0, 11},
154 {0, 0, 13}},
155 BalancedDegradationSettings::Config{
156 2000,
157 15,
158 0,
Åsa Persson30ab0152019-08-27 12:22:33 +0200159 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200160 BalancedDegradationSettings::kNoFpsDiff,
161 {0, 0, 8},
162 {0, 0, 10},
163 {0, 0, 12},
164 {0, 0, 14}},
165 BalancedDegradationSettings::Config{
166 3000,
167 25,
168 0,
Åsa Persson30ab0152019-08-27 12:22:33 +0200169 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200170 BalancedDegradationSettings::kNoFpsDiff,
171 {0, 0, 9},
172 {0, 0, 11},
173 {0, 0, 13},
174 {0, 0, 15}}));
Åsa Persson48284b82019-07-08 10:01:12 +0200175}
176
177TEST(BalancedDegradationSettings, GetsDefaultConfigForZeroVp8FpsValue) {
178 webrtc::test::ScopedFieldTrials field_trials(
179 "WebRTC-Video-BalancedDegradationSettings/"
180 "pixels:1000|2000|3000,fps:7|15|25,vp8_fps:0|15|25/");
181 BalancedDegradationSettings settings;
182 VerifyIsDefault(settings.GetConfigs());
183}
184
185TEST(BalancedDegradationSettings, GetsDefaultConfigForInvalidFpsValue) {
186 webrtc::test::ScopedFieldTrials field_trials(
187 "WebRTC-Video-BalancedDegradationSettings/"
188 "pixels:1000|2000|3000,fps:7|15|25,vp8_fps:10|15|2000/");
189 BalancedDegradationSettings settings;
190 VerifyIsDefault(settings.GetConfigs());
191}
192
193TEST(BalancedDegradationSettings, GetsDefaultConfigIfVp8FramerateDecreases) {
194 webrtc::test::ScopedFieldTrials field_trials(
195 "WebRTC-Video-BalancedDegradationSettings/"
196 "pixels:1000|2000|3000,fps:4|5|25,vp8_fps:5|4|25/");
197 BalancedDegradationSettings settings;
198 VerifyIsDefault(settings.GetConfigs());
199}
200
Åsa Perssonf3d828e2019-05-06 12:22:49 +0200201TEST(BalancedDegradationSettings, GetsMinFps) {
202 webrtc::test::ScopedFieldTrials field_trials(
203 "WebRTC-Video-BalancedDegradationSettings/"
204 "pixels:1000|2000|3000,fps:5|15|25/");
205 BalancedDegradationSettings settings;
Åsa Persson48284b82019-07-08 10:01:12 +0200206 EXPECT_EQ(5, settings.MinFps(kVideoCodecVP8, 1));
207 EXPECT_EQ(5, settings.MinFps(kVideoCodecVP8, 1000));
208 EXPECT_EQ(15, settings.MinFps(kVideoCodecVP8, 1001));
209 EXPECT_EQ(15, settings.MinFps(kVideoCodecVP8, 2000));
210 EXPECT_EQ(25, settings.MinFps(kVideoCodecVP8, 2001));
211 EXPECT_EQ(25, settings.MinFps(kVideoCodecVP8, 3000));
212 EXPECT_EQ(std::numeric_limits<int>::max(),
213 settings.MinFps(kVideoCodecVP8, 3001));
214}
215
216TEST(BalancedDegradationSettings, GetsVp8MinFps) {
217 webrtc::test::ScopedFieldTrials field_trials(
218 "WebRTC-Video-BalancedDegradationSettings/"
219 "pixels:1000|2000|3000,fps:5|15|25,vp8_fps:7|10|12/");
220 BalancedDegradationSettings settings;
221 EXPECT_EQ(7, settings.MinFps(kVideoCodecVP8, 1));
222 EXPECT_EQ(7, settings.MinFps(kVideoCodecVP8, 1000));
223 EXPECT_EQ(10, settings.MinFps(kVideoCodecVP8, 1001));
224 EXPECT_EQ(10, settings.MinFps(kVideoCodecVP8, 2000));
225 EXPECT_EQ(12, settings.MinFps(kVideoCodecVP8, 2001));
226 EXPECT_EQ(12, settings.MinFps(kVideoCodecVP8, 3000));
227 EXPECT_EQ(std::numeric_limits<int>::max(),
228 settings.MinFps(kVideoCodecVP8, 3001));
Åsa Perssonf3d828e2019-05-06 12:22:49 +0200229}
230
231TEST(BalancedDegradationSettings, GetsMaxFps) {
232 webrtc::test::ScopedFieldTrials field_trials(
233 "WebRTC-Video-BalancedDegradationSettings/"
234 "pixels:1000|2000|3000,fps:5|15|25/");
235 BalancedDegradationSettings settings;
Åsa Persson48284b82019-07-08 10:01:12 +0200236 EXPECT_EQ(15, settings.MaxFps(kVideoCodecVP8, 1));
237 EXPECT_EQ(15, settings.MaxFps(kVideoCodecVP8, 1000));
238 EXPECT_EQ(25, settings.MaxFps(kVideoCodecVP8, 1001));
239 EXPECT_EQ(25, settings.MaxFps(kVideoCodecVP8, 2000));
240 EXPECT_EQ(std::numeric_limits<int>::max(),
241 settings.MaxFps(kVideoCodecVP8, 2001));
242}
243
244TEST(BalancedDegradationSettings, GetsVp8MaxFps) {
245 webrtc::test::ScopedFieldTrials field_trials(
246 "WebRTC-Video-BalancedDegradationSettings/"
247 "pixels:1000|2000|3000,fps:5|15|25,vp8_fps:7|10|12/");
248 BalancedDegradationSettings settings;
249 EXPECT_EQ(10, settings.MaxFps(kVideoCodecVP8, 1));
250 EXPECT_EQ(10, settings.MaxFps(kVideoCodecVP8, 1000));
251 EXPECT_EQ(12, settings.MaxFps(kVideoCodecVP8, 1001));
252 EXPECT_EQ(12, settings.MaxFps(kVideoCodecVP8, 2000));
253 EXPECT_EQ(std::numeric_limits<int>::max(),
254 settings.MaxFps(kVideoCodecVP8, 2001));
255}
256
257TEST(BalancedDegradationSettings, GetsVp9Fps) {
258 webrtc::test::ScopedFieldTrials field_trials(
259 "WebRTC-Video-BalancedDegradationSettings/"
260 "pixels:1000|2000|3000,fps:5|15|25,vp9_fps:7|10|12/");
261 BalancedDegradationSettings settings;
262 EXPECT_EQ(7, settings.MinFps(kVideoCodecVP9, 1000));
263 EXPECT_EQ(10, settings.MaxFps(kVideoCodecVP9, 1000));
264}
265
266TEST(BalancedDegradationSettings, GetsH264Fps) {
267 webrtc::test::ScopedFieldTrials field_trials(
268 "WebRTC-Video-BalancedDegradationSettings/"
269 "pixels:1000|2000|3000,fps:5|15|25,h264_fps:8|11|13/");
270 BalancedDegradationSettings settings;
271 EXPECT_EQ(11, settings.MinFps(kVideoCodecH264, 2000));
272 EXPECT_EQ(13, settings.MaxFps(kVideoCodecH264, 2000));
273}
274
275TEST(BalancedDegradationSettings, GetsGenericFps) {
276 webrtc::test::ScopedFieldTrials field_trials(
277 "WebRTC-Video-BalancedDegradationSettings/"
278 "pixels:1000|2000|3000,fps:5|15|25,generic_fps:9|12|14/");
279 BalancedDegradationSettings settings;
280 EXPECT_EQ(14, settings.MinFps(kVideoCodecGeneric, 3000));
281 EXPECT_EQ(std::numeric_limits<int>::max(),
282 settings.MaxFps(kVideoCodecGeneric, 3000));
Åsa Perssonf3d828e2019-05-06 12:22:49 +0200283}
284
Åsa Persson0c38a862019-08-14 10:10:12 +0200285TEST(BalancedDegradationSettings, GetsUnlimitedForMaxValidFps) {
286 webrtc::test::ScopedFieldTrials field_trials(
287 "WebRTC-Video-BalancedDegradationSettings/"
288 "pixels:1000|2000|3000,fps:5|15|100,vp8_fps:30|100|100/");
289 const int kUnlimitedFps = std::numeric_limits<int>::max();
290 BalancedDegradationSettings settings;
291 EXPECT_EQ(15, settings.MinFps(kVideoCodecH264, 2000));
292 EXPECT_EQ(kUnlimitedFps, settings.MinFps(kVideoCodecH264, 2001));
293 EXPECT_EQ(30, settings.MinFps(kVideoCodecVP8, 1000));
294 EXPECT_EQ(kUnlimitedFps, settings.MinFps(kVideoCodecVP8, 1001));
295}
296
Åsa Persson1b247f12019-08-14 17:26:39 +0200297TEST(BalancedDegradationSettings, GetsConfigWithBitrate) {
298 webrtc::test::ScopedFieldTrials field_trials(
299 "WebRTC-Video-BalancedDegradationSettings/"
Åsa Persson30ab0152019-08-27 12:22:33 +0200300 "pixels:11|22|33,fps:5|15|25,kbps:44|88|99,kbps_res:55|111|222/");
Åsa Persson1b247f12019-08-14 17:26:39 +0200301 BalancedDegradationSettings settings;
302 EXPECT_THAT(settings.GetConfigs(),
303 ::testing::ElementsAre(
304 BalancedDegradationSettings::Config{
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200305 11,
306 5,
307 44,
Åsa Persson30ab0152019-08-27 12:22:33 +0200308 55,
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200309 BalancedDegradationSettings::kNoFpsDiff,
310 {0, 0, 0},
311 {0, 0, 0},
312 {0, 0, 0},
313 {0, 0, 0}},
Åsa Persson1b247f12019-08-14 17:26:39 +0200314 BalancedDegradationSettings::Config{
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200315 22,
316 15,
317 88,
Åsa Persson30ab0152019-08-27 12:22:33 +0200318 111,
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200319 BalancedDegradationSettings::kNoFpsDiff,
320 {0, 0, 0},
321 {0, 0, 0},
322 {0, 0, 0},
323 {0, 0, 0}},
Åsa Persson1b247f12019-08-14 17:26:39 +0200324 BalancedDegradationSettings::Config{
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200325 33,
326 25,
327 99,
Åsa Persson30ab0152019-08-27 12:22:33 +0200328 222,
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200329 BalancedDegradationSettings::kNoFpsDiff,
330 {0, 0, 0},
331 {0, 0, 0},
332 {0, 0, 0},
333 {0, 0, 0}}));
Åsa Persson1b247f12019-08-14 17:26:39 +0200334}
335
336TEST(BalancedDegradationSettings, GetsDefaultConfigIfBitrateDecreases) {
337 webrtc::test::ScopedFieldTrials field_trials(
338 "WebRTC-Video-BalancedDegradationSettings/"
339 "pixels:11|22|33,fps:5|15|25,kbps:44|43|99/");
340 BalancedDegradationSettings settings;
341 VerifyIsDefault(settings.GetConfigs());
342}
343
344TEST(BalancedDegradationSettings,
345 GetsDefaultConfigIfBitrateDecreasesWithUnsetValue) {
346 webrtc::test::ScopedFieldTrials field_trials(
347 "WebRTC-Video-BalancedDegradationSettings/"
348 "pixels:11|22|33,fps:5|15|25,kbps:44|0|43/");
349 BalancedDegradationSettings settings;
350 VerifyIsDefault(settings.GetConfigs());
351}
352
353TEST(BalancedDegradationSettings, GetsNextHigherBitrate) {
354 webrtc::test::ScopedFieldTrials field_trials(
355 "WebRTC-Video-BalancedDegradationSettings/"
356 "pixels:1000|2000|3000,fps:5|15|25,kbps:44|88|99/");
357 BalancedDegradationSettings settings;
358 EXPECT_EQ(88, settings.NextHigherBitrateKbps(1));
359 EXPECT_EQ(88, settings.NextHigherBitrateKbps(1000));
360 EXPECT_EQ(99, settings.NextHigherBitrateKbps(1001));
361 EXPECT_EQ(99, settings.NextHigherBitrateKbps(2000));
362 EXPECT_FALSE(settings.NextHigherBitrateKbps(2001));
363}
364
365TEST(BalancedDegradationSettings, GetsNextHigherBitrateWithUnsetValue) {
366 webrtc::test::ScopedFieldTrials field_trials(
367 "WebRTC-Video-BalancedDegradationSettings/"
368 "pixels:1000|2000|3000,fps:5|15|25,kbps:10|0|20/");
369 BalancedDegradationSettings settings;
370 EXPECT_FALSE(settings.NextHigherBitrateKbps(1));
371 EXPECT_FALSE(settings.NextHigherBitrateKbps(1000));
372 EXPECT_EQ(20, settings.NextHigherBitrateKbps(1001));
373 EXPECT_EQ(20, settings.NextHigherBitrateKbps(2000));
374 EXPECT_FALSE(settings.NextHigherBitrateKbps(2001));
375}
376
Åsa Persson4869bd62019-08-23 16:20:06 +0200377TEST(BalancedDegradationSettings, CanAdaptUpIfBitrateGeNextHigherKbpsLimit) {
378 webrtc::test::ScopedFieldTrials field_trials(
379 "WebRTC-Video-BalancedDegradationSettings/"
380 "pixels:1000|2000|3000|4000,fps:5|15|25|30,kbps:0|80|0|90/");
381 BalancedDegradationSettings settings;
382 EXPECT_TRUE(settings.CanAdaptUp(1000, 0)); // No bitrate provided.
383 EXPECT_FALSE(settings.CanAdaptUp(1000, 79000));
384 EXPECT_TRUE(settings.CanAdaptUp(1000, 80000));
385 EXPECT_TRUE(settings.CanAdaptUp(1001, 1)); // No limit configured.
386 EXPECT_FALSE(settings.CanAdaptUp(3000, 89000));
387 EXPECT_TRUE(settings.CanAdaptUp(3000, 90000));
388 EXPECT_TRUE(settings.CanAdaptUp(3001, 1)); // No limit.
389}
390
Åsa Persson30ab0152019-08-27 12:22:33 +0200391TEST(BalancedDegradationSettings, GetsResolutionNextHigherBitrate) {
392 webrtc::test::ScopedFieldTrials field_trials(
393 "WebRTC-Video-BalancedDegradationSettings/"
394 "pixels:1000|2000|3000,fps:5|15|25,kbps_res:44|88|99/");
395 BalancedDegradationSettings settings;
396 EXPECT_EQ(88, settings.ResolutionNextHigherBitrateKbps(1));
397 EXPECT_EQ(88, settings.ResolutionNextHigherBitrateKbps(1000));
398 EXPECT_EQ(99, settings.ResolutionNextHigherBitrateKbps(1001));
399 EXPECT_EQ(99, settings.ResolutionNextHigherBitrateKbps(2000));
400 EXPECT_FALSE(settings.ResolutionNextHigherBitrateKbps(2001));
401}
402
403TEST(BalancedDegradationSettings,
404 GetsResolutionNextHigherBitrateWithUnsetValue) {
405 webrtc::test::ScopedFieldTrials field_trials(
406 "WebRTC-Video-BalancedDegradationSettings/"
407 "pixels:1000|2000|3000,fps:5|15|25,kbps_res:10|0|20/");
408 BalancedDegradationSettings settings;
409 EXPECT_FALSE(settings.ResolutionNextHigherBitrateKbps(1));
410 EXPECT_FALSE(settings.ResolutionNextHigherBitrateKbps(1000));
411 EXPECT_EQ(20, settings.ResolutionNextHigherBitrateKbps(1001));
412 EXPECT_EQ(20, settings.ResolutionNextHigherBitrateKbps(2000));
413 EXPECT_FALSE(settings.ResolutionNextHigherBitrateKbps(2001));
414}
415
416TEST(BalancedDegradationSettings,
417 CanAdaptUpResolutionIfBitrateGeNextHigherKbpsLimit) {
418 webrtc::test::ScopedFieldTrials field_trials(
419 "WebRTC-Video-BalancedDegradationSettings/"
420 "pixels:1000|2000|3000|4000,fps:5|15|25|30,kbps_res:0|80|0|90/");
421 BalancedDegradationSettings settings;
422 EXPECT_TRUE(settings.CanAdaptUpResolution(1000, 0)); // No bitrate provided.
423 EXPECT_FALSE(settings.CanAdaptUpResolution(1000, 79000));
424 EXPECT_TRUE(settings.CanAdaptUpResolution(1000, 80000));
425 EXPECT_TRUE(settings.CanAdaptUpResolution(1001, 1)); // No limit configured.
426 EXPECT_FALSE(settings.CanAdaptUpResolution(3000, 89000));
427 EXPECT_TRUE(settings.CanAdaptUpResolution(3000, 90000));
428 EXPECT_TRUE(settings.CanAdaptUpResolution(3001, 1)); // No limit.
429}
430
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200431TEST(BalancedDegradationSettings, GetsFpsDiff) {
432 webrtc::test::ScopedFieldTrials field_trials(
433 "WebRTC-Video-BalancedDegradationSettings/"
434 "pixels:1000|2000|3000,fps:5|15|25,fps_diff:0|-2|3/");
435 BalancedDegradationSettings settings;
436 EXPECT_EQ(0, settings.MinFpsDiff(1));
437 EXPECT_EQ(0, settings.MinFpsDiff(1000));
438 EXPECT_EQ(-2, settings.MinFpsDiff(1001));
439 EXPECT_EQ(-2, settings.MinFpsDiff(2000));
440 EXPECT_EQ(3, settings.MinFpsDiff(2001));
441 EXPECT_EQ(3, settings.MinFpsDiff(3000));
442 EXPECT_FALSE(settings.MinFpsDiff(3001));
443}
444
445TEST(BalancedDegradationSettings, GetsNoFpsDiffIfValueBelowMinSetting) {
446 webrtc::test::ScopedFieldTrials field_trials(
447 "WebRTC-Video-BalancedDegradationSettings/"
448 "pixels:1000|2000|3000,fps:5|15|25,fps_diff:-100|-99|-101/");
449 // Min valid fps_diff setting: -99.
450 BalancedDegradationSettings settings;
451 EXPECT_FALSE(settings.MinFpsDiff(1000));
452 EXPECT_EQ(-99, settings.MinFpsDiff(2000));
453 EXPECT_FALSE(settings.MinFpsDiff(3000));
454}
455
Åsa Persson12314192019-06-20 15:45:07 +0200456TEST(BalancedDegradationSettings, QpThresholdsNotSetByDefault) {
457 webrtc::test::ScopedFieldTrials field_trials(
458 "WebRTC-Video-BalancedDegradationSettings/"
459 "pixels:1000|2000|3000,fps:5|15|25/");
460 BalancedDegradationSettings settings;
461 EXPECT_FALSE(settings.GetQpThresholds(kVideoCodecVP8, 1));
462 EXPECT_FALSE(settings.GetQpThresholds(kVideoCodecVP9, 1));
463 EXPECT_FALSE(settings.GetQpThresholds(kVideoCodecH264, 1));
464 EXPECT_FALSE(settings.GetQpThresholds(kVideoCodecGeneric, 1));
465}
466
467TEST(BalancedDegradationSettings, GetsConfigWithQpThresholds) {
468 webrtc::test::ScopedFieldTrials field_trials(
469 "WebRTC-Video-BalancedDegradationSettings/"
470 "pixels:1000|2000|3000,fps:5|15|25,vp8_qp_low:89|90|88,"
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200471 "vp8_qp_high:90|91|92,vp9_qp_low:27|28|29,vp9_qp_high:120|130|140,"
Åsa Persson12314192019-06-20 15:45:07 +0200472 "h264_qp_low:12|13|14,h264_qp_high:20|30|40,generic_qp_low:7|6|5,"
473 "generic_qp_high:22|23|24/");
474 BalancedDegradationSettings settings;
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200475 EXPECT_THAT(settings.GetConfigs(),
476 ::testing::ElementsAre(
477 BalancedDegradationSettings::Config{
478 1000,
479 5,
480 0,
Åsa Persson30ab0152019-08-27 12:22:33 +0200481 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200482 BalancedDegradationSettings::kNoFpsDiff,
483 {89, 90, 0},
484 {27, 120, 0},
485 {12, 20, 0},
486 {7, 22, 0}},
487 BalancedDegradationSettings::Config{
488 2000,
489 15,
490 0,
Åsa Persson30ab0152019-08-27 12:22:33 +0200491 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200492 BalancedDegradationSettings::kNoFpsDiff,
493 {90, 91, 0},
494 {28, 130, 0},
495 {13, 30, 0},
496 {6, 23, 0}},
497 BalancedDegradationSettings::Config{
498 3000,
499 25,
500 0,
Åsa Persson30ab0152019-08-27 12:22:33 +0200501 0,
Åsa Perssonf5e5d252019-08-16 17:24:59 +0200502 BalancedDegradationSettings::kNoFpsDiff,
503 {88, 92, 0},
504 {29, 140, 0},
505 {14, 40, 0},
506 {5, 24, 0}}));
Åsa Persson12314192019-06-20 15:45:07 +0200507}
508
509TEST(BalancedDegradationSettings, GetsDefaultConfigIfOnlyHasLowThreshold) {
510 webrtc::test::ScopedFieldTrials field_trials(
511 "WebRTC-Video-BalancedDegradationSettings/"
512 "pixels:1000|2000|3000,fps:5|15|25,vp8_qp_low:89|90|88/");
513 BalancedDegradationSettings settings;
514 VerifyIsDefault(settings.GetConfigs());
515}
516
517TEST(BalancedDegradationSettings, GetsDefaultConfigIfOnlyHasHighThreshold) {
518 webrtc::test::ScopedFieldTrials field_trials(
519 "WebRTC-Video-BalancedDegradationSettings/"
520 "pixels:1000|2000|3000,fps:5|15|25,vp8_qp_high:90|91|92/");
521 BalancedDegradationSettings settings;
522 VerifyIsDefault(settings.GetConfigs());
523}
524
525TEST(BalancedDegradationSettings, GetsDefaultConfigIfLowEqualsHigh) {
526 webrtc::test::ScopedFieldTrials field_trials(
527 "WebRTC-Video-BalancedDegradationSettings/"
528 "pixels:1000|2000|3000,fps:5|15|25,"
529 "vp8_qp_low:89|90|88,vp8_qp_high:90|91|88/");
530 BalancedDegradationSettings settings;
531 VerifyIsDefault(settings.GetConfigs());
532}
533
534TEST(BalancedDegradationSettings, GetsDefaultConfigIfLowGreaterThanHigh) {
535 webrtc::test::ScopedFieldTrials field_trials(
536 "WebRTC-Video-BalancedDegradationSettings/"
537 "pixels:1000|2000|3000,fps:5|15|25,"
538 "vp8_qp_low:89|90|88,vp8_qp_high:90|91|87/");
539 BalancedDegradationSettings settings;
540 VerifyIsDefault(settings.GetConfigs());
541}
542
543TEST(BalancedDegradationSettings, GetsDefaultConfigForZeroQpValue) {
544 webrtc::test::ScopedFieldTrials field_trials(
545 "WebRTC-Video-BalancedDegradationSettings/"
546 "pixels:1000|2000|3000,fps:5|15|25,"
547 "vp8_qp_low:89|0|88,vp8_qp_high:90|91|92/");
548 BalancedDegradationSettings settings;
549 VerifyIsDefault(settings.GetConfigs());
550}
551
552TEST(BalancedDegradationSettings, GetsVp8QpThresholds) {
553 webrtc::test::ScopedFieldTrials field_trials(
554 "WebRTC-Video-BalancedDegradationSettings/"
555 "pixels:1000|2000|3000,fps:5|15|25,"
556 "vp8_qp_low:89|90|88,vp8_qp_high:90|91|92/");
557 BalancedDegradationSettings settings;
558 EXPECT_EQ(89, settings.GetQpThresholds(kVideoCodecVP8, 1)->low);
559 EXPECT_EQ(90, settings.GetQpThresholds(kVideoCodecVP8, 1)->high);
560 EXPECT_EQ(90, settings.GetQpThresholds(kVideoCodecVP8, 1000)->high);
561 EXPECT_EQ(91, settings.GetQpThresholds(kVideoCodecVP8, 1001)->high);
562 EXPECT_EQ(91, settings.GetQpThresholds(kVideoCodecVP8, 2000)->high);
563 EXPECT_EQ(92, settings.GetQpThresholds(kVideoCodecVP8, 2001)->high);
564 EXPECT_EQ(92, settings.GetQpThresholds(kVideoCodecVP8, 3000)->high);
565 EXPECT_EQ(92, settings.GetQpThresholds(kVideoCodecVP8, 3001)->high);
566}
567
568TEST(BalancedDegradationSettings, GetsVp9QpThresholds) {
569 webrtc::test::ScopedFieldTrials field_trials(
570 "WebRTC-Video-BalancedDegradationSettings/"
571 "pixels:1000|2000|3000,fps:5|15|25,"
572 "vp9_qp_low:55|56|57,vp9_qp_high:155|156|157/");
573 BalancedDegradationSettings settings;
574 const auto thresholds = settings.GetQpThresholds(kVideoCodecVP9, 1000);
575 EXPECT_TRUE(thresholds);
576 EXPECT_EQ(55, thresholds->low);
577 EXPECT_EQ(155, thresholds->high);
578}
579
580TEST(BalancedDegradationSettings, GetsH264QpThresholds) {
581 webrtc::test::ScopedFieldTrials field_trials(
582 "WebRTC-Video-BalancedDegradationSettings/"
583 "pixels:1000|2000|3000,fps:5|15|25,"
584 "h264_qp_low:21|22|23,h264_qp_high:41|43|42/");
585 BalancedDegradationSettings settings;
586 const auto thresholds = settings.GetQpThresholds(kVideoCodecH264, 2000);
587 EXPECT_TRUE(thresholds);
588 EXPECT_EQ(22, thresholds->low);
589 EXPECT_EQ(43, thresholds->high);
590}
591
592TEST(BalancedDegradationSettings, GetsGenericQpThresholds) {
593 webrtc::test::ScopedFieldTrials field_trials(
594 "WebRTC-Video-BalancedDegradationSettings/"
595 "pixels:1000|2000|3000,fps:5|15|25,"
596 "generic_qp_low:2|3|4,generic_qp_high:22|23|24/");
597 BalancedDegradationSettings settings;
598 const auto thresholds = settings.GetQpThresholds(kVideoCodecGeneric, 3000);
599 EXPECT_TRUE(thresholds);
600 EXPECT_EQ(4, thresholds->low);
601 EXPECT_EQ(24, thresholds->high);
602}
603
Åsa Perssonf3d828e2019-05-06 12:22:49 +0200604} // namespace webrtc