X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fnet%2Fquic%2Fquic_received_packet_manager.cc;h=49a056d5dfdec212779496f898935a2a74211188;hb=004985e17e624662a4c85c76a7654039dc83f028;hp=3e9860b19935bece61df6a6cea95c816566f088b;hpb=2f108dbacb161091e42a3479f4e171339b7e7623;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/net/quic/quic_received_packet_manager.cc b/src/net/quic/quic_received_packet_manager.cc index 3e9860b..49a056d 100644 --- a/src/net/quic/quic_received_packet_manager.cc +++ b/src/net/quic/quic_received_packet_manager.cc @@ -7,6 +7,7 @@ #include "base/logging.h" #include "base/stl_util.h" #include "net/base/linked_hash_map.h" +#include "net/quic/quic_connection_stats.h" using std::make_pair; using std::max; @@ -26,14 +27,16 @@ const size_t kMaxPacketsAfterNewMissing = 4; } QuicReceivedPacketManager::QuicReceivedPacketManager( - CongestionFeedbackType congestion_type) + CongestionFeedbackType congestion_type, + QuicConnectionStats* stats) : packets_entropy_hash_(0), largest_sequence_number_(0), peer_largest_observed_packet_(0), least_packet_awaited_by_peer_(1), peer_least_packet_awaiting_ack_(0), time_largest_observed_(QuicTime::Zero()), - receive_algorithm_(ReceiveAlgorithmInterface::Create(congestion_type)) { + receive_algorithm_(ReceiveAlgorithmInterface::Create(congestion_type)), + stats_(stats) { received_info_.largest_observed = 0; received_info_.entropy_hash = 0; } @@ -57,6 +60,16 @@ void QuicReceivedPacketManager::RecordPacketReceived( // "missing packets" list. DVLOG(1) << "Removing " << sequence_number << " from missing list"; received_info_.missing_packets.erase(sequence_number); + + // Record how out of order stats. + ++stats_->packets_reordered; + uint32 sequence_gap = received_info_.largest_observed - sequence_number; + stats_->max_sequence_reordering = + max(stats_->max_sequence_reordering, sequence_gap); + uint32 reordering_time_us = + receipt_time.Subtract(time_largest_observed_).ToMicroseconds(); + stats_->max_time_reordering_us = max(stats_->max_time_reordering_us, + reordering_time_us); } if (header.packet_sequence_number > received_info_.largest_observed) { received_info_.largest_observed = header.packet_sequence_number; @@ -111,8 +124,8 @@ void QuicReceivedPacketManager::RecordPacketEntropyHash( QuicPacketEntropyHash entropy_hash) { if (sequence_number < largest_sequence_number_) { DVLOG(1) << "Ignoring received packet entropy for sequence_number:" - << sequence_number << " less than largest_peer_sequence_number:" - << largest_sequence_number_; + << sequence_number << " less than largest_peer_sequence_number:" + << largest_sequence_number_; return; } packets_entropy_.insert(make_pair(sequence_number, entropy_hash)); @@ -162,8 +175,8 @@ void QuicReceivedPacketManager::RecalculateEntropyHash( DCHECK_LE(peer_least_unacked, received_info_.largest_observed); if (peer_least_unacked < largest_sequence_number_) { DVLOG(1) << "Ignoring received peer_least_unacked:" << peer_least_unacked - << " less than largest_peer_sequence_number:" - << largest_sequence_number_; + << " less than largest_peer_sequence_number:" + << largest_sequence_number_; return; } largest_sequence_number_ = peer_least_unacked;