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

Side by Side Diff: webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc

Issue 2999073002: Tweaked version of BBR for WebRTC. (Closed)
Patch Set: Fixed compilation errors. Created 3 years, 4 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/remote_bitrate_estimator/test/packet_sender.h" 11 #include "webrtc/modules/remote_bitrate_estimator/test/packet_sender.h"
12 12
13 #include <algorithm> 13 #include <algorithm>
14 #include <list> 14 #include <list>
15 #include <sstream> 15 #include <sstream>
16 16
17 #include "webrtc/modules/include/module_common_types.h" 17 #include "webrtc/modules/include/module_common_types.h"
18 #include "webrtc/modules/pacing/bbr_paced_sender.h"
19 #include "webrtc/modules/pacing/pacer.h"
18 #include "webrtc/modules/remote_bitrate_estimator/test/bwe.h" 20 #include "webrtc/modules/remote_bitrate_estimator/test/bwe.h"
19 #include "webrtc/modules/remote_bitrate_estimator/test/metric_recorder.h" 21 #include "webrtc/modules/remote_bitrate_estimator/test/metric_recorder.h"
20 #include "webrtc/rtc_base/checks.h" 22 #include "webrtc/rtc_base/checks.h"
21 23
22 namespace webrtc { 24 namespace webrtc {
23 namespace testing { 25 namespace testing {
24 namespace bwe { 26 namespace bwe {
25 27
26 void PacketSender::Pause() { 28 void PacketSender::Pause() {
27 running_ = false; 29 running_ = false;
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 RecordBitrate(); 151 RecordBitrate();
150 } 152 }
151 153
152 uint32_t VideoSender::TargetBitrateKbps() { 154 uint32_t VideoSender::TargetBitrateKbps() {
153 return (source_->bits_per_second() + 500) / 1000; 155 return (source_->bits_per_second() + 500) / 1000;
154 } 156 }
155 157
156 PacedVideoSender::PacedVideoSender(PacketProcessorListener* listener, 158 PacedVideoSender::PacedVideoSender(PacketProcessorListener* listener,
157 VideoSource* source, 159 VideoSource* source,
158 BandwidthEstimatorType estimator) 160 BandwidthEstimatorType estimator)
159 : VideoSender(listener, source, estimator), pacer_(&clock_, this, nullptr) { 161 : VideoSender(listener, source, estimator),
160 modules_.push_back(&pacer_); 162 // Ugly hack to use BBR's pacer.
161 pacer_.SetEstimatedBitrate(source->bits_per_second()); 163 // TODO(gnish): make pacer choice dependant on the algorithm being used.
164 pacer_(new BbrPacedSender(&clock_, this, nullptr)) {
philipel 2017/08/17 12:52:27 Let pacer be a unique ptr, but instantiate it with
gnish1 2017/08/17 15:37:49 Done.
165 modules_.push_back(pacer_.get());
166 pacer_->SetEstimatedBitrate(source->bits_per_second());
162 } 167 }
163 168
164 PacedVideoSender::~PacedVideoSender() { 169 PacedVideoSender::~PacedVideoSender() {
165 for (Packet* packet : pacer_queue_) 170 for (Packet* packet : pacer_queue_)
166 delete packet; 171 delete packet;
167 for (Packet* packet : queue_) 172 for (Packet* packet : queue_)
168 delete packet; 173 delete packet;
169 } 174 }
170 175
171 void PacedVideoSender::RunFor(int64_t time_ms, Packets* in_out) { 176 void PacedVideoSender::RunFor(int64_t time_ms, Packets* in_out) {
(...skipping 25 matching lines...) Expand all
197 // happens if the prober wants to probe, but there's no packet to send. 202 // happens if the prober wants to probe, but there's no packet to send.
198 if (time_until_next_event_ms == 0 && last_run_time_ms == 0) 203 if (time_until_next_event_ms == 0 && last_run_time_ms == 0)
199 time_until_next_event_ms = 1; 204 time_until_next_event_ms = 1;
200 last_run_time_ms = time_until_next_event_ms; 205 last_run_time_ms = time_until_next_event_ms;
201 206
202 Packets generated_packets; 207 Packets generated_packets;
203 source_->RunFor(time_until_next_event_ms, &generated_packets); 208 source_->RunFor(time_until_next_event_ms, &generated_packets);
204 if (!generated_packets.empty()) { 209 if (!generated_packets.empty()) {
205 for (Packet* packet : generated_packets) { 210 for (Packet* packet : generated_packets) {
206 MediaPacket* media_packet = static_cast<MediaPacket*>(packet); 211 MediaPacket* media_packet = static_cast<MediaPacket*>(packet);
207 pacer_.InsertPacket( 212 pacer_->InsertPacket(
208 PacedSender::kNormalPriority, media_packet->header().ssrc, 213 PacedSender::kNormalPriority, media_packet->header().ssrc,
209 media_packet->header().sequenceNumber, media_packet->send_time_ms(), 214 media_packet->header().sequenceNumber, media_packet->send_time_ms(),
210 media_packet->payload_size(), false); 215 media_packet->payload_size(), false);
216 pacer_queue_size_in_bytes_ += media_packet->payload_size();
211 pacer_queue_.push_back(packet); 217 pacer_queue_.push_back(packet);
212 assert(pacer_queue_.size() < 10000); 218 assert(pacer_queue_.size() < 10000);
213 } 219 }
214 } 220 }
215 221
216 clock_.AdvanceTimeMilliseconds(time_until_next_event_ms); 222 clock_.AdvanceTimeMilliseconds(time_until_next_event_ms);
217 223
218 if (time_until_next_event_ms == time_until_feedback_ms) { 224 if (time_until_next_event_ms == time_until_feedback_ms) {
219 if (!feedbacks.empty()) { 225 if (!feedbacks.empty()) {
220 bwe_->GiveFeedback(*feedbacks.front()); 226 bwe_->GiveFeedback(*feedbacks.front());
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 const PacedPacketInfo& pacing_info) { 283 const PacedPacketInfo& pacing_info) {
278 for (Packets::iterator it = pacer_queue_.begin(); it != pacer_queue_.end(); 284 for (Packets::iterator it = pacer_queue_.begin(); it != pacer_queue_.end();
279 ++it) { 285 ++it) {
280 MediaPacket* media_packet = static_cast<MediaPacket*>(*it); 286 MediaPacket* media_packet = static_cast<MediaPacket*>(*it);
281 if (media_packet->header().sequenceNumber == sequence_number) { 287 if (media_packet->header().sequenceNumber == sequence_number) {
282 int64_t pace_out_time_ms = clock_.TimeInMilliseconds(); 288 int64_t pace_out_time_ms = clock_.TimeInMilliseconds();
283 289
284 // Make sure a packet is never paced out earlier than when it was put into 290 // Make sure a packet is never paced out earlier than when it was put into
285 // the pacer. 291 // the pacer.
286 assert(pace_out_time_ms >= media_packet->send_time_ms()); 292 assert(pace_out_time_ms >= media_packet->send_time_ms());
287
288 media_packet->SetAbsSendTimeMs(pace_out_time_ms); 293 media_packet->SetAbsSendTimeMs(pace_out_time_ms);
289 media_packet->set_send_time_us(1000 * pace_out_time_ms); 294 media_packet->set_send_time_us(1000 * pace_out_time_ms);
290 media_packet->set_sender_timestamp_us(1000 * pace_out_time_ms); 295 media_packet->set_sender_timestamp_us(1000 * pace_out_time_ms);
291 queue_.push_back(media_packet); 296 queue_.push_back(media_packet);
297 pacer_queue_size_in_bytes_ -= media_packet->payload_size();
292 pacer_queue_.erase(it); 298 pacer_queue_.erase(it);
293 return true; 299 return true;
294 } 300 }
295 } 301 }
296 return false; 302 return false;
297 } 303 }
298 304
299 size_t PacedVideoSender::TimeToSendPadding(size_t bytes, 305 size_t PacedVideoSender::TimeToSendPadding(size_t bytes,
300 const PacedPacketInfo& pacing_info) { 306 const PacedPacketInfo& pacing_info) {
301 return 0; 307 return 0;
302 } 308 }
303 309
304 void PacedVideoSender::OnNetworkChanged(uint32_t target_bitrate_bps, 310 void PacedVideoSender::OnNetworkChanged(uint32_t target_bitrate_bps,
305 uint8_t fraction_lost, 311 uint8_t fraction_lost,
306 int64_t rtt) { 312 int64_t rtt) {
307 VideoSender::OnNetworkChanged(target_bitrate_bps, fraction_lost, rtt); 313 VideoSender::OnNetworkChanged(target_bitrate_bps, fraction_lost, rtt);
308 pacer_.SetEstimatedBitrate(target_bitrate_bps); 314 pacer_->SetEstimatedBitrate(target_bitrate_bps);
315 }
316
317 void PacedVideoSender::OnNetworkChanged(uint32_t bitrate_for_encoder_bps,
318 uint32_t bitrate_for_pacer_bps,
319 bool in_probe_rtt,
320 int64_t target_set_time,
321 uint64_t congestion_window) {
322 VideoSender::OnNetworkChanged(bitrate_for_encoder_bps, 0u, 0u);
323 pacer_->SetEstimatedBitrateAndCongestionWindow(
324 bitrate_for_pacer_bps, in_probe_rtt, congestion_window);
325 }
326
327 void PacedVideoSender::OnBytesAcked(size_t bytes) {
328 pacer_->OnBytesAcked(bytes);
309 } 329 }
310 330
311 const int kNoLimit = std::numeric_limits<int>::max(); 331 const int kNoLimit = std::numeric_limits<int>::max();
312 const int kPacketSizeBytes = 1200; 332 const int kPacketSizeBytes = 1200;
313 333
314 TcpSender::TcpSender(PacketProcessorListener* listener, 334 TcpSender::TcpSender(PacketProcessorListener* listener,
315 int flow_id, 335 int flow_id,
316 int64_t offset_ms) 336 int64_t offset_ms)
317 : TcpSender(listener, flow_id, offset_ms, kNoLimit) { 337 : TcpSender(listener, flow_id, offset_ms, kNoLimit) {
318 } 338 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 RecordBitrate(); 498 RecordBitrate();
479 } 499 }
480 500
481 uint32_t TcpSender::TargetBitrateKbps() { 501 uint32_t TcpSender::TargetBitrateKbps() {
482 return bitrate_kbps_; 502 return bitrate_kbps_;
483 } 503 }
484 504
485 } // namespace bwe 505 } // namespace bwe
486 } // namespace testing 506 } // namespace testing
487 } // namespace webrtc 507 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698