/* * Copyright (c) 2018 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. */ #ifndef MODULES_CONGESTION_CONTROLLER_GOOG_CC_NETWORK_CONTROL_H_ #define MODULES_CONGESTION_CONTROLLER_GOOG_CC_NETWORK_CONTROL_H_ #include #include #include #include #include "api/optional.h" #include "logging/rtc_event_log/rtc_event_log.h" #include "modules/bitrate_controller/send_side_bandwidth_estimation.h" #include "modules/congestion_controller/acknowledged_bitrate_estimator.h" #include "modules/congestion_controller/alr_detector.h" #include "modules/congestion_controller/delay_based_bwe.h" #include "modules/congestion_controller/network_control/include/network_control.h" #include "modules/congestion_controller/probe_controller.h" #include "rtc_base/constructormagic.h" namespace webrtc { class GoogCcNetworkController : public NetworkControllerInterface { public: GoogCcNetworkController(RtcEventLog* event_log, NetworkControllerObserver* observer); ~GoogCcNetworkController() override; // NetworkControllerInterface void OnNetworkAvailability(NetworkAvailability msg) override; void OnNetworkRouteChange(NetworkRouteChange msg) override; void OnProcessInterval(ProcessInterval msg) override; void OnRemoteBitrateReport(RemoteBitrateReport msg) override; void OnRoundTripTimeUpdate(RoundTripTimeUpdate msg) override; void OnSentPacket(SentPacket msg) override; void OnStreamsConfig(StreamsConfig msg) override; void OnTargetRateConstraints(TargetRateConstraints msg) override; void OnTransportLossReport(TransportLossReport msg) override; void OnTransportPacketsFeedback(TransportPacketsFeedback msg) override; private: void MaybeUpdateCongestionWindow(); void MaybeTriggerOnNetworkChanged(Timestamp at_time); bool GetNetworkParameters(int32_t* estimated_bitrate_bps, uint8_t* fraction_loss, int64_t* rtt_ms, Timestamp at_time); void OnNetworkEstimate(NetworkEstimate msg); void UpdatePacingRates(Timestamp at_time); RtcEventLog* const event_log_; NetworkControllerObserver* const observer_; const std::unique_ptr probe_controller_; std::unique_ptr bandwidth_estimation_; std::unique_ptr alr_detector_; std::unique_ptr delay_based_bwe_; std::unique_ptr acknowledged_bitrate_estimator_; std::deque feedback_rtts_; rtc::Optional min_feedback_rtt_ms_; rtc::Optional last_estimate_; rtc::Optional last_target_rate_; int32_t last_estimated_bitrate_bps_ = 0; uint8_t last_estimated_fraction_loss_ = 0; int64_t last_estimated_rtt_ms_ = 0; double pacing_factor_; DataRate min_pacing_rate_; DataRate max_padding_rate_; bool in_cwnd_experiment_; int64_t accepted_queue_ms_; bool previously_in_alr = false; RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(GoogCcNetworkController); }; } // namespace webrtc #endif // MODULES_CONGESTION_CONTROLLER_GOOG_CC_NETWORK_CONTROL_H_