Index: webrtc/modules/congestion_controller/probing_interval_estimator.cc |
diff --git a/webrtc/modules/congestion_controller/probing_interval_estimator.cc b/webrtc/modules/congestion_controller/probing_interval_estimator.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d02263b5033d102fe2a006514424aba867fcf1b9 |
--- /dev/null |
+++ b/webrtc/modules/congestion_controller/probing_interval_estimator.cc |
@@ -0,0 +1,50 @@ |
+/* |
+ * Copyright (c) 2016 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 "webrtc/modules/congestion_controller/probing_interval_estimator.h" |
+ |
+#include <algorithm> |
+#include <utility> |
+ |
+namespace webrtc { |
+ |
+namespace { |
+constexpr int kMinIntervalMs = 2000; |
+constexpr int kMaxIntervalMs = 50000; |
+} |
+ |
+ProbingIntervalEstimator::ProbingIntervalEstimator( |
+ const AimdRateControl* aimd_rate_control) |
+ : ProbingIntervalEstimator(kMinIntervalMs, |
+ kMaxIntervalMs, |
+ aimd_rate_control) {} |
+ |
+ProbingIntervalEstimator::ProbingIntervalEstimator( |
+ int min_interval_ms, |
+ int max_interval_ms, |
+ const AimdRateControl* aimd_rate_control) |
+ : min_interval_ms_(min_interval_ms), |
+ max_interval_ms_(max_interval_ms), |
+ aimd_rate_control_(aimd_rate_control) {} |
+ |
+rtc::Optional<int> ProbingIntervalEstimator::GetIntervalMs() const { |
+ rtc::Optional<int> drop_height = |
minyue-webrtc
2016/11/15 12:20:36
even better to rename this var to bitrate_drop (or
michaelt
2016/11/15 13:08:15
Done.
|
+ aimd_rate_control_->GetLastBitrateDecreaseBps(); |
+ int increase_rate = aimd_rate_control_->GetNearMaxIncreaseRateBps(); |
+ |
+ if (!drop_height || increase_rate <= 0) |
+ return rtc::Optional<int>(); |
+ |
+ return rtc::Optional<int>(std::min( |
+ max_interval_ms_, |
+ std::max(1000 * (*drop_height) / increase_rate, min_interval_ms_))); |
+} |
+ |
+} // namespace webrtc |