1 /*
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
15 namespace webrtc {
16 namespace {
17 constexpr char kFieldTrialName[] = "WebRTC-StableTargetRate";
18 } // namespace
19
StableTargetRateExperiment(const FieldTrialsView * const key_value_config,double default_video_hysteresis,double default_screenshare_hysteresis)20 StableTargetRateExperiment::StableTargetRateExperiment(
21 const FieldTrialsView* const key_value_config,
22 double default_video_hysteresis,
23 double default_screenshare_hysteresis)
24 : enabled_("enabled", false),
25 video_hysteresis_factor_("video_hysteresis_factor",
26 default_video_hysteresis),
27 screenshare_hysteresis_factor_("screenshare_hysteresis_factor",
28 default_screenshare_hysteresis) {
29 ParseFieldTrial(
30 {&enabled_, &video_hysteresis_factor_, &screenshare_hysteresis_factor_},
31 key_value_config->Lookup(kFieldTrialName));
32 }
33
34 StableTargetRateExperiment::StableTargetRateExperiment(
35 const StableTargetRateExperiment&) = default;
36 StableTargetRateExperiment::StableTargetRateExperiment(
37 StableTargetRateExperiment&&) = default;
38
ParseFromFieldTrials()39 StableTargetRateExperiment StableTargetRateExperiment::ParseFromFieldTrials() {
40 FieldTrialBasedConfig config;
41 return ParseFromKeyValueConfig(&config);
42 }
43
ParseFromKeyValueConfig(const FieldTrialsView * const key_value_config)44 StableTargetRateExperiment StableTargetRateExperiment::ParseFromKeyValueConfig(
45 const FieldTrialsView* const key_value_config) {
46 return StableTargetRateExperiment(key_value_config,
47 /*default_video_hysteresis=*/1.2,
48 /*default_screenshare_hysteresis=*/1.35);
49 }
50
IsEnabled() const51 bool StableTargetRateExperiment::IsEnabled() const {
52 return enabled_.Get();
53 }
54
GetVideoHysteresisFactor() const55 double StableTargetRateExperiment::GetVideoHysteresisFactor() const {
56 return video_hysteresis_factor_.Get();
57 }
58
GetScreenshareHysteresisFactor() const59 double StableTargetRateExperiment::GetScreenshareHysteresisFactor() const {
60 return screenshare_hysteresis_factor_.Get();
61 }
62
63 } // namespace webrtc
64