Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Side by Side Diff: webrtc/modules/congestion_controller/transport_feedback_adapter.cc

Issue 2743553003: Revert of Move delay_based_bwe_ into CongestionController (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/modules/congestion_controller/transport_feedback_adapter.h" 11 #include "webrtc/modules/congestion_controller/transport_feedback_adapter.h"
12 12
13 #include <algorithm>
14 #include <limits>
15
13 #include "webrtc/base/checks.h" 16 #include "webrtc/base/checks.h"
14 #include "webrtc/base/logging.h" 17 #include "webrtc/base/logging.h"
15 #include "webrtc/base/mod_ops.h" 18 #include "webrtc/base/mod_ops.h"
19 #include "webrtc/logging/rtc_event_log/rtc_event_log.h"
20 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
16 #include "webrtc/modules/congestion_controller/delay_based_bwe.h" 21 #include "webrtc/modules/congestion_controller/delay_based_bwe.h"
17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" 22 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
23 #include "webrtc/modules/utility/include/process_thread.h"
18 #include "webrtc/system_wrappers/include/field_trial.h" 24 #include "webrtc/system_wrappers/include/field_trial.h"
19 25
20 namespace webrtc { 26 namespace webrtc {
21 27
22 const int64_t kNoTimestamp = -1; 28 const int64_t kNoTimestamp = -1;
23 const int64_t kSendTimeHistoryWindowMs = 60000; 29 const int64_t kSendTimeHistoryWindowMs = 60000;
24 const int64_t kBaseTimestampScaleFactor = 30 const int64_t kBaseTimestampScaleFactor =
25 rtcp::TransportFeedback::kDeltaScaleFactor * (1 << 8); 31 rtcp::TransportFeedback::kDeltaScaleFactor * (1 << 8);
26 const int64_t kBaseTimestampRangeSizeUs = kBaseTimestampScaleFactor * (1 << 24); 32 const int64_t kBaseTimestampRangeSizeUs = kBaseTimestampScaleFactor * (1 << 24);
27 33
28 TransportFeedbackAdapter::TransportFeedbackAdapter(Clock* clock) 34 TransportFeedbackAdapter::TransportFeedbackAdapter(
35 RtcEventLog* event_log,
36 Clock* clock,
37 BitrateController* bitrate_controller)
29 : send_side_bwe_with_overhead_( 38 : send_side_bwe_with_overhead_(
30 webrtc::field_trial::IsEnabled("WebRTC-SendSideBwe-WithOverhead")), 39 webrtc::field_trial::IsEnabled("WebRTC-SendSideBwe-WithOverhead")),
31 transport_overhead_bytes_per_packet_(0), 40 transport_overhead_bytes_per_packet_(0),
32 send_time_history_(clock, kSendTimeHistoryWindowMs), 41 send_time_history_(clock, kSendTimeHistoryWindowMs),
42 event_log_(event_log),
33 clock_(clock), 43 clock_(clock),
34 current_offset_ms_(kNoTimestamp), 44 current_offset_ms_(kNoTimestamp),
35 last_timestamp_us_(kNoTimestamp) {} 45 last_timestamp_us_(kNoTimestamp),
46 bitrate_controller_(bitrate_controller) {}
36 47
37 TransportFeedbackAdapter::~TransportFeedbackAdapter() {} 48 TransportFeedbackAdapter::~TransportFeedbackAdapter() {}
38 49
50 void TransportFeedbackAdapter::InitBwe() {
51 rtc::CritScope cs(&bwe_lock_);
52 delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_));
53 }
54
39 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number, 55 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number,
40 size_t length, 56 size_t length,
41 const PacedPacketInfo& pacing_info) { 57 const PacedPacketInfo& pacing_info) {
42 rtc::CritScope cs(&lock_); 58 rtc::CritScope cs(&lock_);
43 if (send_side_bwe_with_overhead_) { 59 if (send_side_bwe_with_overhead_) {
44 length += transport_overhead_bytes_per_packet_; 60 length += transport_overhead_bytes_per_packet_;
45 } 61 }
46 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info); 62 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info);
47 } 63 }
48 64
49 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, 65 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number,
50 int64_t send_time_ms) { 66 int64_t send_time_ms) {
51 rtc::CritScope cs(&lock_); 67 rtc::CritScope cs(&lock_);
52 send_time_history_.OnSentPacket(sequence_number, send_time_ms); 68 send_time_history_.OnSentPacket(sequence_number, send_time_ms);
53 } 69 }
54 70
71 void TransportFeedbackAdapter::SetStartBitrate(int start_bitrate_bps) {
72 rtc::CritScope cs(&bwe_lock_);
73 delay_based_bwe_->SetStartBitrate(start_bitrate_bps);
74 }
75
76 void TransportFeedbackAdapter::SetMinBitrate(int min_bitrate_bps) {
77 rtc::CritScope cs(&bwe_lock_);
78 delay_based_bwe_->SetMinBitrate(min_bitrate_bps);
79 }
80
55 void TransportFeedbackAdapter::SetTransportOverhead( 81 void TransportFeedbackAdapter::SetTransportOverhead(
56 int transport_overhead_bytes_per_packet) { 82 int transport_overhead_bytes_per_packet) {
57 rtc::CritScope cs(&lock_); 83 rtc::CritScope cs(&lock_);
58 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet; 84 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet;
59 } 85 }
60 86
87 int64_t TransportFeedbackAdapter::GetProbingIntervalMs() const {
88 rtc::CritScope cs(&bwe_lock_);
89 return delay_based_bwe_->GetProbingIntervalMs();
90 }
91
61 void TransportFeedbackAdapter::ClearSendTimeHistory() { 92 void TransportFeedbackAdapter::ClearSendTimeHistory() {
62 rtc::CritScope cs(&lock_); 93 rtc::CritScope cs(&lock_);
63 send_time_history_.Clear(); 94 send_time_history_.Clear();
64 } 95 }
65 96
66 std::vector<PacketFeedback> TransportFeedbackAdapter::GetPacketFeedbackVector( 97 std::vector<PacketFeedback> TransportFeedbackAdapter::GetPacketFeedbackVector(
67 const rtcp::TransportFeedback& feedback) { 98 const rtcp::TransportFeedback& feedback) {
68 int64_t timestamp_us = feedback.GetBaseTimeUs(); 99 int64_t timestamp_us = feedback.GetBaseTimeUs();
69 // Add timestamp deltas to a local time base selected on first packet arrival. 100 // Add timestamp deltas to a local time base selected on first packet arrival.
70 // This won't be the true time base, but makes it easier to manually inspect 101 // This won't be the true time base, but makes it easier to manually inspect
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 << " packet" << (failed_lookups > 1 ? "s" : "") 165 << " packet" << (failed_lookups > 1 ? "s" : "")
135 << ". Send time history too small?"; 166 << ". Send time history too small?";
136 } 167 }
137 } 168 }
138 return packet_feedback_vector; 169 return packet_feedback_vector;
139 } 170 }
140 171
141 void TransportFeedbackAdapter::OnTransportFeedback( 172 void TransportFeedbackAdapter::OnTransportFeedback(
142 const rtcp::TransportFeedback& feedback) { 173 const rtcp::TransportFeedback& feedback) {
143 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); 174 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback);
175 DelayBasedBwe::Result result;
176 {
177 rtc::CritScope cs(&bwe_lock_);
178 result = delay_based_bwe_->IncomingPacketFeedbackVector(
179 last_packet_feedback_vector_);
180 }
181 if (result.updated)
182 bitrate_controller_->OnDelayBasedBweResult(result);
144 } 183 }
145 184
146 std::vector<PacketFeedback> 185 std::vector<PacketFeedback>
147 TransportFeedbackAdapter::GetTransportFeedbackVector() const { 186 TransportFeedbackAdapter::GetTransportFeedbackVector() const {
148 return last_packet_feedback_vector_; 187 return last_packet_feedback_vector_;
149 } 188 }
189
190 void TransportFeedbackAdapter::OnRttUpdate(int64_t avg_rtt_ms,
191 int64_t max_rtt_ms) {
192 rtc::CritScope cs(&bwe_lock_);
193 delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms);
194 }
195
150 } // namespace webrtc 196 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698