blob: fa7a97b51f6bd9b0c47fc68aea58370c3b97248f [file] [log] [blame]
/*
* Copyright 2019 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "rtc_base/experiments/stable_target_rate_experiment.h"
#include "api/transport/field_trial_based_config.h"
#include "rtc_base/experiments/rate_control_settings.h"
namespace webrtc {
namespace {
constexpr char kFieldTrialName[] = "WebRTC-StableTargetRate";
} // namespace
StableTargetRateExperiment::StableTargetRateExperiment(
const WebRtcKeyValueConfig* const key_value_config,
double default_video_hysteresis,
double default_screenshare_hysteresis)
: enabled_("enabled", false),
video_hysteresis_factor_("video_hysteresis_factor",
default_video_hysteresis),
screenshare_hysteresis_factor_("screenshare_hysteresis_factor",
default_screenshare_hysteresis) {
ParseFieldTrial(
{&enabled_, &video_hysteresis_factor_, &screenshare_hysteresis_factor_},
key_value_config->Lookup(kFieldTrialName));
}
StableTargetRateExperiment::StableTargetRateExperiment(
const StableTargetRateExperiment&) = default;
StableTargetRateExperiment::StableTargetRateExperiment(
StableTargetRateExperiment&&) = default;
StableTargetRateExperiment StableTargetRateExperiment::ParseFromFieldTrials() {
FieldTrialBasedConfig config;
return ParseFromKeyValueConfig(&config);
}
StableTargetRateExperiment StableTargetRateExperiment::ParseFromKeyValueConfig(
const WebRtcKeyValueConfig* const key_value_config) {
RateControlSettings rate_control =
RateControlSettings::ParseFromKeyValueConfig(key_value_config);
return StableTargetRateExperiment(
key_value_config,
rate_control.GetSimulcastHysteresisFactor(VideoCodecMode::kRealtimeVideo),
rate_control.GetSimulcastHysteresisFactor(
VideoCodecMode::kScreensharing));
}
bool StableTargetRateExperiment::IsEnabled() const {
return enabled_.Get();
}
double StableTargetRateExperiment::GetVideoHysteresisFactor() const {
return video_hysteresis_factor_.Get();
}
double StableTargetRateExperiment::GetScreenshareHysteresisFactor() const {
return screenshare_hysteresis_factor_.Get();
}
} // namespace webrtc