blob: 28b541320b06717329a0f7cd5a0dfb4490e9d9ca [file] [log] [blame]
Erik Språngadfb4f72019-08-23 20:02:13 +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/stable_target_rate_experiment.h"
12
13#include "api/transport/field_trial_based_config.h"
14#include "rtc_base/experiments/rate_control_settings.h"
15
16namespace webrtc {
17namespace {
18constexpr char kFieldTrialName[] = "WebRTC-StableTargetRate";
19} // namespace
20
21StableTargetRateExperiment::StableTargetRateExperiment(
22 const WebRtcKeyValueConfig* const key_value_config,
23 absl::optional<double> default_video_hysteresis,
24 absl::optional<double> default_screenshare_hysteresis)
25 : enabled_("enabled", false),
26 video_hysteresis_factor_("video_hysteresis_factor",
27 default_video_hysteresis),
28 screenshare_hysteresis_factor_("screenshare_hysteresis_factor",
29 default_screenshare_hysteresis) {
30 ParseFieldTrial(
31 {&enabled_, &video_hysteresis_factor_, &screenshare_hysteresis_factor_},
32 key_value_config->Lookup(kFieldTrialName));
33}
34
35StableTargetRateExperiment::StableTargetRateExperiment(
36 StableTargetRateExperiment&&) = default;
37
38StableTargetRateExperiment StableTargetRateExperiment::ParseFromFieldTrials() {
39 FieldTrialBasedConfig config;
40 return ParseFromKeyValueConfig(&config);
41}
42
43StableTargetRateExperiment StableTargetRateExperiment::ParseFromKeyValueConfig(
44 const WebRtcKeyValueConfig* const key_value_config) {
45 if (key_value_config->Lookup("WebRTC-VideoRateControl") != "") {
46 RateControlSettings rate_control =
47 RateControlSettings::ParseFromKeyValueConfig(key_value_config);
48 return StableTargetRateExperiment(key_value_config,
49 rate_control.GetSimulcastHysteresisFactor(
50 VideoCodecMode::kRealtimeVideo),
51 rate_control.GetSimulcastHysteresisFactor(
52 VideoCodecMode::kScreensharing));
53 }
54 return StableTargetRateExperiment(key_value_config, absl::nullopt,
55 absl::nullopt);
56}
57
58bool StableTargetRateExperiment::IsEnabled() const {
59 return enabled_.Get();
60}
61
62absl::optional<double> StableTargetRateExperiment::GetVideoHysteresisFactor()
63 const {
64 return video_hysteresis_factor_.GetOptional();
65}
66
67absl::optional<double>
68StableTargetRateExperiment::GetScreenshareHysteresisFactor() const {
69 return screenshare_hysteresis_factor_.GetOptional();
70}
71
72} // namespace webrtc