blob: 9792bad61c3007c19edda4cc4309cca782f4a3b9 [file] [log] [blame]
Elad Alon80f53b72019-10-11 14:19:431/*
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/min_video_bitrate_experiment.h"
12
13#include "absl/types/optional.h"
14#include "api/units/data_rate.h"
15#include "api/video/video_codec_type.h"
16#include "test/field_trial.h"
17#include "test/gtest.h"
18
19namespace webrtc {
20namespace {
21
22TEST(GetExperimentalMinVideoBitrateTest,
23 NulloptForAllCodecsIfFieldTrialUndefined) {
24 test::ScopedFieldTrials field_trials("");
25
26 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecGeneric),
27 absl::nullopt);
28 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP8),
29 absl::nullopt);
30 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP9),
31 absl::nullopt);
32 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecH264),
33 absl::nullopt);
34 EXPECT_EQ(
35 GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecMultiplex),
36 absl::nullopt);
37}
38
39TEST(GetExperimentalMinVideoBitrateTest,
40 NulloptForAllCodecsIfFieldTrialDisabled) {
41 test::ScopedFieldTrials field_trials(
42 "WebRTC-Video-MinVideoBitrate/Disabled,br:123kbps/");
43
44 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecGeneric),
45 absl::nullopt);
46 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP8),
47 absl::nullopt);
48 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP9),
49 absl::nullopt);
50 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecH264),
51 absl::nullopt);
52 EXPECT_EQ(
53 GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecMultiplex),
54 absl::nullopt);
55}
56
57TEST(GetExperimentalMinVideoBitrateTest, BrForAllCodecsIfDefined) {
58 test::ScopedFieldTrials field_trials(
59 "WebRTC-Video-MinVideoBitrate/Enabled,br:123kbps/");
60
61 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecGeneric),
Danil Chapovalovcad3e0e2020-02-17 17:46:0762 absl::make_optional(DataRate::KilobitsPerSec(123)));
Elad Alon80f53b72019-10-11 14:19:4363 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP8),
Danil Chapovalovcad3e0e2020-02-17 17:46:0764 absl::make_optional(DataRate::KilobitsPerSec(123)));
Elad Alon80f53b72019-10-11 14:19:4365 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP9),
Danil Chapovalovcad3e0e2020-02-17 17:46:0766 absl::make_optional(DataRate::KilobitsPerSec(123)));
Elad Alon80f53b72019-10-11 14:19:4367 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecH264),
Danil Chapovalovcad3e0e2020-02-17 17:46:0768 absl::make_optional(DataRate::KilobitsPerSec(123)));
Elad Alon80f53b72019-10-11 14:19:4369 EXPECT_EQ(
70 GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecMultiplex),
Danil Chapovalovcad3e0e2020-02-17 17:46:0771 absl::make_optional(DataRate::KilobitsPerSec(123)));
Elad Alon80f53b72019-10-11 14:19:4372}
73
74TEST(GetExperimentalMinVideoBitrateTest, BrTrumpsSpecificCodecConfigs) {
75 test::ScopedFieldTrials field_trials(
76 "WebRTC-Video-MinVideoBitrate/"
77 "Enabled,br:123kbps,vp8_br:100kbps,vp9_br:200kbps,h264_br:300kbps/");
78
79 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecGeneric),
Danil Chapovalovcad3e0e2020-02-17 17:46:0780 absl::make_optional(DataRate::KilobitsPerSec(123)));
Elad Alon80f53b72019-10-11 14:19:4381 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP8),
Danil Chapovalovcad3e0e2020-02-17 17:46:0782 absl::make_optional(DataRate::KilobitsPerSec(123)));
Elad Alon80f53b72019-10-11 14:19:4383 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP9),
Danil Chapovalovcad3e0e2020-02-17 17:46:0784 absl::make_optional(DataRate::KilobitsPerSec(123)));
Elad Alon80f53b72019-10-11 14:19:4385 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecH264),
Danil Chapovalovcad3e0e2020-02-17 17:46:0786 absl::make_optional(DataRate::KilobitsPerSec(123)));
Elad Alon80f53b72019-10-11 14:19:4387 EXPECT_EQ(
88 GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecMultiplex),
Danil Chapovalovcad3e0e2020-02-17 17:46:0789 absl::make_optional(DataRate::KilobitsPerSec(123)));
Elad Alon80f53b72019-10-11 14:19:4390}
91
92TEST(GetExperimentalMinVideoBitrateTest,
93 SpecificCodecConfigsIgnoredIfExpDisabled) {
94 test::ScopedFieldTrials field_trials(
95 "WebRTC-Video-MinVideoBitrate/"
96 "Disabled,vp8_br:100kbps,vp9_br:200kbps,h264_br:300kbps/");
97
98 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecGeneric),
99 absl::nullopt);
100 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP8),
101 absl::nullopt);
102 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP9),
103 absl::nullopt);
104 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecH264),
105 absl::nullopt);
106 EXPECT_EQ(
107 GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecMultiplex),
108 absl::nullopt);
109}
110
111TEST(GetExperimentalMinVideoBitrateTest, SpecificCodecConfigsUsedIfExpEnabled) {
112 test::ScopedFieldTrials field_trials(
113 "WebRTC-Video-MinVideoBitrate/"
114 "Enabled,vp8_br:100kbps,vp9_br:200kbps,h264_br:300kbps/");
115
116 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecGeneric),
117 absl::nullopt);
118 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP8),
Danil Chapovalovcad3e0e2020-02-17 17:46:07119 absl::make_optional(DataRate::KilobitsPerSec(100)));
Elad Alon80f53b72019-10-11 14:19:43120 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP9),
Danil Chapovalovcad3e0e2020-02-17 17:46:07121 absl::make_optional(DataRate::KilobitsPerSec(200)));
Elad Alon80f53b72019-10-11 14:19:43122 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecH264),
Danil Chapovalovcad3e0e2020-02-17 17:46:07123 absl::make_optional(DataRate::KilobitsPerSec(300)));
Elad Alon80f53b72019-10-11 14:19:43124 EXPECT_EQ(
125 GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecMultiplex),
126 absl::nullopt);
127}
128
129TEST(GetExperimentalMinVideoBitrateTest,
130 Vp8BitrateValueTakenFromFallbackIfAvailable) {
131 test::ScopedFieldTrials field_trials(
132 "WebRTC-Video-MinVideoBitrate/"
133 "Enabled,vp8_br:100kbps,vp9_br:200kbps,h264_br:300kbps/"
134 "WebRTC-VP8-Forced-Fallback-Encoder-v2/"
135 "Enabled-444444,555555,666666/");
136
137 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP8),
Danil Chapovalovcad3e0e2020-02-17 17:46:07138 absl::make_optional(DataRate::BitsPerSec(666666)));
Elad Alon80f53b72019-10-11 14:19:43139}
140
141TEST(GetExperimentalMinVideoBitrateTest,
142 NonVp8BitrateValuesTakenFromMinVideoBitrate) {
143 test::ScopedFieldTrials field_trials(
144 "WebRTC-Video-MinVideoBitrate/"
145 "Enabled,vp8_br:100kbps,vp9_br:200kbps,h264_br:300kbps/"
146 "WebRTC-VP8-Forced-Fallback-Encoder-v2/"
147 "Enabled-444444,555555,666666/");
148
149 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecGeneric),
150 absl::nullopt);
151 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecVP9),
Danil Chapovalovcad3e0e2020-02-17 17:46:07152 absl::make_optional(DataRate::KilobitsPerSec(200)));
Elad Alon80f53b72019-10-11 14:19:43153 EXPECT_EQ(GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecH264),
Danil Chapovalovcad3e0e2020-02-17 17:46:07154 absl::make_optional(DataRate::KilobitsPerSec(300)));
Elad Alon80f53b72019-10-11 14:19:43155 EXPECT_EQ(
156 GetExperimentalMinVideoBitrate(VideoCodecType::kVideoCodecMultiplex),
157 absl::nullopt);
158}
159
160} // namespace
161} // namespace webrtc