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

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

Issue 2725823002: Move delay_based_bwe_ into CongestionController (Closed)
Patch Set: More refactoring + UTs moved. 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
16 #include "webrtc/base/checks.h" 13 #include "webrtc/base/checks.h"
17 #include "webrtc/base/logging.h" 14 #include "webrtc/base/logging.h"
18 #include "webrtc/base/mod_ops.h" 15 #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"
21 #include "webrtc/modules/congestion_controller/delay_based_bwe.h" 16 #include "webrtc/modules/congestion_controller/delay_based_bwe.h"
22 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" 17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
23 #include "webrtc/modules/utility/include/process_thread.h"
24 #include "webrtc/system_wrappers/include/field_trial.h" 18 #include "webrtc/system_wrappers/include/field_trial.h"
25 19
26 namespace webrtc { 20 namespace webrtc {
27 21
28 const int64_t kNoTimestamp = -1; 22 const int64_t kNoTimestamp = -1;
29 const int64_t kSendTimeHistoryWindowMs = 60000; 23 const int64_t kSendTimeHistoryWindowMs = 60000;
30 const int64_t kBaseTimestampScaleFactor = 24 const int64_t kBaseTimestampScaleFactor =
31 rtcp::TransportFeedback::kDeltaScaleFactor * (1 << 8); 25 rtcp::TransportFeedback::kDeltaScaleFactor * (1 << 8);
32 const int64_t kBaseTimestampRangeSizeUs = kBaseTimestampScaleFactor * (1 << 24); 26 const int64_t kBaseTimestampRangeSizeUs = kBaseTimestampScaleFactor * (1 << 24);
33 27
34 TransportFeedbackAdapter::TransportFeedbackAdapter( 28 TransportFeedbackAdapter::TransportFeedbackAdapter(Clock* clock)
35 RtcEventLog* event_log,
36 Clock* clock,
37 BitrateController* bitrate_controller)
38 : send_side_bwe_with_overhead_(webrtc::field_trial::FindFullName( 29 : send_side_bwe_with_overhead_(webrtc::field_trial::FindFullName(
39 "WebRTC-SendSideBwe-WithOverhead") == 30 "WebRTC-SendSideBwe-WithOverhead") ==
40 "Enabled"), 31 "Enabled"),
41 transport_overhead_bytes_per_packet_(0), 32 transport_overhead_bytes_per_packet_(0),
42 send_time_history_(clock, kSendTimeHistoryWindowMs), 33 send_time_history_(clock, kSendTimeHistoryWindowMs),
43 event_log_(event_log),
44 clock_(clock), 34 clock_(clock),
45 current_offset_ms_(kNoTimestamp), 35 current_offset_ms_(kNoTimestamp),
46 last_timestamp_us_(kNoTimestamp), 36 last_timestamp_us_(kNoTimestamp) {
47 bitrate_controller_(bitrate_controller) {
48 packetizer_thread_checker_.DetachFromThread(); 37 packetizer_thread_checker_.DetachFromThread();
49 module_process_thread_checker_.DetachFromThread();
50 } 38 }
51 39
52 TransportFeedbackAdapter::~TransportFeedbackAdapter() { 40 TransportFeedbackAdapter::~TransportFeedbackAdapter() {
53 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 41 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
54 } 42 }
55 43
56 void TransportFeedbackAdapter::InitBwe() {
57 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
58 rtc::CritScope cs(&bwe_lock_);
59 delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_));
60 }
61
62 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number, 44 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number,
63 size_t length, 45 size_t length,
64 const PacedPacketInfo& pacing_info) { 46 const PacedPacketInfo& pacing_info) {
65 RTC_DCHECK(packetizer_thread_checker_.CalledOnValidThread()); 47 RTC_DCHECK(packetizer_thread_checker_.CalledOnValidThread());
66 rtc::CritScope cs(&lock_); 48 rtc::CritScope cs(&lock_);
67 if (send_side_bwe_with_overhead_) { 49 if (send_side_bwe_with_overhead_) {
68 length += transport_overhead_bytes_per_packet_; 50 length += transport_overhead_bytes_per_packet_;
69 } 51 }
70 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info); 52 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info);
71 } 53 }
72 54
73 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, 55 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number,
74 int64_t send_time_ms) { 56 int64_t send_time_ms) {
75 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 57 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
76 rtc::CritScope cs(&lock_); 58 rtc::CritScope cs(&lock_);
77 send_time_history_.OnSentPacket(sequence_number, send_time_ms); 59 send_time_history_.OnSentPacket(sequence_number, send_time_ms);
78 } 60 }
79 61
80 void TransportFeedbackAdapter::SetStartBitrate(int start_bitrate_bps) {
81 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
82 rtc::CritScope cs(&bwe_lock_);
83 delay_based_bwe_->SetStartBitrate(start_bitrate_bps);
84 }
85
86 void TransportFeedbackAdapter::SetMinBitrate(int min_bitrate_bps) {
87 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
88 rtc::CritScope cs(&bwe_lock_);
89 delay_based_bwe_->SetMinBitrate(min_bitrate_bps);
90 }
91
92 void TransportFeedbackAdapter::SetTransportOverhead( 62 void TransportFeedbackAdapter::SetTransportOverhead(
93 int transport_overhead_bytes_per_packet) { 63 int transport_overhead_bytes_per_packet) {
94 rtc::CritScope cs(&lock_); 64 rtc::CritScope cs(&lock_);
95 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet; 65 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet;
96 } 66 }
97 67
98 int64_t TransportFeedbackAdapter::GetProbingIntervalMs() const {
99 rtc::CritScope cs(&bwe_lock_);
100 return delay_based_bwe_->GetProbingIntervalMs();
101 }
102
103 std::vector<PacketFeedback> TransportFeedbackAdapter::GetPacketFeedbackVector( 68 std::vector<PacketFeedback> TransportFeedbackAdapter::GetPacketFeedbackVector(
104 const rtcp::TransportFeedback& feedback) { 69 const rtcp::TransportFeedback& feedback) {
105 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 70 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
106 int64_t timestamp_us = feedback.GetBaseTimeUs(); 71 int64_t timestamp_us = feedback.GetBaseTimeUs();
107 // Add timestamp deltas to a local time base selected on first packet arrival. 72 // Add timestamp deltas to a local time base selected on first packet arrival.
108 // This won't be the true time base, but makes it easier to manually inspect 73 // This won't be the true time base, but makes it easier to manually inspect
109 // time stamps. 74 // time stamps.
110 if (last_timestamp_us_ == kNoTimestamp) { 75 if (last_timestamp_us_ == kNoTimestamp) {
111 current_offset_ms_ = clock_->TimeInMilliseconds(); 76 current_offset_ms_ = clock_->TimeInMilliseconds();
112 } else { 77 } else {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 << ". Send time history too small?"; 138 << ". Send time history too small?";
174 } 139 }
175 } 140 }
176 return packet_feedback_vector; 141 return packet_feedback_vector;
177 } 142 }
178 143
179 void TransportFeedbackAdapter::OnTransportFeedback( 144 void TransportFeedbackAdapter::OnTransportFeedback(
180 const rtcp::TransportFeedback& feedback) { 145 const rtcp::TransportFeedback& feedback) {
181 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 146 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
182 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); 147 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback);
183 DelayBasedBwe::Result result;
184 {
185 rtc::CritScope cs(&bwe_lock_);
186 result = delay_based_bwe_->IncomingPacketFeedbackVector(
187 last_packet_feedback_vector_);
188 }
189 if (result.updated)
190 bitrate_controller_->OnDelayBasedBweResult(result);
191 } 148 }
192 149
193 std::vector<PacketFeedback> 150 std::vector<PacketFeedback>
194 TransportFeedbackAdapter::GetTransportFeedbackVector() const { 151 TransportFeedbackAdapter::GetTransportFeedbackVector() const {
195 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); 152 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
196 return last_packet_feedback_vector_; 153 return last_packet_feedback_vector_;
197 } 154 }
198
199 void TransportFeedbackAdapter::OnRttUpdate(int64_t avg_rtt_ms,
200 int64_t max_rtt_ms) {
201 RTC_DCHECK(module_process_thread_checker_.CalledOnValidThread());
202 rtc::CritScope cs(&bwe_lock_);
203 delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms);
204 }
205
206 } // namespace webrtc 155 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698