Chromium Code Reviews| Index: webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc |
| diff --git a/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc b/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc |
| index de4d93def3f4b5c405191d11bb8c3b8dc6f7dd02..319c053c3841ccd4cf5e36e29769f255196e88a3 100644 |
| --- a/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc |
| +++ b/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc |
| @@ -15,6 +15,8 @@ |
| #include <sstream> |
| #include "webrtc/modules/include/module_common_types.h" |
| +#include "webrtc/modules/pacing/bbr_paced_sender.h" |
| +#include "webrtc/modules/pacing/pacer.h" |
| #include "webrtc/modules/remote_bitrate_estimator/test/bwe.h" |
| #include "webrtc/modules/remote_bitrate_estimator/test/metric_recorder.h" |
| #include "webrtc/rtc_base/checks.h" |
| @@ -156,9 +158,12 @@ uint32_t VideoSender::TargetBitrateKbps() { |
| PacedVideoSender::PacedVideoSender(PacketProcessorListener* listener, |
| VideoSource* source, |
| BandwidthEstimatorType estimator) |
| - : VideoSender(listener, source, estimator), pacer_(&clock_, this, nullptr) { |
| - modules_.push_back(&pacer_); |
| - pacer_.SetEstimatedBitrate(source->bits_per_second()); |
| + : VideoSender(listener, source, estimator), |
| + // Ugly hack to use BBR's pacer. |
| + // TODO(gnish): make pacer choice dependant on the algorithm being used. |
| + 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.
|
| + modules_.push_back(pacer_.get()); |
| + pacer_->SetEstimatedBitrate(source->bits_per_second()); |
| } |
| PacedVideoSender::~PacedVideoSender() { |
| @@ -204,10 +209,11 @@ void PacedVideoSender::RunFor(int64_t time_ms, Packets* in_out) { |
| if (!generated_packets.empty()) { |
| for (Packet* packet : generated_packets) { |
| MediaPacket* media_packet = static_cast<MediaPacket*>(packet); |
| - pacer_.InsertPacket( |
| + pacer_->InsertPacket( |
| PacedSender::kNormalPriority, media_packet->header().ssrc, |
| media_packet->header().sequenceNumber, media_packet->send_time_ms(), |
| media_packet->payload_size(), false); |
| + pacer_queue_size_in_bytes_ += media_packet->payload_size(); |
| pacer_queue_.push_back(packet); |
| assert(pacer_queue_.size() < 10000); |
| } |
| @@ -284,11 +290,11 @@ bool PacedVideoSender::TimeToSendPacket(uint32_t ssrc, |
| // Make sure a packet is never paced out earlier than when it was put into |
| // the pacer. |
| assert(pace_out_time_ms >= media_packet->send_time_ms()); |
| - |
| media_packet->SetAbsSendTimeMs(pace_out_time_ms); |
| media_packet->set_send_time_us(1000 * pace_out_time_ms); |
| media_packet->set_sender_timestamp_us(1000 * pace_out_time_ms); |
| queue_.push_back(media_packet); |
| + pacer_queue_size_in_bytes_ -= media_packet->payload_size(); |
| pacer_queue_.erase(it); |
| return true; |
| } |
| @@ -305,7 +311,21 @@ void PacedVideoSender::OnNetworkChanged(uint32_t target_bitrate_bps, |
| uint8_t fraction_lost, |
| int64_t rtt) { |
| VideoSender::OnNetworkChanged(target_bitrate_bps, fraction_lost, rtt); |
| - pacer_.SetEstimatedBitrate(target_bitrate_bps); |
| + pacer_->SetEstimatedBitrate(target_bitrate_bps); |
| +} |
| + |
| +void PacedVideoSender::OnNetworkChanged(uint32_t bitrate_for_encoder_bps, |
| + uint32_t bitrate_for_pacer_bps, |
| + bool in_probe_rtt, |
| + int64_t target_set_time, |
| + uint64_t congestion_window) { |
| + VideoSender::OnNetworkChanged(bitrate_for_encoder_bps, 0u, 0u); |
| + pacer_->SetEstimatedBitrateAndCongestionWindow( |
| + bitrate_for_pacer_bps, in_probe_rtt, congestion_window); |
| +} |
| + |
| +void PacedVideoSender::OnBytesAcked(size_t bytes) { |
| + pacer_->OnBytesAcked(bytes); |
| } |
| const int kNoLimit = std::numeric_limits<int>::max(); |