blob: fa7a97b51f6bd9b0c47fc68aea58370c3b97248f [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,
Erik Språng2b9dba32019-09-04 16:30:47 +020023 double default_video_hysteresis,
24 double default_screenshare_hysteresis)
Erik Språngadfb4f72019-08-23 20:02:13 +020025 : 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(
Erik Språngcf9cbf52019-09-04 14:30:57 +020036 const StableTargetRateExperiment&) = default;
37StableTargetRateExperiment::StableTargetRateExperiment(
Erik Språngadfb4f72019-08-23 20:02:13 +020038 StableTargetRateExperiment&&) = default;
39
40StableTargetRateExperiment StableTargetRateExperiment::ParseFromFieldTrials() {
41 FieldTrialBasedConfig config;
42 return ParseFromKeyValueConfig(&config);
43}
44
45StableTargetRateExperiment StableTargetRateExperiment::ParseFromKeyValueConfig(
46 const WebRtcKeyValueConfig* const key_value_config) {
Erik Språng2b9dba32019-09-04 16:30:47 +020047 RateControlSettings rate_control =
48 RateControlSettings::ParseFromKeyValueConfig(key_value_config);
49 return StableTargetRateExperiment(
50 key_value_config,
51 rate_control.GetSimulcastHysteresisFactor(VideoCodecMode::kRealtimeVideo),
52 rate_control.GetSimulcastHysteresisFactor(
53 VideoCodecMode::kScreensharing));
Erik Språngadfb4f72019-08-23 20:02:13 +020054}
55
56bool StableTargetRateExperiment::IsEnabled() const {
57 return enabled_.Get();
58}
59
Erik Språng2b9dba32019-09-04 16:30:47 +020060double StableTargetRateExperiment::GetVideoHysteresisFactor() const {
61 return video_hysteresis_factor_.Get();
Erik Språngadfb4f72019-08-23 20:02:13 +020062}
63
Erik Språng2b9dba32019-09-04 16:30:47 +020064double StableTargetRateExperiment::GetScreenshareHysteresisFactor() const {
65 return screenshare_hysteresis_factor_.Get();
Erik Språngadfb4f72019-08-23 20:02:13 +020066}
67
68} // namespace webrtc