Chromium Code Reviews| Index: media/cast/transport/pacing/paced_sender.cc |
| diff --git a/media/cast/transport/pacing/paced_sender.cc b/media/cast/transport/pacing/paced_sender.cc |
| index 10b42240759a3fd2c2580f802a7ed3b1e8b473ea..412a21026e207ec4e497a1eee9ba816cab16c32d 100644 |
| --- a/media/cast/transport/pacing/paced_sender.cc |
| +++ b/media/cast/transport/pacing/paced_sender.cc |
| @@ -73,11 +73,22 @@ bool PacedSender::SendPackets(const SendPacketVector& packets) { |
| return true; |
| } |
| -bool PacedSender::ResendPackets(const SendPacketVector& packets) { |
| +bool PacedSender::ResendPackets(const SendPacketVector& packets, |
| + base::TimeDelta rtt) { |
| + VLOG(0) << "RESENDPACKETS!!!!!!!"; |
|
Alpha Left Google
2014/06/18 01:43:32
This shouldn't be there.
hubbe
2014/06/18 20:22:28
Already gone.
|
| if (packets.empty()) { |
| return true; |
| } |
| + base::TimeTicks now = clock_->NowTicks(); |
| for (size_t i = 0; i < packets.size(); i++) { |
| + std::map<PacketKey, base::TimeTicks>::const_iterator j = |
| + sent_time_.find(packets[i].first); |
| + |
| + if (j != sent_time_.end() && now - j->second < rtt) { |
| + // TODO(hubbe): Log this. |
|
Alpha Left Google
2014/06/18 01:43:32
We should log a PACKET_RTX_REJECTED event in the l
hubbe
2014/06/18 20:22:28
Done.
|
| + continue; |
| + } |
| + |
| packet_list_[packets[i].first] = |
| make_pair(PacketType_Resend, packets[i].second); |
| } |
| @@ -108,11 +119,13 @@ void PacedSender::CancelSendingPacket(const PacketKey& packet_key) { |
| packet_list_.erase(packet_key); |
| } |
| -PacketRef PacedSender::GetNextPacket(PacketType* packet_type) { |
| +PacketRef PacedSender::GetNextPacket(PacketType* packet_type, |
| + PacketKey* packet_key) { |
| std::map<PacketKey, std::pair<PacketType, PacketRef> >::iterator i; |
| i = packet_list_.begin(); |
| DCHECK(i != packet_list_.end()); |
| *packet_type = i->second.first; |
| + *packet_key = i->first; |
| PacketRef ret = i->second.second; |
| packet_list_.erase(i); |
| return ret; |
| @@ -134,6 +147,13 @@ size_t PacedSender::size() const { |
| // case we called PostDelayedTask on this function to start a new burst. |
| void PacedSender::SendStoredPackets() { |
| State previous_state = state_; |
| + |
| + if (state_ == State_TransportBlocked) { |
| + base::TimeTicks sent_time = clock_->NowTicks(); |
| + sent_time_[in_progress_packet_key_] = sent_time; |
| + sent_time_buffer_[in_progress_packet_key_] = sent_time; |
| + } |
| + |
| state_ = State_Unblocked; |
| if (empty()) { |
| return; |
| @@ -185,7 +205,8 @@ void PacedSender::SendStoredPackets() { |
| return; |
| } |
| PacketType packet_type; |
| - PacketRef packet = GetNextPacket(&packet_type); |
| + PacketRef packet = GetNextPacket(&packet_type, |
| + &in_progress_packet_key_); |
| switch (packet_type) { |
| case PacketType_Resend: |
| @@ -202,6 +223,14 @@ void PacedSender::SendStoredPackets() { |
| return; |
| } |
| current_burst_size_++; |
| + base::TimeTicks sent_time = clock_->NowTicks(); |
| + sent_time_[in_progress_packet_key_] = sent_time; |
| + sent_time_buffer_[in_progress_packet_key_] = sent_time; |
| + } |
| + // Keep ~1 second of data (1000 packets) |
| + if (sent_time_buffer_.size() > kMaxBurstSize * 1000 / kPacingIntervalMs) { |
|
Alpha Left Google
2014/06/18 01:43:32
nit: Define 1000 as a constant at the top of this
hubbe
2014/06/18 20:22:27
It's just the number of milliseconds in a second.
|
| + sent_time_.swap(sent_time_buffer_); |
| + sent_time_buffer_.clear(); |
| } |
| state_ = State_Unblocked; |
|
Alpha Left Google
2014/06/18 01:43:32
Please put a DCHECK for the sizes of the sent_time
hubbe
2014/06/18 20:22:27
Done.
|
| } |