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

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

Issue 2638083002: Attach TransportFeedbackPacketLossTracker to ANA (PLR only) (Closed)
Patch Set: Rebased Created 3 years, 10 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
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 BitrateController* bitrate_controller) 45 BitrateController* bitrate_controller)
46 : send_side_bwe_with_overhead_(webrtc::field_trial::FindFullName( 46 : send_side_bwe_with_overhead_(webrtc::field_trial::FindFullName(
47 "WebRTC-SendSideBwe-WithOverhead") == "Enabled"), 47 "WebRTC-SendSideBwe-WithOverhead") == "Enabled"),
48 transport_overhead_bytes_per_packet_(0), 48 transport_overhead_bytes_per_packet_(0),
49 send_time_history_(clock, kSendTimeHistoryWindowMs), 49 send_time_history_(clock, kSendTimeHistoryWindowMs),
50 clock_(clock), 50 clock_(clock),
51 current_offset_ms_(kNoTimestamp), 51 current_offset_ms_(kNoTimestamp),
52 last_timestamp_us_(kNoTimestamp), 52 last_timestamp_us_(kNoTimestamp),
53 bitrate_controller_(bitrate_controller) {} 53 bitrate_controller_(bitrate_controller) {}
54 54
55 TransportFeedbackAdapter::~TransportFeedbackAdapter() {} 55 TransportFeedbackAdapter::~TransportFeedbackAdapter() {
56 RTC_DCHECK(observers_.empty());
57 }
56 58
57 void TransportFeedbackAdapter::InitBwe() { 59 void TransportFeedbackAdapter::InitBwe() {
58 rtc::CritScope cs(&bwe_lock_); 60 rtc::CritScope cs(&bwe_lock_);
59 delay_based_bwe_.reset(new DelayBasedBwe(clock_)); 61 delay_based_bwe_.reset(new DelayBasedBwe(clock_));
60 } 62 }
61 63
62 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number, 64 void TransportFeedbackAdapter::AddPacket(uint32_t ssrc,
65 uint16_t sequence_number,
63 size_t length, 66 size_t length,
64 int probe_cluster_id) { 67 int probe_cluster_id) {
65 rtc::CritScope cs(&lock_); 68 {
66 if (send_side_bwe_with_overhead_) { 69 rtc::CritScope cs(&lock_);
67 length += transport_overhead_bytes_per_packet_; 70 if (send_side_bwe_with_overhead_) {
71 length += transport_overhead_bytes_per_packet_;
72 }
73 send_time_history_.AddAndRemoveOld(
74 sequence_number, length, probe_cluster_id);
68 } 75 }
69 send_time_history_.AddAndRemoveOld(sequence_number, length, probe_cluster_id); 76
77 {
78 rtc::CritScope cs(&observers_lock_);
79 for (auto observer : observers_) {
80 observer->OnPacketAdded(ssrc, sequence_number);
81 }
82 }
70 } 83 }
71 84
72 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, 85 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number,
73 int64_t send_time_ms) { 86 int64_t send_time_ms) {
74 rtc::CritScope cs(&lock_); 87 rtc::CritScope cs(&lock_);
75 send_time_history_.OnSentPacket(sequence_number, send_time_ms); 88 send_time_history_.OnSentPacket(sequence_number, send_time_ms);
minyue-webrtc 2017/02/16 09:59:09 why not adding observer here?
elad.alon_webrtc.org 2017/02/16 17:02:10 Because OnSentPacket() is called after the packet
76 } 89 }
77 90
78 void TransportFeedbackAdapter::SetStartBitrate(int start_bitrate_bps) { 91 void TransportFeedbackAdapter::SetStartBitrate(int start_bitrate_bps) {
79 rtc::CritScope cs(&bwe_lock_); 92 rtc::CritScope cs(&bwe_lock_);
80 delay_based_bwe_->SetStartBitrate(start_bitrate_bps); 93 delay_based_bwe_->SetStartBitrate(start_bitrate_bps);
81 } 94 }
82 95
83 void TransportFeedbackAdapter::SetMinBitrate(int min_bitrate_bps) { 96 void TransportFeedbackAdapter::SetMinBitrate(int min_bitrate_bps) {
84 rtc::CritScope cs(&bwe_lock_); 97 rtc::CritScope cs(&bwe_lock_);
85 delay_based_bwe_->SetMinBitrate(min_bitrate_bps); 98 delay_based_bwe_->SetMinBitrate(min_bitrate_bps);
86 } 99 }
87 100
88 void TransportFeedbackAdapter::SetTransportOverhead( 101 void TransportFeedbackAdapter::SetTransportOverhead(
89 int transport_overhead_bytes_per_packet) { 102 int transport_overhead_bytes_per_packet) {
90 rtc::CritScope cs(&lock_); 103 rtc::CritScope cs(&lock_);
91 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet; 104 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet;
92 } 105 }
93 106
94 int64_t TransportFeedbackAdapter::GetProbingIntervalMs() const { 107 int64_t TransportFeedbackAdapter::GetProbingIntervalMs() const {
95 rtc::CritScope cs(&bwe_lock_); 108 rtc::CritScope cs(&bwe_lock_);
96 return delay_based_bwe_->GetProbingIntervalMs(); 109 return delay_based_bwe_->GetProbingIntervalMs();
97 } 110 }
98 111
112 void TransportFeedbackAdapter::RegisterTransportFeedbackAdapterObserver(
113 TransportFeedbackAdapterObserver* observer) {
114 rtc::CritScope cs(&observers_lock_);
115 RTC_DCHECK(observer);
116 if (std::find(observers_.begin(),
117 observers_.end(),
118 observer) == observers_.end()) {
119 observers_.push_back(observer);
120 } else {
121 RTC_NOTREACHED();
122 }
123 }
124
125 void TransportFeedbackAdapter::DeRegisterTransportFeedbackAdapterObserver(
126 TransportFeedbackAdapterObserver* observer) {
127 rtc::CritScope cs(&observers_lock_);
128 RTC_DCHECK(observer);
129 auto elem = std::find(observers_.begin(), observers_.end(), observer);
130 if (elem != observers_.end()) {
131 observers_.erase(elem);
132 } else {
133 RTC_NOTREACHED();
134 }
135 }
136
99 std::vector<PacketInfo> TransportFeedbackAdapter::GetPacketFeedbackVector( 137 std::vector<PacketInfo> TransportFeedbackAdapter::GetPacketFeedbackVector(
100 const rtcp::TransportFeedback& feedback) { 138 const rtcp::TransportFeedback& feedback) {
101 int64_t timestamp_us = feedback.GetBaseTimeUs(); 139 int64_t timestamp_us = feedback.GetBaseTimeUs();
102 // Add timestamp deltas to a local time base selected on first packet arrival. 140 // Add timestamp deltas to a local time base selected on first packet arrival.
103 // This won't be the true time base, but makes it easier to manually inspect 141 // This won't be the true time base, but makes it easier to manually inspect
104 // time stamps. 142 // time stamps.
105 if (last_timestamp_us_ == kNoTimestamp) { 143 if (last_timestamp_us_ == kNoTimestamp) {
106 current_offset_ms_ = clock_->TimeInMilliseconds(); 144 current_offset_ms_ = clock_->TimeInMilliseconds();
107 } else { 145 } else {
108 int64_t delta = timestamp_us - last_timestamp_us_; 146 int64_t delta = timestamp_us - last_timestamp_us_;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 const rtcp::TransportFeedback& feedback) { 187 const rtcp::TransportFeedback& feedback) {
150 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); 188 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback);
151 DelayBasedBwe::Result result; 189 DelayBasedBwe::Result result;
152 { 190 {
153 rtc::CritScope cs(&bwe_lock_); 191 rtc::CritScope cs(&bwe_lock_);
154 result = delay_based_bwe_->IncomingPacketFeedbackVector( 192 result = delay_based_bwe_->IncomingPacketFeedbackVector(
155 last_packet_feedback_vector_); 193 last_packet_feedback_vector_);
156 } 194 }
157 if (result.updated) 195 if (result.updated)
158 bitrate_controller_->OnDelayBasedBweResult(result); 196 bitrate_controller_->OnDelayBasedBweResult(result);
197
198 {
199 rtc::CritScope cs(&observers_lock_);
200 for (auto observer : observers_) {
201 observer->OnTransportFeedback(feedback);
202 }
203 }
159 } 204 }
160 205
161 std::vector<PacketInfo> TransportFeedbackAdapter::GetTransportFeedbackVector() 206 std::vector<PacketInfo> TransportFeedbackAdapter::GetTransportFeedbackVector()
162 const { 207 const {
163 return last_packet_feedback_vector_; 208 return last_packet_feedback_vector_;
164 } 209 }
165 210
166 void TransportFeedbackAdapter::OnRttUpdate(int64_t avg_rtt_ms, 211 void TransportFeedbackAdapter::OnRttUpdate(int64_t avg_rtt_ms,
167 int64_t max_rtt_ms) { 212 int64_t max_rtt_ms) {
168 rtc::CritScope cs(&bwe_lock_); 213 rtc::CritScope cs(&bwe_lock_);
169 delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); 214 delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms);
170 } 215 }
171 216
172 } // namespace webrtc 217 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698