1 /* 2 * Copyright (c) 2018 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 "api/transport/goog_cc_factory.h" 12 13 #include <memory> 14 #include <utility> 15 16 #include "modules/congestion_controller/goog_cc/goog_cc_network_control.h" 17 18 namespace webrtc { GoogCcNetworkControllerFactory(RtcEventLog * event_log)19GoogCcNetworkControllerFactory::GoogCcNetworkControllerFactory( 20 RtcEventLog* event_log) 21 : event_log_(event_log) {} 22 GoogCcNetworkControllerFactory(NetworkStatePredictorFactoryInterface * network_state_predictor_factory)23GoogCcNetworkControllerFactory::GoogCcNetworkControllerFactory( 24 NetworkStatePredictorFactoryInterface* network_state_predictor_factory) { 25 factory_config_.network_state_predictor_factory = 26 network_state_predictor_factory; 27 } 28 GoogCcNetworkControllerFactory(GoogCcFactoryConfig config)29GoogCcNetworkControllerFactory::GoogCcNetworkControllerFactory( 30 GoogCcFactoryConfig config) 31 : factory_config_(std::move(config)) {} 32 33 std::unique_ptr<NetworkControllerInterface> Create(NetworkControllerConfig config)34GoogCcNetworkControllerFactory::Create(NetworkControllerConfig config) { 35 if (event_log_) 36 config.event_log = event_log_; 37 GoogCcConfig goog_cc_config; 38 goog_cc_config.feedback_only = factory_config_.feedback_only; 39 if (factory_config_.network_state_estimator_factory) { 40 RTC_DCHECK(config.key_value_config); 41 goog_cc_config.network_state_estimator = 42 factory_config_.network_state_estimator_factory->Create( 43 config.key_value_config); 44 } 45 if (factory_config_.network_state_predictor_factory) { 46 goog_cc_config.network_state_predictor = 47 factory_config_.network_state_predictor_factory 48 ->CreateNetworkStatePredictor(); 49 } 50 return std::make_unique<GoogCcNetworkController>(config, 51 std::move(goog_cc_config)); 52 } 53 GetProcessInterval() const54TimeDelta GoogCcNetworkControllerFactory::GetProcessInterval() const { 55 const int64_t kUpdateIntervalMs = 25; 56 return TimeDelta::Millis(kUpdateIntervalMs); 57 } 58 GoogCcFeedbackNetworkControllerFactory(RtcEventLog * event_log)59GoogCcFeedbackNetworkControllerFactory::GoogCcFeedbackNetworkControllerFactory( 60 RtcEventLog* event_log) 61 : GoogCcNetworkControllerFactory(event_log) { 62 factory_config_.feedback_only = true; 63 } 64 65 } // namespace webrtc 66