xref: /aosp_15_r20/external/webrtc/rtc_base/experiments/stable_target_rate_experiment.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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