Index: net/quic/quic_received_packet_manager.cc |
diff --git a/net/quic/quic_received_packet_manager.cc b/net/quic/quic_received_packet_manager.cc |
index 1cd261a54d264a5e2779970640371f91ced2907e..a0dd86a56f62098a4ee2d14f438feab579fd18f1 100644 |
--- a/net/quic/quic_received_packet_manager.cc |
+++ b/net/quic/quic_received_packet_manager.cc |
@@ -27,7 +27,8 @@ QuicReceivedPacketManager::QuicReceivedPacketManager() |
QuicReceivedPacketManager::~QuicReceivedPacketManager() {} |
void QuicReceivedPacketManager::RecordPacketReceived( |
- const QuicPacketHeader& header, QuicTime receipt_time) { |
+ const QuicPacketHeader& header, |
+ QuicTime receipt_time) { |
QuicPacketSequenceNumber sequence_number = header.packet_sequence_number; |
DCHECK(IsAwaitingPacket(sequence_number)); |
@@ -55,19 +56,25 @@ bool QuicReceivedPacketManager::IsAwaitingPacket( |
} |
void QuicReceivedPacketManager::UpdateReceivedPacketInfo( |
- ReceivedPacketInfo* received_info, QuicTime approximate_now) { |
+ ReceivedPacketInfo* received_info, |
+ QuicTime approximate_now) { |
*received_info = received_info_; |
received_info->entropy_hash = EntropyHash(received_info_.largest_observed); |
+ |
if (time_largest_observed_ == QuicTime::Zero()) { |
- // We have not received any new higher sequence numbers since we sent our |
- // last ACK. |
+ // We have received no packets. |
received_info->delta_time_largest_observed = QuicTime::Delta::Infinite(); |
- } else { |
- received_info->delta_time_largest_observed = |
- approximate_now.Subtract(time_largest_observed_); |
+ return; |
+ } |
- time_largest_observed_ = QuicTime::Zero(); |
+ if (approximate_now < time_largest_observed_) { |
+ // Approximate now may well be "in the past". |
+ received_info->delta_time_largest_observed = QuicTime::Delta::Zero(); |
+ return; |
} |
+ |
+ received_info->delta_time_largest_observed = |
+ approximate_now.Subtract(time_largest_observed_); |
} |
void QuicReceivedPacketManager::RecordPacketEntropyHash( |